http://www.cracklab.ru/f/index.php?action=vthread&forum=3&topic=6732
ÀïÃæ×¢ÊÍÊǶíÎĵġ£
´úÂë:
////////////////////////////////////////////////////////////////
//
// EXECryptor 2.x IAT rebuilder by PE_Kill / REVENGE CREW v 1.9
// -------------------------------------------------------------
// Replace my values of iat_start and iat_end and run script!
//
// =============================================================
// - HISTORY -
// =============================================================
// [ v 0.x-1.7 ]
// Private versions
//
// [ v 1.8 ]
// Public version
//
// [ v 1.9 ]
// ! Thanks pavka, for good BugReport
// * tracing became some slower, but is more stable.
// * little bugfixes in IAT reader.
// =============================================================
//
////////////////////////////////////////////////////////////////
var _esp
var iat_start
var iat_end
var iat_cur
var addr
var counter
var flag
var c_gpa
var temp
var gmh
var ll
var ibase
var iend
//================================================
// Èíèöèàëèçèðóåì IAT
//================================================
mov iat_start,00471FF8
mov iat_end,00472EB4
//================================================
// Ïîëó÷àåì èíôîðìàöèþ ?ïðîöåññå
//================================================
//================================================
// Ïîëó÷àåì ImageBase áðóòîì, ?? îëÿ èíîãäà íå
// õî÷å?äàòü åã?íîðìàëüíûì ñïîñîáîì
//================================================
mov addr,eip
and addr,FFFFF000
add addr,1000
@get_base:
sub addr,1000
mov temp,[addr]
and temp,0000FFFF
cmp temp,00005A4D
jne @get_base
//================================================
// Áåðå?èç õýäåðà ImageSize, íî èíîãäà êðèïòî?åã?
// ïîðòèò, ïîýòîì?áóäå?ïåðåñòðàõîâê?..
//================================================
mov ibase,addr
mov temp,addr
add temp,3C
mov temp,[temp]
add temp,ibase
add temp,50
mov iend,[temp]
eval "ImageSize = {iend} ???"
msgyn $RESULT
cmp $RESULT,1
je @run
ask "Enter real ImageSize!"
mov iend,$RESULT
@run:
add iend,ibase
//================================================
// Ïëó÷àå?àäðåñà ÀÏ? êîòîðû?èñïîëüçóåò âðàïïå?
//================================================
gpa "GetModuleHandleA","kernel32.dll"
mov gmh,$RESULT
gpa "LoadLibraryA","kernel32.dll"
mov ll,$RESULT
//////////////////////////////////////////////////
mov _esp,esp
mov iat_cur,iat_start
sub iat_cur,4
mov c_gpa,0 // Cryptor GetProcAddress íåèçâåñòíà
//=================================================
// Öèêë âîññòàíîâëåí? IAT
//=================================================
@imprec:
add iat_cur,4
cmp iat_cur,iat_end // Êîíå?
ja @end
mov addr,[iat_cur]
cmp addr,0 // Ðàçäåëèòåë?
je @imprec
cmp addr,ibase
jb @imprec
cmp addr,iend
ja @imprec
mov esp,_esp // Âîññòàíàâëèâàå?ñòåê
mov eip,addr // Âñòàåì íà âðàïïå?
mov [esp],eip // Èíîãäà êðèïòî?÷èòàåò áàéò ïî àäðåñó âîçâðàòà
mov counter,25 // Ñ÷åò÷è?òðàññèðîâê?
mov flag,0 // Íè÷åãî íå íàéäåí?
//==================================================
// Èùåì êîìàíä?ïðîâåðêè âíóòðåííåé IAT
//==================================================
@chk_run:
dec counter
cmp counter,0 // Åñëè ñ÷åò÷è?îáíóëèëñÿ
je @find_gpa // Òî èäåì íà Cryptor gpa
sti // Äåëàåì øà?
mov temp,[eip] // ×èòàåì áàéò??eip
cmp flag,0 // Åñëè åù?íè÷åãî íå íàéäåí?
ja @chk_jnz
and temp,0000FFFF // Èùåì OR EAX,EAX
cmp temp,0000C009
jne @chk_run // Íå?ñëåäóþ?ÿ êîìàíä?
inc flag // Íàøë? âûñòàâ?åì ôëàã
jmp @chk_run // Èäåì íà ñëåäóþùþ?êîìàíä?
@chk_jnz:
and temp,0000FFFF // Èùåì JNZ xxxxxxxx
cmp temp,0000850F
jne @chk_run // Íå?ñëåäóþ?ÿ êîìàíä?
mov !ZF,1 // Äà íàøë? ãîâîðè?êðèïòîðó, ÷ò?âíóòðåííÿÿ IAT ïóñò?
@find_gpa:
cmp c_gpa,0 // Íàøë?ëè ìû àäðå?Cryptor GetProcAddress?
jne @trace // Åñëè íàøë?òî èäåì íà ïîëó÷åíè?àäðåñà ÀÏ?
bphws gmh,"x" // Èíà÷?ñòàâèì áðÿ?íà GetModuleHandleA
bphws ll,"x" // ?íà LoadLibraryA
ticnd "WORD [eip]==453Bh" // òðàññèðóåì, ïîêà íå äîéäåì äî ñðàâíåíèÿ õýøå?
bphwc ll // ñíèìàå?áðÿêè ?ÀÏ?
bphwc gmh
cmp eip,gmh // Ìû íà GetModuleHandleA?
jne @chk_ll // Íå?ñëåäóþ?ÿ ïðîâåðêà...
bp [esp] // Èíà÷?ïåðåõîäè?íà àäðå?âîçâðàòà
run
bc eip
jmp @find_gpa // ñíîâ?èäåì íà ïîèñ?Cryptor GetProcAddress
@chk_ll:
cmp eip,ll // Ìû íà GetModuleHandleA?
jne @f_jnz // Íå?ñëåäóþ?ÿ ïðîâåðêà...
bp [esp] // Èíà÷?ïåðåõîäè?íà àäðå?âîçâðàòà
run
bc eip
jmp @find_gpa // ñíîâ?èäåì íà ïîèñ?Cryptor GetProcAddress
//=================================================
// Òåïåðü èùåì jnz xxxxxxxx
//=================================================
@f_jnz:
sti
mov temp,[eip] // 659F850F
and temp,0000FFFF
cmp temp,0000850F
jne @f_jnz
mov !ZF,1 // åñëè íàøë? òî ?Z ëîæè?åäèíè÷êó, êà?áóäò?õýøè ñîâïàë?
//==================================================
// Òåïåðü èùåì âòîðóþ ïî ñ÷åò?êîìàíä?ADD EAX,DWORD PTR SS:[EBP-4]
//==================================================
mov counter,2
@f_add:
sti
mov temp,[eip] // 68FC4503
and temp,00FFFFFF
cmp temp,00FC4503
jne @f_add
sti
dec counter
cmp counter,0
jne @f_add
mov c_gpa,eip // Òåêóùè?àäðå??áóäå?àäðåñî?Cryptor GetProcAddress
sub iat_cur,4 // Âîçâðàùàåì óêàçàòåë?íà IAT ?ïðåæíå?ïîëîæåíè?
jmp @imprec // Âîçâðàùàåì? ?öèêë âîññòàíîâëåí? ÈÀ?
//==================================================
// Ïîëó÷åíè?àäðåñà ÀÏ?..
//==================================================
@trace:
bphws c_gpa,"x"
run
bphwc c_gpa
cmp eip,c_gpa
jne @error
mov [iat_cur],eax
jmp @imprec
@end:
msg "OK!"
pause
ret
@error:
msg "error!!!"
pause
ret