• ±ê Ì⣺HyperSnap-DX 5.60ÍÑ¿Ç£¨Arm3.70a with IAT Elimination£©
  • ×÷ Õߣºyesky1
  • ʱ ¼ä£º004-10-25,18:48
  • Á´ ½Ó£ºhttp://bbs.pediy.com

ºÃ¾ÃûÔõôÍѹý¿Ç£¬×î½üÅöµ½Ò»¸öÈí¼þÊÇÓÃarm¼ÓµÄ¿Ç£¬Óõ½ÁËarmµÄÊäÈë±íÂÒÐòºÍÔ¶µØÖ·Ìøת£¬Ö»ÓÐÕÒЩ×ÊÁÏÀ´²¹¿Î£¬ÂÔÓÐЩÐĵ㬻¹ÍûÖ¸Õý¡£

ÏÂÃæÒÔHyperSnap-DX 5.60ΪÀý£¬Õâ¸öÊÇarm3.70a¼ÓµÄ¿Ç£¬µ¥½ø³Ì£¬ÓÃÁËÊäÈë±íÂÒÐòºÍÔ¶µØÖ·Ìøת¡£HyperSnap-DX 5.61ÒѾ­ÊÇË«½ø³ÌCC¿ÇÁË£¬»¹²»¸ÒÅö£¬:( 

µÚ1²¿·Ö£º×¼±¸¹¤×÷&µÖ´ïOEP

ÏÈÐèÒªÕÒµ½Ò»Ð©»ù±¾Êý¾Ý
1. OEP
Éè¶Ïµãhe SetProcessWorkingSetSize¶ÏϺóÔÙÉè¶Ïµãhe GetCurrentThreadId
¶ÏϺó,Ctrl+F9·µ»Ø£¬È¥³ýÕâÁ½¸ö¶Ïµã£¬ÏòÏ¿´£¬¿´µ½ÄǸöcall ediÁËû£¬ÔÚ°´F2ÄÇÀïÉè¸ö¶Ïµã
¶ÏϺó£¬F7¸úÈ룬¾ÍÀ´µ½OEPÁË
¼Çס£º OEP=004E8850

2. magicjump
ºÃ¼¸¸öµØ·½ÐÞ¸ÄÌøת¶¼¿ÉÒÔ·ÅÖÃarmÆÆ»µÊäÈë±íµÄ£¬¶¼¿ÉÒÔ³Æ֮Ϊmagicjump
À´¿´arm´¦ÀíÊäÈë±íµÄÁ÷³Ì
ÏȽ«Ò»Ð©Ô¤ÉèµÄapi¾­¹ý´¦Àí
È»ºóÔÚ¶ÁÈëÊäÈë±íʱºò£¬±È½ÏapiÃû³ÆÊÇ·ñΪ¿ÇÖд¦Àí¹ýµÄapiÃû³Æ
Èç¹ûÏàͬÔò½«¸ÃµØÖ·Ö¸Ïò¿ÇÖеĺ¯ÊýµØÖ·£¬³ÌÐòËùµÃµ½µÄµØÖ·¾ÍÖ¸Ïò¿ÇÀïÁË,importRec¾Íʶ±ð²»³ö¸Ã

apiÁË

Õâ¸öËäÈ»´úÂë±È½Ï³¤£¬²»¹ýÁ÷³Ì»¹ËãÇå³þ£¬¿ÉÒÔ¸úÉϼ¸±é¾Í´ó¸ÅÖªµÀÊÇÔõô»ØÊÂÁË
ÒòΪÏà¹ØÎÄÕ±Ƚ϶࣬ÕâÀï¼òµ¥¿´Ò»ÏÂ

00DC96FD    8D85 B4FEFFFF   LEA EAX,DWORD PTR SS:[EBP-14C]
00DC9703    50              PUSH EAX
00DC9704    FF15 C8B0DE00   CALL DWORD PTR DS:[DEB0C8]               ; 

kernel32.GetModuleHandleA
00DC970A    8B0D C04CDF00   MOV ECX,DWORD PTR DS:[DF4CC0]
00DC9710    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00DC9713    A1 C04CDF00     MOV EAX,DWORD PTR DS:[DF4CC0]
00DC9718    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00DC971B    75 16           JNZ SHORT 00DC9733
00DC971D    8D85 B4FEFFFF   LEA EAX,DWORD PTR SS:[EBP-14C]
00DC9723    50              PUSH EAX
00DC9724    FF15 D0B0DE00   CALL DWORD PTR DS:[DEB0D0]               ; 

kernel32.LoadLibraryA
00DC972A    8B0D C04CDF00   MOV ECX,DWORD PTR DS:[DF4CC0]
00DC9730    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
00DC9733    A1 C04CDF00     MOV EAX,DWORD PTR DS:[DF4CC0]
00DC9738    393C06          CMP DWORD PTR DS:[ESI+EAX],EDI
00DC973B    0F84 AD000000   JE 00DC97EE                           //magicjump ¼Ç¼¸ÃµØÖ·

Öµ
00DC9741    33C9            XOR ECX,ECX

Èç¹ûÊÇdll¿ÉÄÜ»¹ÐèÒª¸ü¸ÄÕâ¸öµØÖ·£¬odÔØÈëdll»ùµØַΪ10000000£¬¶øÊäÈë±íÔڸõØÖ·ÒÔÏÂ
Ôì³ÉÔÚImportRecÉè²»ÁËIAT RVAµØÖ·


00DE489D    8B85 1CE8FFFF   MOV EAX,DWORD PTR SS:[EBP-17E4]       //±£´æµ±Ç°IATÖ¸Õë
00DE48A3    8B8D 80E2FFFF   MOV ECX,DWORD PTR SS:[EBP-1D80]
00DE48A9    8908            MOV DWORD PTR DS:[EAX],ECX            //Ò»¸öapiµØַдÈëIAT
00DE48AB    8B85 1CE8FFFF   MOV EAX,DWORD PTR SS:[EBP-17E4]
00DE48B1    83C0 04         ADD EAX,4
00DE48B4    8985 1CE8FFFF   MOV DWORD PTR SS:[EBP-17E4],EAX
¶Ô[EBP-17E4]À´ÉèÄÚ´æд¶Ïµã£¬¿ÉÒÔÕÒµ½ÕâÀï
00DE453B    8B8D F0E6FFFF   MOV ECX,DWORD PTR SS:[EBP-1910]       //±£´æIATµÄÊ×µØÖ·£¬¼Ç¼

¸ÃµØÖ·Öµ00E9A880
00DE4541    8D0481          LEA EAX,DWORD PTR DS:[ECX+EAX*4]
00DE4544    8985 1CE8FFFF   MOV DWORD PTR SS:[EBP-17E4],EAX       //ÔØÈëÏÂÒ»¸ödllµÄIATÖÐ

Ê×µØÖ· 

3.antidump
OD°ÑÔ­´úÂëÖÐһЩ´úÂ룬jmp½Ï¸ßµÄµØÖ·ÁË Èçjmp 03171000,Ôì³Élordpe dumpÎļþʱºò£¬Õâ¶Î´úÂ붪

ʧ£¬
¸ÃµØÖ·ÊDz»Êǹ̶¨µÄ¡£
¿ÉÒÔÖ±½Ó϶ÏVirtualAlloc£¬²é¿´ÉêÇëµØÖ·Öµ£¬Èç¹û±È½Ï´ó¾ÍÐèҪעÒâÁË£¬·µ»Øºó´úÂëÀàËÆÏÂÃæ
00DE2612    6A 40           PUSH 40
00DE2614    68 00200000     PUSH 2000
00DE2619    FFB5 70E6FFFF   PUSH DWORD PTR SS:[EBP-1990]
00DE261F    FF35 3092DF00   PUSH DWORD PTR DS:[DF9230]
00DE2625    FF15 A0B1DE00   CALL DWORD PTR DS:[DEB1A0]               ; 

kernel32.VirtualAlloc
00DE262B    8985 78E6FFFF   MOV DWORD PTR SS:[EBP-1988],EAX
00DE2631    83BD 78E6FFFF 0>CMP DWORD PTR SS:[EBP-1988],0
00DE2638    74 33           JE SHORT 00DE266D
00DE263A    6A 40           PUSH 40
00DE263C    68 00100000     PUSH 1000
00DE2641    FFB5 70E6FFFF   PUSH DWORD PTR SS:[EBP-1990]
00DE2647    FF35 3092DF00   PUSH DWORD PTR DS:[DF9230]
00DE264D    FF15 A0B1DE00   CALL DWORD PTR DS:[DEB1A0]               ; 

kernel32.VirtualAlloc
00DE2653    8985 78E6FFFF   MOV DWORD PTR SS:[EBP-1988],EAX          //±£´æcodesplit Ê×µØ

Ö· ÔÚÕâÀï¶ÏÏÂÐÞ¸ÄeaxÖµµ½Ò»½ÏµÍµØÖ·ÎÒÑ¡Ôñдµ½armµÄadata½Ú

00DE2659    83BD 78E6FFFF 0>CMP DWORD PTR SS:[EBP-1988],0
00DE2660    74 0B           JE SHORT 00DE266D

¼Ç¼CodeSplit addr=00DE2653

4. Óýű¾À´×ßµ½OEP
ÒòΪҪÐ޸ĵĵط½±È½Ï¶à£¬¶øÇÒºóÃæÎÒÃǵ÷ÊԽű¾ÄÑÃâÒªÖظ´¹¤×÷£¬ËùÒÔ»¹ÊÇд¸öod½Å±¾°É£¬¿ÉÒÔ½ÚÊ¡µãÌåÁ¦ :)
ÒòΪҪÏòrdata¶ÎдIATÊý¾Ý£¬ËùÒÔÏȽ«¸Ã¶ÎÄÚ´æÉèΪ¿Éд
Memory´°¿ÚÑ¡ÖиöΣ¬ÓÒ¼üset access ->full access

´úÂë:
//½Å±¾1£¬Ö±´ïOEP£¬Ë³±ã´¦ÀímagicjumpºÍantidump var NewIatHead var NewSplitCodeHead var SetIatHead var SetSplitCodeHead var IatOver var MagicJmp var OEP var bSplitCodeOver var bIatOver var pTempAddr var VirtualAlloc //ÐèÒªÌîÈëµÄÐÅÏ¢ÄÚÈÝ mov NewIatHead, 5CA000 mov NewSplitCodeHead, 674000 mov MagicJmp, 00DC973B mov SetIatHead, 00DE453B mov IatOver, 00DE498E mov SetSplitCodeHead, 00DE2653 mov OEP, 004E8850 //±äÁ¿³õʼ»¯ mov bIatOver, 0 mov bSplitCodeOver, 0 //»ñµÃVirtualAllocÊ×µØÖ· gpa "VirtualAlloc", "kernel32.dll"  mov VirtualAlloc, $RESULT BPHWS VirtualAlloc, "x" run BPHWC VirtualAlloc //´Ëʱ£¬¿ÇÄÚ´æ´úÂëÒÑ·ÖÅä //¿ªÊ¼Éè¶Ïµã BPHWS MagicJmp, "x"  //magicjumpÖ®´¦ //BPHWS 00994704, "x"  Ð´ÈëÄÚ´æʱ BPHWS SetIatHead, "x"  //ÔØÈëÊäÈë±íÊ×µØַʱºò BPHWS IatOver, "x"  //´¦ÀíÍêËùÓÐdll BPHWS SetSplitCodeHead, "x"  //ÉêÇë¸ßλÄÚ´æ´¦£¬Ðè¸ü¸Ä·µ»ØeaxΪһ¶ÎµÍλÄÚ´æ  eoe _Exception eob _Break run  //ÓöÀýÍâ¼ÌÐøÖ´ÐÐ _Exception:  esto   //´¦Àí¶ÏµãÖÐ¶Ï _Break: cmp eip, SetIatHead je _SetIatHead cmp eip, MagicJmp je _MagicJmp cmp eip, IatOver je _IATOver cmp eip, SetSplitCodeHead je _SetSplitCodeHead jmp _InvalidBreak //ÉèÖÃеÄIATÊ×µØÖ· /* 00DE453B    8B8D F0E6FFFF   MOV ECX,DWORD PTR SS:[EBP-1910]       //±£´æIATµÄÊ×µØÖ· 00DE4541    8D0481          LEA EAX,DWORD PTR DS:[ECX+EAX*4] 00DE4544    8985 1CE8FFFF   MOV DWORD PTR SS:[EBP-17E4],EAX       //µ±Ç°IATÖ¸Õë */ _SetIatHead: mov pTempAddr, ebp sub pTempAddr, 1910          //¿´ÉÏÃæÊý¾Ý mov [pTempAddr], NewIatHead log NewIatHead BPHWC SetIatHead run  //ÐÞ¸Ämagicjump, À´µÃµ½Ô­Ê¼µÄIAT _MagicJmp: mov !ZF, 1     //ÐÞ¸Ämagicjump run  //maigcjump´¦ÀíÍê±Ï _IATOver: BPHWC MagicJmp BPHWC IatOver mov bIatOver, 1 cmp bSplitCodeOver,1 je _FixOver run  //ÉèÖÃеı£´æCodeSplit´úÂëµÄÊ×µØÖ· /* 00DE263A    6A 40           PUSH 40 00DE263C    68 00100000     PUSH 1000 00DE2641    FFB5 70E6FFFF   PUSH DWORD PTR SS:[EBP-1990] 00DE2647    FF35 3092DF00   PUSH DWORD PTR DS:[DF9230] 00DE264D    FF15 A0B1DE00   CALL DWORD PTR DS:[DEB1A0]               ;  kernel32.VirtualAlloc 00DE2653    8985 78E6FFFF   MOV DWORD PTR SS:[EBP-1988],EAX          //±£´æantidumpÊ×µØÖ· 00DE2659    83BD 78E6FFFF 0>CMP DWORD PTR SS:[EBP-1988],0 00DE2660    74 0B           JE SHORT 00DE266D */ _SetSplitCodeHead: mov eax, NewSplitCodeHead mov bSplitCodeOver, 1 BPHWC SetSplitCodeHead cmp bIatOver,1 je _FixOver run  //ÆäËüδ´¦ÀíµÄ¶Ïµã _InvalidBreak: log eip msg "Invalid Break" ret //IAT,AntiDump´¦ÀíÍê±Ï //×¼±¸ÌøÍùOEP _FixOver: eoe _Continue eob _End BPHWS OEP, "x" run _Continue:  esto  _End: BPHWC OEP msg "Success!" ret
 

µÚ2²¿·Ö. ÐÞ¸´IATÂÒÐò

1, ¹ØÓÚIATÂÒÐò
arm´Ó3.60¿ªÊ¼Ìí¼ÓÁËÐµĹ¦ÄÜÊäÈë±íÂÒÐò(ImportTable Elimination)
ÔÙÎÒÃÇÐÞ¸ÄÁËmagicjmpºóµÃµ½Æ¯ÁÁµÄIAT, ¿ÉϧÂíÉϾͱ»arm¸øÆÆ»µÁË£¬½«Ë³Ðò´òÂÒ£¬¶øÇÒËã·¨ÓÐЩ¸´

ÔÓ£¬²»ºÃ·´Çó¡£

00DE498E    8B85 FCE6FFFF   MOV EAX,DWORD PTR SS:[EBP-1904]         //ÉÏÃæµÄ½Å±¾ÖÐIatOver

µØÖ·
00DE4994    8985 F4CFFFFF   MOV DWORD PTR SS:[EBP-300C],EAX
00DE499A    FFB5 F4CFFFFF   PUSH DWORD PTR SS:[EBP-300C]
00DE49A0    E8 855E0000     CALL 00DEA82A                            ; JMP to msvcrt.??

3@YAXPAX@Z
00DE49A5    59              POP ECX
00DE49A6    83BD F0E6FFFF 0>CMP DWORD PTR SS:[EBP-1910],0
...
00DE4AA2    8985 64E1FFFF   MOV DWORD PTR SS:[EBP-1E9C],EAX
00DE4AA8    8B85 60E1FFFF   MOV EAX,DWORD PTR SS:[EBP-1EA0]
00DE4AAE    8D0485 04000000 LEA EAX,DWORD PTR DS:[EAX*4+4]
00DE4AB5    50              PUSH EAX
00DE4AB6    8B85 F0E6FFFF   MOV EAX,DWORD PTR SS:[EBP-1910]
00DE4ABC    83C0 04         ADD EAX,4
00DE4ABF    50              PUSH EAX
00DE4AC0    FFB5 F0E6FFFF   PUSH DWORD PTR SS:[EBP-1910]
00DE4AC6    FF15 D4B2DE00   CALL DWORD PTR DS:[DEB2D4]               ; msvcrt.memmove  //

½«IATÏòÇ°Ñ­»·Òƶ¯2¸öDWORD£¬´òÂÒIAT
00DE4ACC    83C4 0C         ADD ESP,0C
00DE4ACF    8B85 60E1FFFF   MOV EAX,DWORD PTR SS:[EBP-1EA0]
00DE4AD5    8B8D F0E6FFFF   MOV ECX,DWORD PTR SS:[EBP-1910]
00DE4ADB    8B95 64E1FFFF   MOV EDX,DWORD PTR SS:[EBP-1E9C]
00DE4AE1    891481          MOV DWORD PTR DS:[ECX+EAX*4],EDX
00DE4AE4  ^ E9 47FFFFFF     JMP 00DE4A30

ʹµÃÎÒÃÇÔÚImportRecÖп´µ½ÕâÑùÅÅÁеÄIAT£¬´Ó¶øÎÞ·¨Éú³ÉеÄÊäÈë±í
1  001CA0D0  kernel32.dll  01A7  GetProfileIntA
1  001CA0D4  comctl32.dll  002B  ImageList_AddMasked
1  001CA0D8  user32.dll  005B  CreateIconIndirect
1  001CA0DC  user32.dll  00F7  GetClassInfoA
1  001CA0E0  gdi32.dll  01CE  LineTo
1  001CA0E4  user32.dll  008F  DefWindowProcA
1  001CA0E8  kernel32.dll  015C  GetFileSize
1  001CA0EC  gdi32.dll  01BA  GetTextFaceA
1  001CA0F0  gdi32.dll  01C3  GetWindowExtEx


2. ÕûÀíIAT
ÔÚRicardo NarvajaµÄ203-208½Ì³ÌÖиø³öÁËÒ»¸öºÜ½Å±¾£¬ÓÃÀ´ÕûÀíIAT£¬Éú³ÉÒ»¸öеÄÅÅÁÐÕûÆëµÄIAT, 

Ô­À´µÄIATÖеĵØÖ·ÖµÔò¸ÄΪָÕëÖ¸ÏòÕâ¸öÐÂIAT±íÖеÄÏÕâ¸ö½Å½Å±¾ËµÃ÷²Î¼ûRicardoµÄ207½Ì³Ì¡£ÀïÃæÌøתÓеã¶à£¬ÎÒ¹ÀÃþ׿ÓÁ˵ã×¢ÊÍ¡£


¾ÙÀý 
Ô­ÏÈIATÖÐÒ»ÏîΪ
005CA000  45 2D E1 77                                      E-áw½ñ
ÔÚÔËÐнű¾ºó
005CA000  D0 AD 5C 00                                      Ð­\.Œ°
005CADD0  45 2D E1 77                                      E-áwp
µ±È»ÕâÑù×öÒÔºó£¬callËùµ÷ÓõĵØÖ·¾Í²»¶ÔÁË
call [005CA000]     // 77E12D45call Kernel32.SetUnhandledExceptionFilter
¹Ê¶øRicardo ÔÚOEP´¦²åÈëÁËÒ»¶Î³ÌÐòÀ´£¬½«ÅÅÁкõÄIAT£¬Ôٴλ¹Ô­µ½Ô­ÏÈ´òÂÒµÄ״̬£¬²»¹ýÕâÑù³ö

À´µÄ³ÌÐòÔÚ¾²Ì¬·´±àÒëʱ£¬º¯Êý»áʶ±ð²»³ö£¬²»±ãÓÚ·ÖÎö¡£
ÔÚÏÂÃæ1½Ú½«»á²ÉÓÃÒ»¶Î½Å±¾À´´¦ÀíÕâ¸öÎÊÌâ
ÔÚOEP´¦ÔËÐÐ

´úÂë:
//½Å±¾2£¬½«ARM»ìÂÒµÄIATÖØÐÂÕûÀí //À´×ÔRicardo NarvajaµÄ207ºÅ½Ì³Ì£¬ÂÔ×öÐÞ¸Ä var it var it2 var x var y var pit var pit2 var dll               var dll1             var pitt var it1_end var base var savecode //ÐèÒªÉ趨µÄÄÚÈÝ mov it,5CA000        //»ìÂÒIATÊ×Ö· mov it1_end,5CAD90    //»ìÂÒIATÄ©Ö· mov it2,5CADD0        //´ý´æ·ÅÕûÀíºóµÄIATÊ×Ö· // mov savecode,[eip]   //±£´æµ±Ç°eipÖ¸ÏòÄÚÈÝ mov [eip], #EBFE#    //jmp eip£¬ÓÉÓÚÕûÀíIAT±È½ÏÂý£¬ÓÃÓÚ´ý»áˢнçÃ棬·À½çÃæ¼ÙËÀ  gmi eip, MODULEBASE    //È¡Ö÷ÎļþµÄ»ùÖ· log $RESULT mov base,$RESULT INICIO:              //³õʼ»¯ mov pitt,it          //pittÖ¸Ïòµ±Ç°ÕýÔÚ´¦ÀíapiµØÖ·£¬ÆäÇ°ËùÓÐapi¾ù±»´¦ÀíÍê±Ï                      //pittÿһÂÖÔö¼Ó4£¬µ±ÆäµÈÓÚ»ìÂÒºóIATĩַʱ£¬Ôò¸Ã½Å±¾ÔËÐнáÊø COMIENZO: add pit,it add pit2,it2 SEGUIMOS: //WE FOLLOWED  ÐµÄÑ­»·¿ªÊ¼ add pit,x add pit2,y cmp pit,it1_end log pit log x log y je FIN cmp pit,it1_end ja FIN gmi [pit], MODULEBASE    //È¡¸Ãapi¶ÔÓ¦µÄÄ£¿é»ùÖ· log $RESULT log dll1 cmp pit,pitt jne NOPRIMERA cmp $RESULT,base       //¸ÃµØÖ·´¦api,ÊÇ·ñÒѱ»´¦Àí¹ý£¬Èô±»´¦Àí¹ýÔòÆä»ùַΪÖ÷Îļþ»ùÖ·base je PIRULO              //´¦Àí¹ýÔòÌøתµ½ÏÂÒ»ÂÖ cmp $RESULT,dll1       //ÕâÁ½¾äºÃÏñûÓã¬Èç¹ûÇ°1¸ödllÒѱ»´¦Àí¹ý£¬ÕâÀï¸ù±¾²»»áÌøת je IGUALES mov dll, $RESULT log dll jmp NOPRIMERA NOPRIMERA:       //not first cmp $RESULT,dll jne NOGUARDO //¸ÃµØÖ·´¦api,ÊÇ·ñÒѱ»´¦Àí¹ý£¬Èô±»´¦Àí¹ýÔòÆä»ùÖ· //ÀýÈç,´¦Àíºó¸Ã005CA000´¦ÄÚÈÝΪ005CADD0£¬È¡Æä¶ÔӦģ¿é»ùַΪΪÖ÷Îļþ»ùÖ·base cmp $RESULT,base      je NOGUARDO          //´¦Àí¹ýÔòÌøתµ½ÏÂÒ»ÂÖ mov [pit2], [pit]    //½«»ìÂÒºóIAT±£´æapiÒÆÈëеØÖ·£¬Ô­µØÖ·´æ·ÅÖ¸ÕëÖ¸ÏòеØÖ·  mov [pit], pit2 mov x,4 mov y,4 jmp FINLOOP NOGUARDO:    //I do not keep mov x,4 mov y,0 jmp FINLOOP FINLOOP:      //1ÂÖСѭ»·½áÊø log pit log pit2 jmp SEGUIMOS IGUALES: //EQUAL Ã»É¶Óã¿ mov x,4 mov y,0 jmp FINLOOP FIN:              //1¸ödll´¦ÀíÍê±Ï mov [pit2],0 mov dll1,dll sto              //·À½çÃæ¼ÙËÀ£¬Ë¢ÐÂod½çÃæ xor x,x xor y,y add pitt,4 cmp dll,base je SALTO add pit2,4 SALTO:          //JUMP mov pit,pitt cmp pitt,it1_end je FINISH cmp pitt,it1_end ja FINISH log pit log pit2 log pitt jmp SEGUIMOS FINISH:            //ËùÓÐdll¶¼Òѱ»´¦ÀíÍê±Ï mov [eip],savecode //±£´æµ±Ç°eipÖ¸ÏòÄÚÈÝ MSG "TERMINAMOS" log pitt ret PIRULO:         //¸ÃµØÖ·apiËùÔÚdllÒѱ»´¦Àí¹ý£¬¹ÊÌø¹ý¸ÃµØÖ·£¬ÖØпªÊ¼Ò»ÂÖ add pitt,4 jmp NOPRIMERA

3. ÐÞ¸´´úÂë¶Îµ÷ÓÃ
ÔÚRicardoµÄ½Ì³ÌÖÐÔÚOEP´¦²åÈëÁËÒ»¶Î³ÌÐòÀ´£¬½«ÅÅÁкõÄIAT£¬Ôٴλ¹Ô­µ½Ô­ÏÈ´òÂÒµÄ״̬£¬²»¹ýÕâ

Ñù³öÀ´µÄ³ÌÐòÔÚ·´±àÒëʱ£¬²»ÄÜ×Ô¶¯Ê¶±ð³öµ÷Óõĺ¯Êý£¬ÆÄΪ²»Ë¬¡£
ÎÒÃÇÀ´Ïë°ì·¨À´½â¾öÕâ¸öÎÊÌâ¡£

ÎÒÃÇÔÚ³ÌÐòÖÐËæ±ãÕÒÒ»¸öapiµ÷Ó㬱ÈÈçÕâ¸ö
004E8873    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
004E8876    FF15 E4AC5C00   CALL DWORD PTR DS:[5CACE4]               ; 

kernel32.GetVersion

004E8876  FF 15 64 B5 E9 00                                ÿdµé.3

ÉèÓ²¼þдDWORD¶Ïµã004E8878£¬À´¿´¿´¿ÇÊÇʲôʱºòÔÚ´úÂë¶ÎдÈëµÄ¸ÃapiµØÖ·

ÖØÐÂÔËÐгÌÐò£¬µÚ1´Î¶ÏÏÂʱÊÇ´úÂë¶Î½âѹ£¬ÔÚµÚ¶þ´Î¶ÏÏÂʱºò
00DE553A    8B85 E4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F1C]
00DE5540    40              INC EAX
00DE5541    8985 E4D0FFFF   MOV DWORD PTR SS:[EBP-2F1C],EAX
00DE5547    8B85 E4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F1C]
00DE554D    8B8D 30E8FFFF   MOV ECX,DWORD PTR SS:[EBP-17D0]   //±£´æcallµ÷ÓñíÊ×µØÖ·

00E9B628 ÔÚÕâÀï²é¿´±í¸ñÊ×µØÖ·
00DE5553    833C81 00       CMP DWORD PTR DS:[ECX+EAX*4],0    //È¡±íÖÐ1Ïî
00DE5557    0F84 90000000   JE 00DE55ED
00DE555D    8B85 E4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F1C]
00DE5563    8B8D 30E8FFFF   MOV ECX,DWORD PTR SS:[EBP-17D0]
00DE5569    8B95 18E7FFFF   MOV EDX,DWORD PTR SS:[EBP-18E8]
00DE556F    031481          ADD EDX,DWORD PTR DS:[ECX+EAX*4]
00DE5572    8995 D4D0FFFF   MOV DWORD PTR SS:[EBP-2F2C],EDX
00DE5578    8B85 D4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F2C]
00DE557E    8B00            MOV EAX,DWORD PTR DS:[EAX]
00DE5580    8985 D0D0FFFF   MOV DWORD PTR SS:[EBP-2F30],EAX
00DE5586    81BD D0D0FFFF 9>CMP DWORD PTR SS:[EBP-2F30],90909090
00DE5590    74 56           JE SHORT 00DE55E8
00DE5592    8B85 D0D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F30]
00DE5598    2B85 E0D0FFFF   SUB EAX,DWORD PTR SS:[EBP-2F20]
00DE559E    8985 D0D0FFFF   MOV DWORD PTR SS:[EBP-2F30],EAX
00DE55A4    FFB5 D0D0FFFF   PUSH DWORD PTR SS:[EBP-2F30]
00DE55AA    8B85 E4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F1C]
00DE55B0    33D2            XOR EDX,EDX
00DE55B2    6A 10           PUSH 10
00DE55B4    59              POP ECX
00DE55B5    F7F1            DIV ECX
00DE55B7    FF1495 48B7DE00 CALL DWORD PTR DS:[EDX*4+DEB748]    //¼ÆËã¸ÃapiÔÚIATÖеÄË÷Òý
00DE55BE    59              POP ECX
00DE55BF    8985 D0D0FFFF   MOV DWORD PTR SS:[EBP-2F30],EAX
00DE55C5    8B85 D0D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F30]
00DE55CB    8B8D F0E6FFFF   MOV ECX,DWORD PTR SS:[EBP-1910]
00DE55D1    8D0481          LEA EAX,DWORD PTR DS:[ECX+EAX*4]   //µÃµ½¸ÃapiÔÚIATÖеØÖ·
00DE55D4    8985 D0D0FFFF   MOV DWORD PTR SS:[EBP-2F30],EAX
00DE55DA    8B85 D4D0FFFF   MOV EAX,DWORD PTR SS:[EBP-2F2C]
00DE55E0    8B8D D0D0FFFF   MOV ECX,DWORD PTR SS:[EBP-2F30]
00DE55E6    8908            MOV DWORD PTR DS:[EAX],ECX         //дÈëcall [XXX] µÄµ÷ÓõØ

Ö·
00DE55E8  ^ E9 4DFFFFFF     JMP 00DE553A  //¶ÏÔÚÕâÀï

×ßµ½ÕâÀ¿´¿´[EBP-17D0]ËùÖ¸ÏòµÄÄÚ´æ
00DE554D    8B8D 30E8FFFF   MOV ECX,DWORD PTR SS:[EBP-17D0]   //00E9B628 ±£´æcallµ÷ÓñíÊ×

µØÖ·

00E9B628  4B 10 00 00 92 10 00 00 A7 10 00 00 B8 10 00 00  K..?..?..?..
00E9B638  EA 10 00 00 14 11 00 00 64 11 00 00 75 11 00 00  ?....d..u..
00E9B648  88 11 00 00 AB 11 00 00 0C 12 00 00 30 12 00 00  ?..?.....0..
00E9B658  B8 12 00 00 CB 12 00 00 E8 12 00 00 37 13 00 00  ?..?..?..7..
00E9B668  AC 13 00 00 B8 14 00 00 C0 14 00 00 D6 14 00 00  ?..?..?..?..
......
00EA2B88  9B 77 1B 00 A8 77 1B 00 06 78 1B 00 79 78 1B 00  ›w.¨w.x.yx.
00EA2B98  EB 78 1B 00 E0 79 1B 00 20 7A 1B 00 7F 7A 1B 00  ëx.ày. z.z.
00EA2BA8  00 00 00 00                                      ....
^_^£¬callµ÷ÓÃËùÔÚµØÖ·±í£¬ÕâÕýÊÇÎÒÃÇÐèÒªµÄ£¬callËùÔÚµÄRAVµØÖ·£¬ÕâÑù¾Í¿ÉÒÔÓÃÕâÕűíÀ´ÐÞ¸´

call[XXX]µÄµØÖ·ÖµÁË£¬Ê¹Ö®Ö±½ÓÖ¸ÏòÎÒÃǵÄÕûÀíºóµÄIAT£¬²»ÐèÒªÔ­ÏȵÄIAT×öÌø°å¡£

¿½±´¸Ã±í¸ñµ½WinHexÖУ¬´ý»áºÃÔÙÕ³Ìù»ØÀ´£¬ÔËÐнű¾

ÏÖÔÚÔÙ´ÎÀ´µ½ÔËÐÐÇ°ÃæµÄ½Å±¾µ½´ïOEPÖ®´¦£¬
È»ºóÔËÐÐRicardoµÄ½Å±¾£¬ÕûÀí´òÂÒµÄIAT£¬È»ºóËæ±ãÕÒ¸ö¿ÕµØ½«¸Õ²ÅµÃµ½µÄcallµ÷ÓõØÖ·±íbinary 

paste£¬
±ÈÈçÎÒÕ³Ìùµ½00E92000¿ªÊ¼µÄÄÚ´æÀï
È»ºóÔÙÔËÐÐÒ»¸öС½Å±¾
´úÂë:
//½Å±¾3£¬Ð޸ĴúÂë¶Îcall [XXX]£¬µ½ÕûÀíºóµÄIAT var pCallTable  //´æ·Åcallµ÷ÓÃËùÔÚÖ®´¦µÄRVAµØÖ·±í var calladdr var base var iataddr var goodiat //ÉèÖÃCall RVA µØÖ·±íËùÔÚλÖà mov pCallTable ,0E92000 //»ñÈ¡µ±Ç°Ä£¿é»ùµØÖ· gmi eip, MODULEBASE  log $RESULT mov base, $RESULT NEXT: mov calladdr, [pCallTable] cmp calladdr, 0 je FIN add calladdr, base              //RVA+base=VA mov iataddr, [calladdr]         //µÃµ½Ô­Ê¼IAT±íÖеØÖ·(¼ä½ÓÖ¸Õë,Ö¸ÏòÕûÀíºóµÃIATÖеĵØÖ·) log calladdr mov goodiat, [iataddr]          //µÃµ½ÕûÀíºóµÃIATÖиÃapiµØÖ· mov [calladdr], goodiat         //ÐÞ¸Äԭʼ´úÂëÖÐcall XXXXÖÐXXXXµÄµØÖ·,Ö¸ÏòÕûÀíºóµÄIAT add pCallTable,4 JMP NEXT FIN: MSG "Success!" ret

OK,ÔÙ¿´¿´¸Õ²ÅµÄÄǸöapiµ÷ÓÃÒѾ­Ö±½ÓÖ¸ÏòÄǸöÕûÀíºóµÄIATÖÐÁË
004E8873    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
004E8876    FF15 68B05C00   CALL DWORD PTR DS:[5CB068]               ; 

kernel32.GetVersion

4. dump&fix

ÏÖÔÚÓÃLordPE dumpÏÂÀ´£¬È»ºóÓÃImportRecÐÞ¸´£¬ÌîÈëOEP£¬RVA¼°RVASIZE
OEP=00E8850 IATRVA=1CADD0 ´óС0D90£¬½«InvalidµÄÈ«²¿cut¡£
ÐÞ¸´ÒÔºóÔËÐÐһϿ´¿´£¬okÁË£¬ÀÛ :)

¸ÐлRicardo£¬EggiµÄ½Ì³Ì¡£ÒÑÉÏ´«ÖÁhttp://bbs.pediy.com/showthread.php?s=&threadid=5962