13.07.2012, 17:49
Hey,
also der ASM Code bewirkt folgendes:
[code=ASM]
.code
start:
invoke GetModuleHandle,0 ;Module Handle bekommen
mov [lpModule], eax ;in variable lpModule verschieben
;in dem folgenden Code wird die Größe des Moduls ausgelesen
mov edi,eax
add edi,[ edi+3Ch]
add edi,4
add edi,14h
mov eax,[edi+38h]
mov [dwSize],eax ;und in dwSize verschoben
invoke FindWindow,CTEXT ('IEFrame'),0 ;find iexplorer.exe window class
invoke GetWindowThreadProcessId, eax, addr ThePID ;get the PID
invoke OpenProcess,PROCESS_ALL_ACCESS, FALSE, ThePID ;open the process
mov [lpProcess],eax ;process handle in lpProcess verschieben
invoke VirtualFreeEx, [lpProcess], [lpModule], 0, MEM_RELEASE
invoke VirtualAllocEx, [lpProcess], [lpModule], dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ;hier wird Speicher alloziiert und die adresse, wo der speicher alloziiert wurde in eax gespeichert
;mit dem folgenden WPM Befehl wird in den iexplore.exe an die Stelle, wo speicher alloziiert wurde
invoke WriteProcessMemory, [lpProcess], eax, [lpModule], [dwSize], addr nBytesWritten
;das modul handle geschrieben
;und im nachfolgenden dann der Thread injected_thread erstellt
invoke CreateRemoteThread, [lpProcess], 0, 0, offset injected_thread, [lpModule], 0, ebx
invoke ExitProcess,0
;der code der injected_thread routine sollte selbsterklärend sein
injected_thread proc
invoke LoadLibrary,CTEXT ('user32.dll')
invoke MessageBox,0,CTEXT ('Success!!!'),CTEXT ('Hello From iexplorer'),0
invoke ExitThread,0
ret
injected_thread endp
[/code]
Sorry, aber hab grad keine Zeit mehr um ausführlicher auf dein Problem einzugehen.
//EDiT: Hab grad noch nen sehr interessanten Artikel gefunden: http://www.codeguru.com/cpp/w-p/system/p...rocess.htm
Vor allem der dritte Unterpunkt (III. The CreateRemoteThread & WriteProcessMemory Technique) sollte dich interessieren.
also der ASM Code bewirkt folgendes:
[code=ASM]
.code
start:
invoke GetModuleHandle,0 ;Module Handle bekommen
mov [lpModule], eax ;in variable lpModule verschieben
;in dem folgenden Code wird die Größe des Moduls ausgelesen
mov edi,eax
add edi,[ edi+3Ch]
add edi,4
add edi,14h
mov eax,[edi+38h]
mov [dwSize],eax ;und in dwSize verschoben
invoke FindWindow,CTEXT ('IEFrame'),0 ;find iexplorer.exe window class
invoke GetWindowThreadProcessId, eax, addr ThePID ;get the PID
invoke OpenProcess,PROCESS_ALL_ACCESS, FALSE, ThePID ;open the process
mov [lpProcess],eax ;process handle in lpProcess verschieben
invoke VirtualFreeEx, [lpProcess], [lpModule], 0, MEM_RELEASE
invoke VirtualAllocEx, [lpProcess], [lpModule], dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ;hier wird Speicher alloziiert und die adresse, wo der speicher alloziiert wurde in eax gespeichert
;mit dem folgenden WPM Befehl wird in den iexplore.exe an die Stelle, wo speicher alloziiert wurde
invoke WriteProcessMemory, [lpProcess], eax, [lpModule], [dwSize], addr nBytesWritten
;das modul handle geschrieben
;und im nachfolgenden dann der Thread injected_thread erstellt
invoke CreateRemoteThread, [lpProcess], 0, 0, offset injected_thread, [lpModule], 0, ebx
invoke ExitProcess,0
;der code der injected_thread routine sollte selbsterklärend sein
injected_thread proc
invoke LoadLibrary,CTEXT ('user32.dll')
invoke MessageBox,0,CTEXT ('Success!!!'),CTEXT ('Hello From iexplorer'),0
invoke ExitThread,0
ret
injected_thread endp
[/code]
//EDiT: Hab grad noch nen sehr interessanten Artikel gefunden: http://www.codeguru.com/cpp/w-p/system/p...rocess.htm
Vor allem der dritte Unterpunkt (III. The CreateRemoteThread & WriteProcessMemory Technique) sollte dich interessieren.