Здравствуйте!
Я пишу программу на FASM, учусь инжектить код своей длл в explorer.exe. Проблема в том, что моя программа бсодит при попытке выполнения CreateRemoteThread. Логи говорят что была попытка выполнения кода по адресу 0000000. Атрибуты области памяти в процессе - RWE. Однако контекст процесса рушится и EIP почему-то обнуляется.
OllyDBG 1.01 восторгается настолько, что намертво виснет при попытке трейсить эту функцию. Битый час пытаюсь найти инфу по проблеме в гугле, пока безуспешно. Подскажите хотя бы, в каком направлении нужно мыслить:)
Система WinXP SP3 5.1.2600
Вот, собственно, исходник:
Вот исходник инжектируемой либы (дельфи, мать ее за ногу:) :Code:format PE GUI 4.0 entry start include 'win32a.inc' RemoteCodeStart: call .delta .delta: pop ebp sub ebp, .delta metka: lea eax, [ebp+mylib] push eax ;имя модуля для LoadLibraryA call [ebp+pLoadLibraryA] push eax;возвращенное значение-хендл моей библиотеки lea eax, [ebp+nameproc];имя моей экспортируемой функции hello push eax;толкаем его в стек call [ebp+pGetProcAddress] call eax;вызываем функцию hello из моей либы .thrend: push 0 call [ebp+pExitThread] ret pLoadLibraryA dd 0 pGetProcAddress dd 0 pExitThread dd 0 mylib db 'Mylib.dll',0 nameproc db 'hello',0 RemoteCodeEnd: RemoteCodeSize equ RemoteCodeEnd-RemoteCodeStart start: mov eax,[LoadLibraryA] mov [pLoadLibraryA],eax;указатели mov eax,[GetProcAddress] mov [pGetProcAddress],eax invoke FindWindow,szWndName,0;ищем окно эксплорер.ехе mov [hWnd],eax invoke GetWindowThreadProcessId,[hWnd],ProccessID;определяем пид mov [ThreadID],eax invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,eax,[ProccessID] mov [hProcess],eax;открываем процесс с правами записи invoke VirtualAllocEx,[hProcess],0,RemoteCodeSize,MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE mov [RemoteThreadBaseAddress],eax;выделяем блок памяти invoke WriteProcessMemory,[hProcess],eax,RemoteCodeStart,RemoteCodeSize,Writed;пишем туда свой код invoke CreateRemoteThread,[hProcess],0,0,[RemoteThreadBaseAddress],0,0,RemoteThreadID;запускаем его. тут крашится наша программа , при попытке ;отладить код внутри експлорера все бсодит. в логах пишет, что ошиблась при попытке выполнения кода по адресу 0000000. ret RemoteThreadID dd ? Writed dd ? hWnd dd ? szWndName db 'Shell_TrayWnd',0 hProcess dd ? ThreadID dd ? ProccessID dd ? RemoteThreadBaseAddress dd ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'api/kernel32.inc' include 'api/user32.inc'
P.S. Я нуб, пинайте аккуратно, пожалуйстаCode:library mylib; uses SysUtils, Classes; function hello; begin MessageBoxA(0,'Inject OK!','test',MB_OK); end; exports hello name 'hello'; begin end.![]()



Reply With Quote
Thanks
