rendered paste bodyformat PE console
entry main
include 'win32a.inc'
section '.data' data readable writable
hProcess dd 0
dwBaseAddr dd 0
dwlen dd 0
szPath db 256 dup 0
szPath2 db 256 dup 0
procname db 64 dup 0
szLib db 'kernel32.dll', 0
szFunc db 'LoadLibraryA', 0
lpAppName db 'info', 0
lpKeyName db 'process', 0
lpKeyName2 db 'dllpath', 0
lpIni db '\test.ini', 0
struct PROCESSENTRY32
dwSize dd 0
cntUsage dd 0
th32ProcessID dd 0
th32DefaultHeapID dd 0
th32ModuleID dd 0
cntThreads dd 0
th32ParentProcessID dd 0
pcPriClassBase dd 0
dwFlags dd 0
szExeFile db 260 dup 0
ends
PE PROCESSENTRY32
hSnap dd 0
section '.text' code executable readable
proc main
invoke GetCurrentDirectoryA, 256, szPath
invoke lstrcatA, szPath, lpIni
invoke GetPrivateProfileStringA, lpAppName, lpKeyName, 0, procname, 256, szPath
invoke GetPrivateProfileStringA, lpAppName, lpKeyName2, 0, szPath2, 256, szPath
.loop:
invoke Sleep, 500
stdcall findprocess, procname
test eax, eax
je .loop
stdcall injectdll, eax, szPath2
invoke ExitProcess, 0
endp
proc findprocess szProcess
invoke CreateToolhelp32Snapshot, 2, 0
mov [hSnap], eax
cmp eax, -1
je .finish2
mov [PE.dwSize], sizeof.PROCESSENTRY32
invoke Process32First, eax, PE
test eax, eax
je .finish3
.loop:
invoke Process32Next, [hSnap], PE
test eax, eax
je .finish3
invoke lstrcmpA, PE.szExeFile, [szProcess]
test eax, eax
jne .loop
invoke CloseHandle, [hSnap]
mov eax, [PE.th32ProcessID]
jmp .finish
.finish3:
invoke CloseHandle, [hSnap]
.finish2:
xor eax, eax
.finish:
pop ebp
ret 4
endp
proc injectdll pid,dllpath
cmp [pid], 0
je .finish
cmp [dllpath], 0
je .finish
invoke OpenProcess, PROCESS_ALL_ACCESS, 0, [pid]
test eax, eax
je .finish
mov [hProcess], eax
invoke lstrlenA, [dllpath]
inc eax
mov [dwlen], eax ;store length of dllpath
invoke VirtualAllocEx, [hProcess], 0, eax, MEM_COMMIT, PAGE_EXECUTE_READWRITE
test eax, eax
je .cleanup
mov [dwBaseAddr], eax
invoke WriteProcessMemory, [hProcess], eax, [dllpath], [dwlen], 0
test eax, eax
je .cleanup
invoke GetModuleHandleA, szLib
invoke GetProcAddress, eax, szFunc
invoke CreateRemoteThread, [hProcess], 0, 0, eax, [dwBaseAddr], 0, 0
test eax, eax
je .cleanup
invoke CloseHandle, eax
.cleanup:
invoke CloseHandle, [hProcess]
.finish:
pop ebp
ret 8
endp
section '.idata' import data readable writable
library kernel, 'KERNEL32.DLL'
import kernel,\
OpenProcess, 'OpenProcess',\
ExitProcess, 'ExitProcess',\
CloseHandle, 'CloseHandle',\
Beep, 'Beep',\
lstrlenA, 'lstrlenA',\
VirtualAllocEx, 'VirtualAllocEx',\
WriteProcessMemory, 'WriteProcessMemory',\
CreateRemoteThread, 'CreateRemoteThread',\
LoadLibraryA, 'LoadLibraryA',\
GetModuleFileNameA, 'GetModuleFileNameA',\
GetCurrentDirectoryA, 'GetCurrentDirectoryA',\
lstrcatA, 'lstrcatA',\
CreateToolhelp32Snapshot, 'CreateToolhelp32Snapshot',\
Process32First, 'Process32First',\
Process32Next, 'Process32Next',\
lstrcmpA, 'lstrcmpA',\
GetModuleHandleA, 'GetModuleHandleA',\
GetProcAddress, 'GetProcAddress',\
GetPrivateProfileStringA, 'GetPrivateProfileStringA',\
Sleep, 'Sleep'