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