• ±ê Ì⣺Armadillo v3.x for copymem-II ÍÑ¿ÇÍêȫƪ
  • ×÷ Õߣºfxyang
  • ʱ ¼ä£º2003Äê11ÔÂ27ÈÕ 12:16
  • Á´ ½Ó£ºhttp://bbs.pediy.com

Armadillo v3.x for copymem-II ÍÑ¿ÇÍêȫƪ¨D¨DÉÏƪ
                    ¨D¨D²éÕÒOEPºÍ´úÂëÐÞ¸´

  ÕâÊÇһƪÍÑArmadillo¼Ó¿ÇÈí¼þµÄ¸öÈ˵ľ­Àú¹ý³Ì£¬±¾ÈËÌرðÉùÃ÷£ºÕâ¸ö¹ý³ÌÊDzÎÕÕÁËBighead[DFCG][YCG]·­ÒëµÄRicardo NarvajaµÄ¡°Getright 5 ÍѿǺÍÖؽ¨¡±ÎÄÕ²Ù×÷µÄ£¬¿ÉÒÔ˵ÊǸöÕÕºù«»­Æ°×öµÄ¡£¸ÐлBighead[DFCG][YCG]ºÍÏà¹ØµÄ·­ÒëÕߣ¬¸ÐлRicardo NarvajaµÄÎÄÕ¡£
   Õâ´ÎÄÃÀ´Á·Ï°µÄÈí¼þÊÇFCGµÄpeterdocterÀÏ´óÌṩµÄÈí¼þ£¬ÏÂÔصØÖ·£ºhttp://peter.88vip.com/armadillo3.rar
¹¤¾ß£º
Ollydbg v1.09dÖÐÎÄ°æ
PuPe 2002°æ ¸Ðлyesky1ÐÖÌṩ
LordPE Deluxe-1.4 by yoda
Import Reconstructor 16f
   ×¼±¸ºÃ±ÊºÍÖ½£¨²»ÄÜÉÙร¡£©£¬Ò»±­²èºÍºÃÊÇÐÄÇé^_^.ÈÃÎÒÃÇ¿ªÊ¼Ò»¸ö¼è¿àºÍÂþ³¤µÄÍѿǹý³Ì°É£¨ÒòΪÎҲˣ¡£©¡£ArmadilloÊǵ±½ñÃÍ¿ÇÖ®Ò»À²¡£ÆäCopyMem-II+Debug-BlockerµÄ¼Ó¿Ç·½Ê½ÊǷdz£Ç¿¾¢µÄ£¬ºÃÔÚÓÐÅ£ÈËÔÚÇ°Ãæ´ø·£¬Ëä¼èÄѵ¹Ò²²»ÃÔʧ·½Ïò¡£
  £¨¸ù¾ÝRicardo Narvaja µÄÎÄÕ£º±ØÐë˵Ã÷һϣ¬´Ë½Ì³Ì½öÔÚ Windows XP µ÷ÊÔ¡£²»Òª³¢ÊÔÔÚ Windows 98 »òÕß Windows 2000 Ï½øÐС£ÊÂʵÉÏÊÇÒòΪֻÓРWindows XP ÒѾ­Óë±ØÒªµÄ API Íѹ³ÁË¡£ÎÒÊÇwindows2003Ó¦¸Ã·ûºÏÒªÇóÁË¡££©
  ¿ªÊ¼°É£¡¡«
SETUP 1  BP IsDebuggerPresent
  ÓÃOllyDbg ×°ÈëÐèÒªÍѿǵÄÈí¼þarmadillo3.exe£¨ÆäʵÊǸöcrackme£©£¬¿ªÊ¼ÎÒÃǵĵÚÒ»µÀ¹Ø£¬·´anti_debug ÕâÊÇÿ¸öArmadillo¼Ó¿ÇÈí¼þ¶¼Òª×öµÄµÚÒ»¼þ¹¤×÷¡£ÔÚODµÄÃüÁîÐд°¿ÚÖмüÈë BP IsDebuggerPresent¡£¼Çס£¬ÎÒÃÇÓ¦±£Áô´óСд×ÖĸÕý³£×´Ì¬£¬ÒòΪÈç¹ûÎÒÃǼüÈëÈκÎÃüÁîÓÐÒ죬ÎÒÃÇ¿ÉÒÔÔÚÃüÁîÀ¸ÓÒ²àµÄÏÔʾÀ´·´Ó³³ö´íÎóÐÅÏ¢£¨Î´ÖªµÄÃüÁ¡£ËùÒÔÒªÕýȷдÈë BP IsDebuggerPresent È»ºó°´»Ø³µ¼ü¡£Èç¹ûÔÚ°´»Ø³µ¼üºóûÓÐÐÅÏ¢ÏÔʾ£¬ÕâÊDZíÃ÷´Ë BP ÔËÐÐÁ¼ºÃ¡££¨×îºÃ°ÑODµÄÒ쳣ѡÔñÏîÈ«²¿¹´ÉÏ£©F9ÔËÐÐһϾͻáÀ´µ½IsDebuggerPresentº¯ÊýµÄÈë¿ÚµØÖ·£º
77E2AC39 >MOV EAX,DWORD PTR FS:[18]                ; <--ÖжÏÔÚÕâÀï
77E2AC3F  MOV EAX,DWORD PTR DS:[EAX+30]
77E2AC42  MOVZX EAX,BYTE PTR DS:[EAX+2]            ; <--ÔËÐе½ÕâÀï
77E2AC46  RETN
ÔÚ77E2AC42µØÖ·´¦Í£Ï£¬¿´¿´DS:[EAX+2]Ö¸ÏòµÄµØÖ·7FFDF002µÄÖ¸ÊÇ01£¨Õâ¸öµØÖ·¿ÉÄܺÍÄãµÄ²»Í¬£©£¬ÐÞ¸ÄÕâ¸öֵΪ00 ÒòΪArmadilloͨ¹ýIsDebuggerPresentº¯ÊýÀ´¼ì²éÊDz»ÊDZ»µ÷ÊÔÆ÷µ÷ÊÔ£¬Èç¹ûÓе÷ÊÔÆ÷¾Í»á¸³EAXֵΪ01ûÓо͸³EAXֵΪ00¡£ÐÞ¸ÄÕâ¸öÖµ¾ÍÊǸæËßËûûÓе÷ÊÔÆ÷£¬×ÔÈ»²»»á³ö´íÀ­£¡¼ÇÏÂÕâ¸öµØÖ·£¬ÒÔºó¾­³£»áÓõ½µÄ¡£
SETUP 2  BP WaitForDebugEvent
  ÏÂÃæ¸Ã¸ÉʲôÄØ£¿²éÕÒOEPµÄÄÚ´æ³öÏֵĵط½£¬Èç¹ûÄãÓÃPeidÀ´²é¿´Èí¼þµÄOEP»áµÃµ½Ò»¸ö´íÎóµÄÖµ¡£ÒòΪArmadillo»áÐÞ¸ÄOEPµØÖ·¡£À´¿´¿´Ôõô²éÕÒÄØ£¿ÔÚÃüÁîÐÐÖÐÊäÈëBP WaitForDebugEvent È»ºó»Ø³µ¡£ÔËÐÐһϾͻáÀ´µ½º¯ÊýµÄÈë¿Ú£º
77E605B6 >PUSH EBP    -Í£ÔÚÈë¿Ú
77E605B7  MOV EBP,ESP
77E605B9  SUB ESP,68
77E605BC  PUSH ESI
ÔÚ¶ÑÕ»(Stack)´°¿ÚÎÒÃÇ¿ÉÒÔ¼ûµ½ÔÚ´Ë API º¯ÊýÓйزÎÊýµÄÈ«²¿ÐÅÏ¢
0012E220   0043776E  /CALL µ½ WaitForDebugEvent
0012E224   0012EFF4  |pDebugEvent = 0012EFF4  //×¢ÒâÕâ¸öµØÖ·
0012E228   000003E8  Timeout = 1000. ms
Õâ¸öº¯ÊýµÄ×÷ÓÃÎÒ²»ÖªµÀ£¬µ«ÎÒÖªµÀ0012EFF4µØÖ·¾ÍÊÇOEP½«»á³öÏֵĵط½¡£À´µ½×ª´æ´°¿Ú G 0012EFF4 £º
0012EFF4  01 00 00 00 10 00 00 00   ... ...
0012EFFC  00 00 00 00 A8 F0 12 00  ....¨ð .
0012F004  00 00 50 00 64 EF 12 00  ..P.d?.
0012F00C  5C F0 12 00 00 00 00 00  ?.....
0012F014  5C F1 12 00 00 00 00 01  ?.... 
0012F01C  58 EF 12 00 AC F0 12 00  X?.¬ð .
0012F024  AC F2 12 00 34 5A F3 77  ¬ò .4Zów
0012F02C  58 BB F7 77 FF FF FF FF  X»÷wÿÿÿÿ
0012F034  E7 DF F3 77 E1 26 F4 77  çßów?ôw
ÕâÒ»²½µÄ×÷ÓþÍÊÇͨ¹ýº¯ÊýÕÒµ½Õâ¸öÄÚ´æµØÖ·£¬ÒòΪËû»á³öÏÖÕæÕýµÄOEPÈë¿Ú¡£ÎªÊ²Ã´£¿ÎÒÒ²²»ÖªµÀ¡£
SETUP 3 Bp WriteProcessMemory
ÃüÁîÀ¸Ð´Èë Bp WriteProcessMemory ¶ÏµãÈ»ºóµã»÷ RUN¡£¿ÉÄÜ»áÔÚijЩÒ쳣ͣÏ£¬ÄÇÄã¿ÉÒÔͨ¹ý°´Ï Shift + F9 Ë³ÀûµØÈƹý¡£Õâ¸öÈí¼þ»¹»á³öÏÖδע²áµÄArmadillo¼Ó¿ÇÌáʾ£¬Ô½¹ýËû¡£Ö»ÒªÎÒÃÇÔÚ WriteProcessMemory API Í£ÏÂÁË£¬Ç§Íò²»Òª´¥¶¯Èκμü£¬À´¿´¿´ÄÜÓÐʲôÊÕ»ñ¨D¨D
¶ÑÕ»´°¿Ú¿ÉÒÔ¿´µ½µÚÒ»¸ö¿éµÄÈ«²¿ÐÅÏ¢£º
0012E0C0   0043AFC2  /CALL µ½ WriteProcessMemory À´×Ô armadill.0043AFBC
0012E0C4   00000044  |hProcess = 00000044 (window)
0012E0C8   00425000  |Address = 425000
0012E0CC   003A2630  |Buffer = 003A2630
0012E0D0   00001000  |BytesToWrite = 1000 (4096.)
0012E0D4   0012E1DC  pBytesWritten = 0012E1DC
ÏÈÀ´¿´¿´Ricardo NarvajaµÄÎÄÕÂÀï˵µÄ£º
ÊǸ¸½ø³Ì½«Òª¸´ÖƵ½ËüµÄ×Ó½ø³ÌµÄÖ¸Òý¡£´ËÐÅÏ¢ÊDZ£´æÔÚÒ»¸ö»º´æÖ®ÄÚ£¬¸¸½ø³ÌÀ´×Ô 003A2630£¬²¢ÇÒËü½«»á´Ó 00425000¿ªÊ¼ÒÔÿ 1000 ×ֽڿ鷽ʽ¸´ÖƵ½×Ó½ø³Ì£¨×Ö½ÚдÈ룩£¬ËùÒÔÈç¹ûÎÒÃÇÕÒµ½´Ë·½°¸£¬ÎÒÃǾͿÉÒÔºÜÈÝÒ×Àí½âµ½×Ó½ø³ÌµÚÒ»¸ö¿éÊÇÍêÈ«¿ÕµÄ£¬È»ºóµ±×Ó½ø³Ì³¢ÊÔÖ´ÐРOEP Ê±½«Ëü·µ»ØÒ»¸ö´íÎóÐÅÏ¢£¬ÒòΪÔÚÕâ¸öµã²¢Ã»ÓÐʲôÊý¾Ý£¬Òò´Ë¸¸½ø³Ì»ñµÃ±¨¸æ£¬Í¬ÑùÎÒÃÇ¿ÉÒÔÔÚ¸¸½ø³Ì¿´µ½Óйر¨±í£¬ËùÒÔËüÍ£Ö¹ÔËÐУ¬ÔÚÏÂÒ»¸ö´íÎóÇ°¸´ÖƱØÒªµÄÊý¾Ý¿éÈ»ºó¼ÌÐøÔËÐС£¸ÃÊý¾Ý¸±±¾µÄÊýÖµ´óСÊÇ 1000 ×Ö½Ú£¬ËùÒÔµ±³ÌÐòÊÔͼִÐÐÈκγ¬¹ý´Ë¿éʱ£¬¸÷ÖÖ´íÎ󽫻ᷢÉú£¬È»ºó´íÎ󽫻áÏò¸¸½ø³Ì±¨¸æ£¬È»ºó¸¸½ø³Ì½«»á¸´ÖÆÁíÍâµÄ 1000 ×ֽڵĿ飬ÖîÈç´ËÀà¡£
  Õâ¸ö¿é¿ªÊ¼ÔÚ 425000 Ò»Ö±µ½ 425FFF¡£OEP ±Ø¶¨ÔÚÆäÖµÖ®ÄÚ¡£ÈÃÎÒÃÇÀ´ÁôÒâ¸Õ²ÅµÄÄǸöת´æ´°¿Ú£º
0012EFF4  01 00 00 00 B0 0E 00 00   ...?..
0012EFFC  B8 0E 00 00 01 00 00 80  ?.. ..€
0012F004  00 00 00 00 00 00 00 00  ........
0012F00C  D0 51 42 00 02 00 00 00  ÐQB. ...
0012F014  00 00 00 00 D0 51 42 00  ....ÐQB.
0012F01C  D0 51 42 00 00 00 00 00  ÐQB.....
0012F024  00 00 00 00 00 00 00 00  ........
0012F02C  13 00 00 00 94 10 00 C0   ...?.
×¢Òâ´°¿ÚÖÐÀ¶É«µÄ×Ö½Ú004251D0£¨Ó¦¸Ãµ¹¹ýÀ´£©£¬Õâ¸öÖµÊÇÔÚ425000µ½ 425FFFÖ®¼äµÄÖµ¡£ÄÇôÈí¼þµÄOEPÓ¦¸ÃµÄ004251D0 
ºÇºÇ£¬Õâ¶ÎÎÒÏÈÔõôҲ²»Ã÷°×¡£ÏÖÔÚÈÃÎÒÀ´½âÊÍһϣº£¨ÎÒ±à³Ì²»ÐУ¬ËùÒÔ˵µÄ²»Ò»¶¨ÕýÈ·£©
WriteProcessMemory º¯ÊýÊÇÄڴ渴Öƺ¯Êý£¬´ó¼ÒÖªµÀArmadilloµÄcopymem-II·½Ê½»áÔÚÄÚ´æÖÐÉú³ÉͬÃûµÄ2¸ö½ø³Ì£¬ÆäÖÐÒ»¸öÊǸ¸½ø³Ì£¬Ò»¸öÊÇ×Ó½ø³Ì¡£ÄÇô×Ó½ø³ÌÊÇÔõôÉú³ÉµÄÄØ£¬¾ÍÊÇ´Ó¸¸½ø³ÌÖÐÓÃWriteProcessMemoryº¯Êý¸´ÖÆÀ´µÄ¡££¨Õâ¶þ¸ö½ø³ÌµÄ´°¿Ú¾ä±ú²»Í¬£¬²¢ÇÒ»¥ÏàÕÆÎÕ×ŶԷ½µÄOEP£©SETUP2¾ÍÊǵõ½ÁËÄڴ渴ÖÆÐÅÏ¢µÄÄÚ´æµØÖ·£¬ÒòΪ¸´ÖÆÊÇ°´1000µÄ¿é½øÐеģ¬ËùÒÔµÚÒ»¸ö¸´ÖƵĿéÖбض¨°üº¬ÁË×Ó½ø³ÌµÄOEPµØÖ·¡£Õâ¸öµØÖ·µÄÖµÔÚµÚÒ»¿éµÄÖµÖ®¼ä¡£ËùÒÔÉÏÃæµÄת´æ´°¿ÚÖеÄÀ¶É«ÄǸöµØÖ·¾ÍÊÇÕæÕýµÄOEPÁË¡£Ricardo NarvajaÕæţѽ£¡
  OEPÕÒµ½ÁË£¬ÊDz»ÊǾÍÄÜdump³öÀ´ÄØ£¿ÊÔÊÔdump³öÀ´µÄ´úÂëÓÖÊÇ´íÎóµÄ¡£¿ÉÒԿ϶¨µÄÊÇÓÐÒ»¸öº¯ÊýÔÚ½âÃܺóÓÖÆÆ»µÁ˸´ÖƵÄÊý¾Ý£¬Õâ¾ÍÒý³öÁËÏÂÃæÀ´²éÕÒÆÆ»µÊý¾ÝµÄº¯ÊýµÄ·½·¨¡£½Ó×ÅÀ´¨D¨D
SETUP 4 NOP Ìî³ä Cripter?Call (²»ÈóÌÐòÆÆ»µ½âÃܵĴúÂë)
¸¸½ø³Ì»áΪËûµÄ×Ó½ø³Ì½âÃÜÒ»¸ö¿é¡£µ«ÊÇÈÔÓРCripter Call ÄÇЩ¼ÓÃÜ»òÆÆ»µ¾É¿éÀ´±ÜÃⱻת´¢¡£ÏÖÔÚ¾ÍÒÔʵ¼Ê²Ù×÷À´²éÕÒÕâÑùµÄ Call È»ºóÓàNOP Ìî³äÌæ»»Ëü¡£ÕâÊǸö¼è¿àºÍ¸´ÔӵŤ×÷.
Ê×ÏÈÔÚcpu´°¿ÚÖÐÓÒ»÷Êó±ê³öÏÖ¹¦Äܲ˵¥£¬Ñ¡ÔñÖжϵġ²Ìõ¼þ¼Ç¼¡³´°¿Ú¡£ÔÚÌõ¼þ±í´ïʽÖÐÌî ¡²ESP+U¡³È»ºóÑ¡Ôñ¡²ÓÀÔ¶¼Ç¼Ìõ¼þ±í´ïʽ¡³¡£Õâ¸öÓÃÀ´¼ì²é¸´ÖƵÄÊý¾Ý¿é¡£
Ôõô²éÕÒCripter CallÄØ£¿
ÔÚWriteProcessMemoryº¯ÊýµÄÈë¿Ú´¦Í£Ï¡£Alt+K´ò¿ªµ÷ÓöÑÕ»´°¿Ú£º
ºô½Ð¶ÑÕ» 
µØÖ·       ¶ÑÕ»       Àý³Ì / ²ÎÊý                         µ÷ÓÃÀ´×Ô                          Frame
0012E0C0   0043AFC2   ? kernel32.WriteProcessMemory       armadill.0043AFBC
0012E0C4   00000044     hProcess = 00000044 (window)
0012E0C8   00425000     Address = 425000
0012E0CC   003A2630     Buffer = 003A2630
0012E0D0   00001000     BytesToWrite = 1000 (4096.)
0012E0D4   0012E1DC     pBytesWritten = 0012E1DC
0012E1E8   00439D34   ? armadill.0043A07B                 armadill.00439D2F
0012E21C   00437CA8   armadill.004398F5                   armadill.00437CA3                 0012E218
0012F5BC   00434384   armadill.00436099                   armadill.0043437F                 0012F5B8
0012FD20   00434BDA   armadill.00433CF4                   armadill.00434BD5                 0012FD1C
0012FF38   0043CF87   armadill.00434940                   armadill.<ModuleEntryPoint>+0C9   0012FF34
0012FF3C   00400000     Arg1 = 00400000 ASCII "MZP"
0012FF40   00000000     Arg2 = 00000000
0012FF44   00141EFB     Arg3 = 00141EFB
0012FF48   0000000A     Arg4 = 0000000A

¿´¿´ÕâÀ
0012E0C0   0043AFC2   ? kernel32.WriteProcessMemory       armadill.0043AFBC
ÏÖÔÚ¸¸½ø³ÌµÄ0043AFC2µØÖ·´¦µ÷ÓÃÁËÕâ¸öº¯Êý£¬ÏòÏ¿´¿´£º
0012E1E8   00439D34   ? armadill.0043A07B                 armadill.00439D2F
ͨ¹ýÕâ¸öÎÒÃÇÖªµÀ³ÌÐòÔÚ00439D2F´¦Ò²µ÷ÓÃÁËÕâ¸öº¯Êý¡£Ë«»÷À´µ½£º
00439D27  MOV ECX,DWORD PTR SS:[EBP+C]
00439D2A  PUSH ECX
00439D2B  MOV EDX,DWORD PTR SS:[EBP+8]
00439D2E  PUSH EDX
00439D2F  CALL armadill.0043A07B  //ÕâÀïµ÷ÓÃÁËÉÏÃæµÄº¯Êý
00439D34  ADD ESP,0C
00439D37  AND EAX,0FF
00439D3C  TEST EAX,EAX
00439D3E  JNZ SHORT armadill.00439D47
00439D40  XOR AL,AL
00439D42  JMP armadill.0043A074
00439D2F  CALL armadill.0043A07B Õâ¸öCall ÊǸö½âÃܵĺ¯Êý£¬ÄÇô¿Ï¶¨ÓÐÒ»¸öÆÆ»µ½âÃܵĺ¯Êý¡£²éÕÒÁíÍâÒ»¸öͬÑùµÄCallµÄµØ·½¾ÍÊÇÎÒÃÇÒªÕҵĵط½£¬ÔÚODÖеģº
00439D2F  CALL armadill.0043A07B ´¦ÓÒ»÷¹¦Äܲ˵¥£¬Ñ¡Ôñ¡²²éÕҲο¼¡³¡­¡­¡²µ÷ÓÃÄ¿±ê¡³Ñ¡Ïî¾Í»á´ò¿ªÈ«²¿µÄµ÷ÓÃʲôCallµÄµØ·½£º
²Î¿¼Î»ÓÚarmadill:.text µ½ 0043A07B
µØÖ·       ·´»ã±à                                    ×¢ÊÍ
00439D2F   CALL armadill.0043A07B                    (³õʼ CPU Ñ¡Ôñ)
00439FEA   CALL armadill.0043A07B        //Ô­À´ÕâÀïÓÐÒ»¸ö^_^
Ë«»÷00439FEA   CALL armadill.0043A07B¾Í»áÀ´µ½Õâ¸öÃÎÖеĵط½£º
00439FDA  MOV ECX,DWORD PTR DS:[462AAC]
00439FE0  MOV EDX,DWORD PTR DS:[462AB0]
00439FE6  MOV EAX,DWORD PTR DS:[EDX+ECX*4]
00439FE9  PUSH EAX
00439FEA  CALL armadill.0043A07B  //ÕâÀï ÕâÀï ÕâÀï
00439FEF  ADD ESP,0C
00439FF2  PUSHFD
00439FF3  PUSHAD
00439FF4  JMP SHORT armadill.0043A021
ûÓбðµÄ˵ÁË£¬nopËû¡£

SETUP 5 ÔËÐиàAPI È»ºóÔÚ OEP ÖÐÉú³ÉÒ»¸öËÀÑ­»·
ÏÖÔÚÊÇʱºîÒªÖ´ÐРWriteProcessMemory Ò»´ÎÁË¡£×ö·¨ÊÇÎÒÃÇ¿ÉÒÔÔÚÁ½¸öÑ¡ÏîÖ®¼ä×÷³öÑ¡Ôñ¡£Ò»ÊÇҪתµ½²Ëµ¥ Debug|Execute till return È»ºóËü½«»áÔËÐÐÖ±µ½ RET£¬È»ºó°´Ò»´Î F7¡£¶þÊÇҪתµ½¶ÑÕ»µÚÒ»ÐÐÈ»ºóÔÚÄÇÀïÉèÖàBPX È»ºó¾Í F9 ÔËÐÐËü¡£ Õâ¶ÎÎҾ͸´ÖÆÁËRicardo NarvajaµÄÔ­ÎÄ¡£ÎÒûµÃ˵ÁË¡£·´Õý»áµ½APIµÄµ÷Óô¦¾Í¿ÉÒÔÁË£º
0043AFB3  PUSH EDX                                          ; |Address
0043AFB4  MOV EAX,DWORD PTR DS:[462A9C]                     ; |
0043AFB9  MOV ECX,DWORD PTR DS:[EAX]                        ; |
0043AFBB  PUSH ECX                                          ; |hProcess
0043AFBC  CALL NEAR DWORD PTR DS:[<&KERNEL32.WriteProcessMe>; WriteProcessMemory ********
0043AFC2  TEST EAX,EAX
0043AFC4  JNZ SHORT armadill.0043B001
0043AFC6  PUSHFD
0043AFC7  PUSHAD
0043AFC8  JMP SHORT armadill.0043AFF5
ÏÖÔÚÊÇ PUPE ÔË×÷µÄʱºòÁË£¬PUPE ÊÇÒ»¸öÎ÷°àÑÀÓïµÄ¹¤¾ß¡£Äã¿ÉÒÔµ½ www.google.com ÍøÕ¾ËÑË÷Ëü£¬ÔÚÏÂÒ»ÐÐÎÒÃǽ«ÒªÔÚ×Ó½ø³ÌµÄ OEP ÄÚÉú³ÉÒ»¸öËÀÑ­»·¡£´Ëʱ½«»á¾²Ö¹×Ó½ø³ÌÖ±µ½ÎÒÃÇÄܹ»½ÐÐÑËû¡£²»¹ýÎÒûÓÐÕÒµ½£¬»¹ÊÇyesky1ÐÖÌṩÁËÕâ¸ö¹¤¾ß¡£ÔٴθÐл£¡
´ò¿ªPUPE Ñ¡Ôñ½ø³ÌÖжþ¸öarmadillo3.exeµÄÉÏÃæµÄÒ»¸ö£¬Î»ÓÚÉÏÃæµÄ×Ó½ø³Ì£¬ÏÂÃæµÄ¸¸½ø³Ì¡£ÎÒÃÇÑ¡ÔñµÄÊÇ×Ó½ø³Ì¡£È»ºóÔÚËüÉÏÃæ°´ÓÒ¼ü²¢Ñ¡Ôñ "Parchear"¡£´ò¿ªÁËParchear´°¿Ú¡£ÌîÈë²ÎÊý£¬No de bytes = 2 ºÍ Introducir la direccion = 4251D0£¨×Ó½ø³ÌµÄOEP£©£¬È»ºóµã»÷ Buscar)¼ÇÏÂÔÚ¶Ô»°¿ò¼ûµ½µÄԭʼ×Ö½ÚÈ»ºóÓÃËÀÑ­»· EB FE À´Ì滻ԭʼ×Ö½Ú£¬µã»÷ " Parchear" È»ºó INFINITE LOOP (ËÀÑ­»·)±ã»á¾ÍÐ÷¡£
ºÇºÇ£¬µÚÒ»´ÎʹÓû¹Õæ²»ÖªµÀÕâÊǸÉʲôÄØ£¬Æäʵ¾ÍÊÇÓÃPUPEÐÞ¸ÄÈë¿ÚµÄ´úÂ룬ÈÃËû±ä³ÉÌøתµ½EIPµØÖ·µÄ´úÂë¡£ÕâÑù³ÌÐòÔÚÈë¿Úµã¾Í»áͣϡ£ÌøÏò×Ô¼ºµÄµØÖ·£¬³ÌÐò»áÏòÏÂÖ´ÐÐÂð£¿

SETUP 6 BP WaitForDebugEvent ºÍ NOP Ìî³ä API
 ÔÚÃüÁîÐÐÖмüÈë BP WaitForDebugEvent È»ºó°´»Ø³µ¼ü£¬×îºóµã»÷ RUN
£¨ÎªÊ²Ã´ÒªÏÂÕâ¸öAPIÇë²ÎÕÕleo_cyl1´óϺµÄÎÄÕ£©
µ±Í£Ö¹ºó£¬»áÀ´µ½ÕâÀ
77E605B6 >PUSH EBP  //Í£ÔÚÕâÀï
77E605B7  MOV EBP,ESP
ÄãÒªÇмǣºÔÚÈκÎʱºò¶¼¾ø¶Ô²»ÒªÔËÐÐÕâ¸ö API£¡ÁôÒâÒ»ÏÂÔÚ (ת´¢)´°¿ÚÖеı¨±í£¬È»ºóתµ½ STACK (¶ÑÕ»)´°¿Ú¡£Õâ¶ÎÎÒÒ²Ö»Äܳ­£¬ÎÒÌ«²ËÁË¡£ÏÖÔÚÀ´¿´¿´¶ÑÕ»´°¿ÚÖеÄÐÅÏ¢£º
0012E220   0043776E  /CALL µ½ WaitForDebugEvent   //µ÷ÓÃÐÅÏ¢
0012E224   0012EFF4  |pDebugEvent = 0012EFF4
0012E228   000003E8  Timeout = 1000. ms
¿ÉÒÔ¿´µ½£¬Èç¹ûÎÒÃÇÔËÐÐÕâ¸ö API£¬ÎÒÃǽ«Òª×ªµ½0043776EËùÒÔÔÚÖ÷´°¿ÚÓÃGo to|Expression =0043776EÄܵ½´ïÄÇÀï¡£
0043776E  TEST EAX,EAX  

ÔÙÒ»´ÎÌáÐÑÄ㣺²»ÒªÔËÐÐÕâ¸ö API£¡Òò¶øÔÚ0043776EÄÚ°´ÓÒ¼üÈ»ºóÑ¡Ôñ[н¨ÆðÔ´]¡£ÕâÊÇÌø¹ý¸Ã API µÄÕýÈ·×ö·¨¡£ÏÖÔÚÎÒÃDZØÐëÓàNOP À´Ìî³äµ÷Óõ½¸Ã API ¼°ÆäÓйؠPush¡£
°ÑÏÂÃæµÄ´úÂëÓÃnopÐ޸ĵô£º
00437759  MOV AL,BYTE PTR DS:[E8686133]
0043775E  ADD EAX,DWORD PTR DS:[EAX]
00437760  ADD BYTE PTR DS:[EBX+FFFA3895],CL
00437766  CALL NEAR DWORD PTR DS:[EDX-1]
00437769  ADC EAX,<&KERNEL32.WaitForDebugEvent>
£¨²»ÖªµÀΪʲôÕâ¶Î´úÂëÊǶ¯Ì¬µÄ£©
¸ÄΪ£º
00437759  NOP
0043775A  NOP
0043775B  NOP
0043775C  NOP
0043775D  NOP
0043775E  NOP
0043775F  NOP
00437760  NOP
00437761  NOP
00437762  NOP
00437763  NOP
00437764  NOP
00437765  NOP
00437766  NOP
00437767  NOP
00437768  NOP
00437769  NOP
0043776A  NOP
0043776B  NOP
0043776C  NOP
0043776D  NOP
0043776E  TEST EAX,EAX

SETUP 7 ´ò²¹¶¡

¡°µ±´¦ÀíÕâ¸ö²½ÖèʱҪÌرðСÐÄ! ¶àÊýÈ˲¢²»ÖªµÀ¾¿¾¹ÊÇÈçºÎ´ò²¹¶¤µÄÕýÈ··½·¨£¬ËùÒÔÒª¾¡Á¦Áì»áÎÒÔÚÕâÀïÊÇÔõÑù×ö£¬²¢ÇÒÄ㻹ÐèÒªÔÚÆäËüÇé¿öÏ»áÍê³É¡£¡± ÎÒÊÇÊÔÁ˼¸´Î²Å³É¹¦µÄ£¡
µÚÒ»²½ÊǸü¸Ä´ËÌøת£º
0043776E  TEST EAX,EAX
00437770  JE armadill.004398A5  //°ÑÕâÀïÐÞ¸ÄΪ Jmp 00401000
Why£¿ ÒòΪ¸¸½ø³ÌµÄÆ«ÒÆÊÇ00401000 ÎÒÃÇÐèÒªÔÚÄÇÀï´ò²¹¶¡¡£
ÏÖÔÚgo 00401000 ×¼±¸´ò²¹¶¡ÁË£º
00401000  ADD BYTE PTR DS:[EAX],AL
00401002  ADD BYTE PTR DS:[EAX],AL
00401004  ADD BYTE PTR DS:[EAX],AL
00401006  ADD BYTE PTR DS:[EAX],AL
00401008  ADD BYTE PTR DS:[EAX],AL
À´¿´¿´ÄÚ´æ¾µÏóÖеÄÊý¾Ý£¬Alt+M ´ò¿ªÄÚ´æ¾µÏó´°¿Ú£º
00400000   00001000   armadill              PE header     Imag   R         RWE
00401000   00025000   armadill   CODE                     Imag   R         RWE
00426000   00001000   armadill   DATA                     Imag   R         RWE
00427000   00001000   armadill   BSS                      Imag   R         RWE
00428000   00002000   armadill   .idata                   Imag   R         RWE
0042A000   00001000   armadill   .tls                     Imag   R         RWE
0042B000   00001000   armadill   .rdata                   Imag   R         RWE
0042C000   00003000   armadill   .reloc                   Imag   R         RWE
0042F000   00020000   armadill   .text      code          Imag   R         RWE
0044F000   00010000   armadill   .adata                   Imag   R         RWE
0045F000   00010000   armadill   .data      data,imports  Imag   R         RWE
0046F000   00010000   armadill   .reloc1    relocations   Imag   R         RWE
0047F000   00040000   armadill   .pdata                   Imag   R         RWE
004BF000   00011000   armadill   .rsrc      resources     Imag   R         RWE

¿´¿´³ÌÐòµÄ´úÂë¶Î¿ªÊ¼ÓÚ00401000 ½áÊøÓÚ00425FFF
ÔÚת´æ´°¿ÚÖаÑOEPµÄÈë¿ÚÐÞ¸ÄΪ400000£¬Ð޸ĺóÊÇÕâÑùµÄ£º
0012EFF4  01 00 00 00 B0 0E 00 00   ...?..
0012EFFC  B8 0E 00 00 01 00 00 80  ?.. ..€
0012F004  00 00 00 00 00 00 00 00  ........
0012F00C  00 00 40 00 02 00 00 00  ..@. ... //*******
0012F014  00 00 00 00 00 00 40 00  ......@. //*******
0012F01C  00 00 40 00 00 00 00 00  ..@..... //*******
ÒòΪÿ¸ö¿éÑ­»·ÒÔ 1000×÷ÔöÁ¿²¹¶¤£¬ËùÒÔÒª½âѹµÄµÚÒ»¿é±ØÐëÊÇ401000¡£

ÏÖÔÚÎÒÃDZØÐëÔÚÖ÷´°¿ÚÏÂÒÔ 401000 ×÷¿ªÊ¼ÐУ¬²¢Ð´Èë

00401000    8105 0CF01200 00100000   ADD DWORD PTR DS:[12F00C],1000
0040100A    8105 18F01200 00100000   ADD DWORD PTR DS:[12F018],1000
00401014    8105 1CF01200 00100000   ADD DWORD PTR DS:[12F01C],1000
ÕâÀï²¹¶¡ÒªºÍת´æ´°¿ÚÖеĵØÖ·Ò»Ö¡£
ÏÂÒ»ÐоÍÒªÕâÑùд¡Ã

0040101E  CMP DWORD PTR DS:[12F01C],armadill.00426000
//²âÊÔ´úÂë¶Î½áÊøÁËÂð£¿

ÒªÖªµÀºÎʱÎÒÃÇÒѾ­½âѹÁËÈ«²¿¿é¡£ 
Ôò±ØÐëдÈë¡Ã
00401028 - 0F85 F6341F00 JNZ 00437775  //ûÓÐÍê³É¾Í¼ÌÐø
Èç¹û±È½Ï½á¹û²»ÊÇ True£¬ÄÇÕâ¸öÑ­»··µ»Øµ½µÄλÖýô°¤×ÅÄÄÀïÊǵ÷ÓøÃÑ­»·¡£È»ºóÎÒÃDZØÐëдÈëÏÂÒ»ÐÐд NOP £¬ÎÒÃǽ«·ÅÖÃÒ»¸ö BP£¬ÊÇÒªÔÚÍê³Éת´¢²Ù×÷ʱÀ´Í£Ö¹Ëü¡£
ÏÂÃæÊÇ´òºÃ²¹¶¡µÄÈ«²¿´úÂ룺
00401000  ADD DWORD PTR DS:[12F00C],1000
0040100A  ADD DWORD PTR DS:[12F018],1000
00401014  ADD DWORD PTR DS:[12F01C],1000
0040101E  CMP DWORD PTR DS:[12F01C],armadill.00426000
00401028  JNZ armadill.00437775
0040102E  NOP   //ÕâÀïϸöÖжϣ¬Èç¹ûÍê³ÉÁ˾ͶÏÔÚÕâÀï¡£
0040102F  NOP

ºÃÁË£¬×î¹Ø¼üµÄ²¿·ÖÍê³ÉÁË£¬ÏÂÃæ¾Í¿ÉÒÔÍÑ¿ÇÁË¡£

SETUP 8 ÍÑ¿ÇÁË
¼ì²éÒ»ÏÂÇ°ÃæµÄ¼¸²½£¬±£Ö¤ËûµÄÕýÈ·ºó¾ÍÔËÐÐÕâ¸ö³ÌÐòÁË¡£F9һϣ¬¹þ¹þÖжÏÔÚ£º
0040102E  NOP   //ÕâÀïϸöÖжϣ¬Èç¹ûÍê³ÉÁ˾ͶÏÔÚÕâÀï 
ºÃÏñ³É¹¦ÁËÒ®£¡
¿´¿´¼Ç¼ÀïÓÐЩʲô£¬Alt+L´ò¿ª¼Ç¼´°¿Ú£º
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
77E65A12   COND: Î´ÖªµÄ±êʾ·û
0040102E   ÖжÏÔÚ armadill.0040102E
ÎÒ²»ÖªµÀΪʲô³ÉÁËδ֪µÄ±êʾ·û£¬¿ÉÄÜÊÇÎÒµÄÌõ¼þ¼Ç¼ûÓÐÉèÖú㬲»¹ýÄǾÍÊǸ´ÖƵĴúÂë¿é¡£ÓÐÁËÕâ¸öÐÅÏ¢¾Í˵Ã÷´úÂë±»ÍêÈ«µÄ¸´ÖƹýÀ´ÁË¡£

SETUP 9Óɸ¸½ø³Ì½â³ö×Ó½ø³Ì

ÏÈÓÃODµÄ¸½¼Ó¹¦Äܲ鿴×Ó½ø³ÌµÄ¾ä±ú£¬´ò¿ª¸½¼Ó´°¿Ú£¬¿´µ½Ã»ÓбäÉ«µÄÄǸöarmadillo3.exe¾ÍÊÇ×Ó½ø³Ì£¬ËûµÄ¾ä±úÊÇOBDC £¨Õâ¸öֵÿ´Î¼ÓÔغó¾Í»á±ä£©
ÔÚ³ÌÐòÖÐдÈëÏÂÃæµÄ´úÂ룺
0040102E  PUSH 0BDC  //PUSH (×Ó½ø³Ì¾ä±ú)
00401033  CALL kernel32.DebugActiveProcessStop
00401038  NOP     // ÕâÀïϸöÖжÏ
ÔËÐгÌÐò¡£¿´¿´¼Ä´æÆ÷´°¿Ú£¬Èç¹ûµ± ³ÌÐò ÔÚ EAX = 1 Í£ÏÂʱ£¬¿ÉÒÔÈ·¶¨×Ó½ø³ÌÓëËûµÄ¸¸½ø³ÌÒѾ­·ÖÀ룬ȻºóÎÒÃÇ¿ÉÒԹرՠOllyDbg¡£¶øÈç¹û EAX = 0£¬ÄÇÊÇÒòΪÄãдÈëÓе㲻¶Ô¾¢£¨¿ÉÄÜÊǾä±ú£©£¬ÔòÄã±ØÐëÒª´ÓÍ·µ½Î²ºË¶ÔÄÇЩÐС£Äã¿ÉÒÔÖØÐÂдÈë´úÂ룬ÔÙÀ´Ò»´Î¡£
ÏÖÔڹرՠOllyDbg È»ºóÔٴδò¿ªËü¡£²»Òª×°ÈëÈκζ«Î÷¡£×ªµ½²Ëµ¥ Îļþ|¸½¼Ó È»ºóÑ°ÕÒ×Ó½ø³Ì²¢ÇÒ ¸½¼ÓÉÏ Ëü(ÎÒÃÇÒѾ­É±ËÀËûµÄ¸¸½ø³Ì :X)¡£

Ö»Òª³É¹¦¸½¼ÓÉÏ£¬ÔËÐÐһϣ¬³ÌÐò¾Í»áÔÚËÀÑ­»·ÔËÐУ¬Òò´Ë°´ F12 À´ÔÝÍ£³ÌÐò£¬È»ºóÔÚPUPEÖаÑOEPµÄ´úÂ뻹ԭ³É55 8B £¬ÔÙ¡°Parchear¡±Ò»Ï¾ͻỹԭ³ÉÔ­À´µÄ´úÂëÁË¡£
´ò¿ª LordPE È»ºóËÑË÷armadillo3.exeÕâ¸ö½ø³Ì¡£Ñ¡ÔñÕâ½ø³ÌÒÔ¼°Ñ¡Ôñ¡²active dump engine¡³| ¡²IntelliDump¡³|¡²select¡³£¬È»ºóµã»÷ Dump full £¬Ò»µ©±£´æÍê³É£¬Á¢¼´ÔËÐРPEditor (£¬È»ºóÔÙдÈëÕâ¸öÓÐЧµÄÈë¿Úµã( ENTRY POINT)¡£¼ÆËãÒ»ÏÂÊÇ4251D0-400000£½251D0 ÐÞ¸´¼´¿É¡£

µÚÒ»²¿·ÖÒÑÍ꣬дÁËÒ»¸öÍíÉÏ¡£Ì«ÀäÁË£¬µÚ¶þ²¿·Ö¹ØÓÚÈçºÎ²éÕÒÕâÆæÃîÌøתÀ´Íê³ÉÒýÈë±í¡¢ÐÞ¸´ IAT ºÍÉú³É³ÌÐòÔËÐР»¹ÊÇÁô¸øÃ÷Ìì°É¡£

                                      fxyang[OCN][BCG][FCG]
                                            2003.11.26Ò¹


Armadillo v3.xÍÑ¿ÇÍêȫƪ¨D¨DÏÂƪ
                    ¨D¨DÍê³ÉÒýÈë±í¡¢ÐÞ¸´ IAT
  ÕâÊÇһƪÍÑArmadillo¼Ó¿ÇÈí¼þµÄ¸öÈ˵ľ­Àú¹ý³Ì£¬±¾ÈËÌرðÉùÃ÷£ºÕâ¸ö¹ý³ÌÊDzÎÕÕÁËBighead[DFCG][YCG]·­ÒëµÄRicardo NarvajaµÄ¡°Getright 5 ÍѿǺÍÖؽ¨¡±ÎÄÕ²Ù×÷µÄ£¬¿ÉÒÔ˵ÊǸöÕÕºù«»­Æ°×öµÄ¡£¸ÐлBighead[DFCG][YCG]ºÍÏà¹ØµÄ·­ÒëÕߣ¬¸ÐлRicardo NarvajaµÄÎÄÕ¡£
   Õâ´ÎÄÃÀ´Á·Ï°µÄÈí¼þÊÇFCGµÄpeterdocterÀÏ´óÌṩµÄÈí¼þ£¬ÏÂÔصØÖ·£ºhttp://peter.88vip.com/armadillo3.rar
¹¤¾ß£º
Ollydbg v1.09dÖÐÎÄ°æ
PuPe 2002°æ ¸Ðлyesky1ÐÖÌṩ
LordPE Deluxe-1.4 by yoda
Import Reconstructor 16f
   ×¼±¸ºÃ±ÊºÍÖ½£¨²»ÄÜÉÙร¡£©£¬Ò»±­²èºÍºÃÊÇÐÄÇé^_^.ÈÃÎÒÃÇ¿ªÊ¼Ò»¸ö¼è¿àºÍÂþ³¤µÄÍѿǹý³Ì°É£¨ÒòΪÎҲˣ¡£©¡£ArmadilloÊǵ±½ñÃÍ¿ÇÖ®Ò»À²¡£ÆäCopyMem-II+Debug-BlockerµÄ¼Ó¿Ç·½Ê½ÊǷdz£Ç¿¾¢µÄ£¬ºÃÔÚÓÐÅ£ÈËÔÚÇ°Ãæ´ø·£¬Ëä¼èÄѵ¹Ò²²»ÃÔʧ·½Ïò¡£
ÔÚÉÏƪÖÐÍê³ÉÁ˲éÕÒOEPºÍ´úÂëÐÞ¸´µÄ¹¤×÷£¬µ«ÊÇÓÃLordPE dumpϵijÌÐò²»ÄÜÔËÐС£ÕâÊÇÒòΪArmadilloµÄ¿ÇÆÆ»µÁËÒýÈë±í£¬ÏÂÃæÎÒÃǽ«ÒªÉè·¨²éÕÒ magic Ìøת£¬Ïû³ýÆÆ»µÒýÈë±íµÄ´úÂë¡£
¿ªÊ¼°É£¡¡«
ÓÃOllydbg¼ÓÔØdumpÏÂÀ´µÄ³ÌÐòdump.exeÓÃF7ÔËÐÐËû£¬ÔÚÏÂÃæµÄ´úÂë´¦¾Í»á³ö´íÁË£¬ÒòΪ³ÌÐòÐèÒªµÄº¯ÊýµØÖ·Ö¸ÏòÁËÒ»¸ö²»ÕýÈ·µÄµØ·½£º
0040128C  - FF25 D0804200   JMP NEAR DWORD PTR DS:[4280D0]  
DS:[4280D0] µÄÄÚ´æµØÖ·Ö¸ÏòÁË00BF919B,Õâ¸öµØÖ·ÔÚ³ÌÐòµÄ´úÂëÍ⣬ËùÒÔÔËÐе½ÕâÀïºó¾Í»á³öÏÖÒì³£ÎÊÌâ¡£Ô­À´µÄ³ÌÐòÔÚÕâÀï¿Ï¶¨Ö¸ÏòÒ»¸öÓÐЧµÄµØÖ·²ÅÄÜÔËÐÐÏÂÈ¥¡£ÏÖÔÚÀ´µ½ODµÄת´æ´°¿ÚÖС£ÓÃCtrl+GÃüÁîÊäÈë4280D0µ½´°¿ÚÖÐÀ´µ½£º
004280D0  9B 91 BF 00 A5 5B F3 77  ›‘?¥[ów  //¿´ÕâÀï
004280D8  9F 9C BF 00 9C 76 BF 00  Ÿœ?œv?
004280E0  CC 76 BF 00 B2 E3 E2 77  Ìv?²ãâw
004280E8  5F 8E F5 77 66 74 BF 00  _Žõwft?
004280F0  8B 49 E3 77 D7 E7 E1 77  ‹Iãw×çáw
ÕâÊdzÌÐòµÄÒýÈë±íµÄÒ»²¿·Ö£¬À´¿´¿´Ëû¿ªÊ¼ÓÚʲôµØ·½£¬ÏòÉÏÕÒµ½ÕâÀ
004280A0  B7 8B F3 77 C6 20 F3 77  ·‹ów?ów
004280A8  00 20 F3 77 03 2D E1 77  . ów -áw
004280B0  66 63 E1 77 49 25 E1 77  fcáwI%áw
ÒòΪÔÙÏòÉÏûÓÐÁËÕâ¸ö½á¹¹µÄµØ·½£¬ËùÒÔ¿ÉÒÔÈ϶¨ÒýÈë±íµÄ¿ªÊ¼µØÖ·ÊÇ004280A0£¬ÔÙÏòÏ¿´¿´Ê²Ã´µØ·½ÊDZíµÄ½áÊøµØÖ·£º
004284D0  AF 9B BC 70 00 00 00 00  ¯›¼p....
004284D8  6B 65 72 6E 65 6C 33 32  kernel32
004284E0  2E 64 6C 6C 00 00 00 00  .dll....
004284E8  00 00 00 00 00 00 00 00  ........
ºóÃæÔÙҲûÓÐÁË¡£ËùÒÔ¿ÉÒÔÈ϶¨±íµÄ½áÊøµØÖ·ÊÇ004284E4 £¬¿´¿´±íµÄ³¤¶È£½004284E4-004280A0£½444ÓÃÖ½¼ÇÏÂÕâЩÐÅÏ¢¡£ÒÔºóÓÃImportRECÐÞ¸´IATʱÐèÒªÊÖ¹¤ÌîÈëÕâЩÐÅÏ¢¡£
Ricardo NarvajaµÄÔ­ÎÄÓÐÕâÑùµÄÒ»¶Î»°£º
¡¶ÕâÀï˵Ã÷Ò»µã£ºÎÒÃÇÒѾ­ÖªµÀ³ÌÐòµÄ¸¸½ø³ÌºÍËûµÄ×Ó½ø³ÌÊÇÏàͬÎļþ£¬µ«ÒªÓò»Í¬µÄ¾ä±ú×°ÈëÁ½´Î£¬ËùÒÔËûÃDZä³ÉÁ½¸ö²»Í¬µÄ½ø³Ì¡£ÓÉÆäÖÐÒ»¸ö½ø³ÌÕƹÜן¸½ø³ÌµÄ OEP´ÓÕâÀ↑ʼÔËÐС£
 ÎÒÃÇÖªµÀµ±Ëü±»×ª´¢Ê±£¬ÁíÒ»½ø³ÌÊÇÕƹÜ×Å×Ó½ø³ÌµÄ OEP£¬µ«ÎÒÒ²Òª¸æËßÄ㣬²¢²»ÊÇËùÓÐ×Ó½ø³Ì¶¼ÒÔÏàͬ¸¸½ø³ÌµÄÈë¿ÚµãÀ´¿ªÊ¼ÔËÐеġ£Ë³±ãÒ»Ì᣺ÎÒÊÇÉè·¨¸æËßÄ㣬Ëü²»ÊÇ´Ó¸¸½ø³ÌÄǸ´ÖÆ IAT µ½ËüµÄ×Ó½ø³Ì£¬È´ÊÇ´Ó×Ó½ø³ÌÄǽâ³ö×Ô¼ºµÄ IAT¡£ÕâÓ¦¸ÃÊÇÒ»´óÂé·³£¬ÒòΪÎÒÃDz»ÄÜÔÚËû´Ó¸¸½ø³ÌÍÑÀëÇ°ÓàOllyDbg ½øÈë×Ó½ø³Ì¡£¡·
ÏÖÔÚµÄÎÊÌâÊÇÔõôÓÃOD½øÈë×Ó½ø³ÌÖУ¬ÈÃÎÒ¸ú×ÅRicardo NarvajaÏòÇ°×ß¡£
ÏÖÔÚÓÃOD¼ÓÔØûÓÐÍѿǵijÌÐòarmadillo3.exe°´ÀϹæ¾Ø¼ÇסҪ½« IsDebuggerPresent µÄÖµÉèΪÁ㣬Çå³ýËùÓÐÒÔÇ°µÄ BPX¡¢BP WaitForDebugEvent È»ºóµ¥»÷ÔËÐС£µÈarmadilloµÄ×¢²áÌáʾ¿ò³öÀ´ºó£¬´ò¿ªPUPEÑ¡Ôñ½ø³ÌÖÐ2¸öarmadillo3.exeÖеÄÉÏÃæÒ»¸ö£¨ÒòΪËûÊÇ×Ó½ø³Ì£¬ÊÇÎÒÃÇÐèÒªµÄ£©¡£ÓÒ»÷½øÈëparcheando´°¿ÚÑ¡Ôñ4×Ö½Ú£¬ÔÚµØÖ·ÀïÌî4280D0 £¨ÕâÊǵÚÒ»¸ö²»ÕýÈ·µÄµØÖ·£©BuscarÒ»ÏÂÐÅÏ¢´°¿ÚÖоͳöÏÖÁË4¸ö×Ö½ÚµÄÖµ00 00 00 00  È»ºó²»¶ÏµÄÔÚODÖÐÔËÐС¢ÔÚPUPEÖмì²é×Ö½Ú´°¿ÚÖеÄÖµ£¬Ö±µ½×Ö½Ú´°¿ÚÖеÄÖµ±ä³É 9B 91 BF 00 £¬Õâ¸öÖµ¾ÍÊdzÌÐòдÈëµ½ÄÚ´æµØÖ·004280D0´¦µÄ¡£ÄÇô·´¹ýÀ´ÏëÏ룬Èç¹ûÄÜÔÚдÈëÕâ¸öֵǰ½øÈëµ½×Ó½ø³ÌÖв¢¸ú×ÙʲôµØ·½µÄ´úÂëдÈëÁËÕâ¸öÖµ¾ÍÄܸú×Ùµ½ÄǸömagicµÄÌøת¡£ÄÇô³öÏÖ9B 91 BF 00Õâ¸öֵǰ³öÏÖ¹ýCA 85 02 00 Õâ¸öÖµ¡£ÖØÐÂ×öÉÏÃæµÄÒ»ÇÐÖ±µ½×Ö½Ú´°¿ÚÖгöÏÖCA 85 02 00Õâ¸öֵʱͣÏ¡£ÏÖÔÚÊǽøÈë×Ó½ø³ÌµÄʱºòÁË£º
ÔÚODÖдò¿ªÄ£¿é´°¿ÚÑ¡ÔñÒ»¸öAPIÉú³ÉËÀÑ­»·£¬È»ºó½øÈëµ½×Ó½ø³ÌÖС£ÎÒÄ£·ÂRicardo NarvajaÑ¡ÔñÁËKERNEL32.dll ÖеÄGetProcAddressÕâ¸öAPI¡£ÔÚÃû³Æ´°¿ÚÖвéÕÒÕâ¸öº¯ÊýµÄµØÖ·ÊÇ77E12DFB£¨Õâ¸öµØÖ·¿ÉÄÜÓëÄãµÄ²»Í¬£©¡£ÓÖÊÇÓõ½PUPEÕâ¸ö¹¤¾ßµÄʱºòÁË£¬ÔÚ×Ö½ÚÊýÖÐÑ¡Ôñ2¸ö×Ö½Ú¡£µØÖ·ÖÐÌî77E12DFBÔÙ"Buscar"һϣ¬¾Í»áÔÚ×Ö½ÚÐÅÏ¢´°¿ÚÖп´µ½ 55 8B Õâ¸öÖµ£¬ÐÞ¸ÄΪEB FE²¢°´ "Parchear"£¬¿´¿´×Ö½ÚÐÅÏ¢´°¿ÚÖеÄÖµ±ä³ÉÁËEB FE £¬×Ó½ø³Ì¾Í»áÔÚÕâ¸öAPIÖÐÍ£ÏÂÁË¡£»òÕß˵ÊÇÐÝÃßÔÚÕâ¸öAPIÖÐÖ±µ½ÄãÀ´»½ÐÑËû¡£
»áµ½ODÖÐÑ¡ÔñÒ»¶Î´úÂ룬±ÈÈ磺
0042F000      55            PUSH EBP
0042F001      8BEC          MOV EBP,ESP
0042F003      83EC 0C       SUB ESP,0C
0042F006      8B45 10       MOV EAX,DWORD PTR SS:[EBP+10]
0042F009      50            PUSH EAX
0042F00A      E8 18CE0000   CALL armadill.0043BE27
ÓÃÊó±êÔÚ0042F000ÐÐÓÒ»÷Ñ¡Ôñ¡²Ð½¨ÆðÔ´¡³£¨ºÇºÇ£¬³ÌÐò»áµ½ÕâÀïÔËÐÐÎÒÃÇдµÄ´úÂ룩£¬´ò¿ª¸½¼Ó´°¿Ú²é¿´ÄǸöûÓбäÉ«µÄÖ÷³ÌÐòµÄ¾ä±úÊÇ0BAC(Õâ¸öֵÿ´Î¼ÓÔػ᲻ͬ£¬×¢ÒâÁË)Õâ¸ö¾ÍÊÇ×Ó½ø³ÌµÄ¾ä±ú¡£»Øµ½´úÂëÖаÑÉÏÃæµÄ´úÂëÐÞ¸ÄΪ£º
0042F000      68 AC0B0000   PUSH 0BAC //×Ó½ø³Ì¾ä±ú
0042F005      E8 AD16A377   CALL kernel32.DebugActiveProcessStop
0042F00A      90            NOP   //ÔÚÕâÀïÏÂÖжÏ
ÔÚ0042F00A  ÏÂÖжϣ¬È»ºóÔËÐÐÒ»ÏÂÍ£ÔÚ0042F00A ´¦¡£¿´¿´¼Ä´æÆ÷´°¿ÚµÄEAXÖµ£¬Èç¹ûÕâ¸öÖµ£½01¾Í±íʾ×Ó½ø³ÌºÍ¸¸½ø³Ì·ÖÀëÁË¡£Èç¹û£½00ÄÇô¿ÉÄÜÊÇ×Ó½ø³ÌµÄ¾ä±úÌî´íÁË£¬Äã¿ÉÒÔÔÚÏÂÃæÖØÐÂдÈë´úÂëÔÙ´ÎÔËÐУ¬Ö±µ½EAX£½01ʱ¾Í¿ÉÒԹرÕODÁË£¨É±µô¸¸½ø³Ì£¡£©È»ºó¾Í¿ÉÒÔ½øÈë×Ó½ø³ÌÁË¡£
ÖØÐÂÔËÐÐOllydbg£¨²»Òª¼ÓÔسÌÐò£©¸½¼ÓÉϽø³ÌÖеÄÄǸöΨһµÄarmadillo3.exe £¨¸½¼ÓÉÏÁËÂ𣿳ɹ¦ÁËÂ𣿷´ÕýÎÒÊdzɹ¦ÁË£©F9ÔËÐÐÒ»ÏÂÈ»ºóF12ÔÝÍ£³ÌÐò¾Í»áÀ´µ½ÐÝÃߵĵط½£º
77E12DFB >- EB FE           JMP SHORT kernel32.GetProcAddress //¿´ÔÚÑ­»·ÄØ
77E12DFD    EC              IN AL,DX
77E12DFE    51              PUSH ECX
ÔÙ´ÎÔÚPUPEÖлָ´Ô­À´µÄ´úÂë 55 8B²¢°´ "Parchear" ÔÙ¿´¿´³ÌÐòÖеĴúÂëÓÖ»¹Ô­³É£º
77E12DFB >  55              PUSH EBP
77E12DFC    8BEC            MOV EBP,ESP
77E12DFE    51              PUSH ECX
Õâ¸ö³ÌÐòÖØб»ÎÒ»½ÐÑÁË¡£
ÏÈÀ´µ½³ö´íµÄµØÖ·¿´¿´£¬ÔÚת´æ´°¿ÚÖÐG 004280D0 £º
004280D0  CA 85 02 00 DE 85 02 00  Ê… .Þ… .
004280D8  EE 85 02 00 00 86 02 00  î… ..?.
004280E0  0C 86 02 00 1E 86 02 00  .?. ?.
004280E8  2E 86 02 00 3A 86 02 00  .?.:?.
¿´¿´ÒýÈë±í»¹Ã»ÓÐдÈëÄØ£¬ËµÃ÷ÎÒÃÇÍ£ÔÚ½âÃÜÒýÈë±íµÄ´úÂëÇ°Ã棬ÉÏÃæ˵¹ýÕâ¸öÒýÈë±íÊÇ×Ó½ø³Ì×Ô¼º½âÃܵģ¬ÄÇôֻҪÕÒµ½½âÃܵĵط½¡£È»ºó°ÑÆÆ»µµÄ´úÂëÐ޸ľͿÉÒԵõ½ÍêÕûµÄÒýÈë±íÁË¡£
ºÃÁË£¬µÚÒ»¸öÄ¿µÄ´ïµ½ÁË£­½øÈëµ½×Ó½ø³ÌÖв¢ÇÒÍ£ÔÚ½âÃÜÒýÈë±íµÄÇ°Ãæ¡£³É¹¦ÁËÒ»°ëÁË£¡ÏÂÃæÒª×öµÄ¾ÍÊÇÕÒÄǸömagicÁË¡£
Ctrl+F9ÔÙF7Ò»´Î¾ÍÀ´µ½£º
00BF545E  PUSH DWORD PTR SS:[EBP+C]
00BF5461  PUSH ECX
00BF5462  CALL NEAR DWORD PTR DS:[C130C4]          ; kernel32.GetProcAddress
00BF5468  JMP SHORT 00BF54BE  //·µ»ØµÄµØ·½¡£
ÎÒÃÇÖªµÀ³ÌÐòµÄµÚÒ»¸ö³ö´íµÄµØ·½¾ÍÊÇ£º004280D0µØÖ·Ö¸ÏòµÄ´úÂë 00BF919B ÏÖÔÚÔÚת´æ´°¿ÚÖеÄ004280D0¿ªÊ¼µÄ4¸ö×Ö½ÚÉÏÏÂÄÚ´æдÈëÖжϣ­¸ú×ÙÊÇʲôµØ·½Ð´ÈëÁË00BF919BÕâ¸öÖµ£¬ÔËÐб»ODÖжÏÔÚ£º
00C0942F  MOV EAX,DWORD PTR SS:[EBP-4A4]
00C09435  MOV ECX,DWORD PTR SS:[EBP-6B8]
00C0943B  MOV DWORD PTR DS:[EAX],ECX                ; ECX=00BF919B
00C0943D  MOV EAX,DWORD PTR SS:[EBP-4A4]
00C09443  ADD EAX,4
00C09446  MOV DWORD PTR SS:[EBP-4A4],EAX
00C0944C  JMP 00C092C9
¿ÉÒÔ¿´³ö00BF919BÕâ¸öÖµÊÇEBP-6B8Õâ¸öµØÖ·ÀïµÄ¡£
ÔÚת´æ´°¿ÚÖÐG EBP-6B8 À´µ½ÕâÀ
0012ED60  9B 91 BF 00 B3 73 F3 77  ....³sów
0012ED68  78 01 14 00 00 00 00 00  x  .....
ÔÚÉÏÃæµÄ9B 91 BF 00 Õâ4¸ö×Ö½ÚÉÏÏÂÄÚ´æ·ÃÎʶϵãÈ»ºóRunһϾÍÀ´µ½£º
00C093D1    8985 F4FDFFF>MOV DWORD PTR SS:[EBP-20C],EAX
00C093D7    FFB5 40F9FFF>PUSH DWORD PTR SS:[EBP-6C0]
00C093DD    FFB5 70FBFFF>PUSH DWORD PTR SS:[EBP-490]
00C093E3    E8 F8C0FEFF  CALL 00BF54E0
00C093E8    8985 48F9FFF>MOV DWORD PTR SS:[EBP-6B8],EAX    //Í£ÔÚÕâÀï               ; ntdll.RtlGetLastWin32Error
00C093EE    83BD 48F9FFF>CMP DWORD PTR SS:[EBP-6B8],0
00C093F5    75 38        JNZ SHORT 00C0942F
¿´¿´Í£Ïµĵط½£¬·¢ÏÖÊÇEAX¸³ÁËÕâ¸öÄÚ´æµØÖ·µÄÖµ¡£¶øÕâ¸öEAXÊÇÉÏÃæµÄCALL 00BF54E0º¯Êý¼ÆËãµÄÖµ£¬µ½Õâ¸öº¯ÊýÖп´¿´£º
00BF54E0  PUSH EBP         //ÔÚÕâÀïÏÂÖжÏ
00BF54E1  MOV EBP,ESP
00BF54E3  PUSH EBX
00BF54E4  PUSH ESI
00BF54E5  PUSH EDI
00BF54E6  XOR EDI,EDI
00BF54E8  XOR EBX,EBX
00BF54EA  TEST WORD PTR SS:[EBP+E],0FFFF
00BF54F0  JNZ SHORT 00BF54F5          // µÚÒ»¸öÌø
00BF54F2  MOV EBX,DWORD PTR SS:[EBP+C]
00BF54F5  PUSH EDI
00BF54F6  CALL NEAR DWORD PTR DS:[C130A4]          ; kernel32.GetModuleHandleA
00BF54FC  CMP DWORD PTR SS:[EBP+8],EAX
00BF54FF  JNZ SHORT 00BF5508    //µÚ¶þ¸öÌø
00BF5501  MOV ESI,0C153C0
00BF5506  JMP SHORT 00BF5568
00BF5508  CMP DWORD PTR DS:[C15998],EDI
00BF550E  MOV ECX,0C15998
00BF5513  JE SHORT 00BF5551      // µÚÈý¸öÌø ¸ÄΪ JMP£¨magicÌøת£©
00BF5515  MOV ESI,DWORD PTR DS:[C1B1B8]
00BF551B  MOV EAX,DWORD PTR DS:[C1EECC]
00BF5520  TEST BYTE PTR DS:[ECX+8],1
00BF5524  JE SHORT 00BF5534       //µÚ4¸öÌø
00BF5526  MOV EDX,DWORD PTR DS:[EAX+70]
00BF5529  XOR EDX,DWORD PTR DS:[EAX+60]
00BF552C  XOR EDX,DWORD PTR DS:[EAX+3C]
00BF552F  TEST DL,80
00BF5532  JNZ SHORT 00BF5547        //µÚ5¸öÌø
00BF5534  MOV EDX,DWORD PTR DS:[EAX+70]
00BF5537  XOR EDX,DWORD PTR DS:[EAX+64]
00BF553A  XOR EDX,DWORD PTR DS:[EAX+58]
00BF553D  XOR EDX,DWORD PTR DS:[EAX+20]
00BF5540  XOR EDX,DWORD PTR DS:[ESI]
00BF5542  CMP DWORD PTR SS:[EBP+8],EDX
00BF5545  JE SHORT 00BF5565         //µÚ6¸öÌø
00BF5547  ADD ECX,0C
00BF554A  ADD ESI,4
00BF554D  CMP DWORD PTR DS:[ECX],EDI
00BF554F  JNZ SHORT 00BF5520       //µÚ7¸öÌø
00BF5551  PUSH DWORD PTR SS:[EBP+C]
00BF5554  PUSH DWORD PTR SS:[EBP+8]
00BF5557  CALL 00BF5397
00BF555C  POP ECX
00BF555D  POP ECX
00BF555E  POP EDI
00BF555F  POP ESI
00BF5560  POP EBX
00BF5561  POP EBP
00BF5562  RETN 8

ÉÏÃæÓÐ7¸öÌøת£¬¸ú×Ù¿´¿´ÊÇÄǸöÌøתÌøµ½ÆÆ»µÒýÈë±íµÄµØ·½¡£¸ú×Ù·¢ÏÖµÚ3¸öÌøתÈç¹û²»Ìø¾Í»áµ½ÆÆ»µÒýÈë±íµÄ´úÂë´¦¡£ÏÖÔÚÖ»Òª°ÑÕâ¸öÌøת¸Ä³ÉJMP¾Í¿ÉÒԱܿªÆÆ»µÒýÈë±íµÄ´úÂë¡£Õâ¸ö¾ÍÊÇmagicÌøתÁË¡£ºÃÏñÔÚArmadillos ÊÇÏàͬµÄ¡£
ºÃÁËÕÒµ½ÁËÕâ¸ö¹Ø¼üµÄmagicÌøת¾ÍÄÜÐÞ¸´È«²¿µÄÒýÈë±íÁË¡£
ÖØÐÂ×öÉÏÃæµÄ¹¤×÷£¬ÓÃmagicµÄµØÖ·×öÐÝÃߵĵØÖ·£¬¸½¼ÓÉϳÌÐòºó¸Ämagic µÄÌøתȻºóÔËÐоͻáÍ£ÔÚ×Ó½ø³ÌµÄOEP´¦£¬ÓÃImport REConstructorÐÞ¸´dumpµÄ³ÌÐò£¬×¢ÒâÒªµã£º
ÔÚImport REConstructorÖÐÌ
OEP£½Èë¿ÚµØÖ·£­400000
RVA£½ÒýÈë±íµÄ¿ªÊ¼µØÖ·£¨ÉÏÃæ˵¹ýÁË£©£­400000
SIZE£½ÒýÈë±íµÄ½áÊøµØÖ·£­¿ªÊ¼µØÖ·
±ÈÈçÎÒµÄÐÅÏ¢£º
OEP£½000251D0
RVA£½000280A0
SIZE£½00000444
×¢Ò⣡עÒ⣡עÒ⣡¨D¨D²»Òª°´IAT Autosearch Ö±½Ó°´Get Import»ñµÃÒýÈë±í£¬Èç¹ûÓдíÎóµÄ¾ÍÖ±½ÓCutËû Fix dump ÐÞ¸´dumpϵijÌÐò£¬ÔËÐÐÒ»ÏÂÊDz»ÊÇ»¹Õý³£ÁË¡£
ÓÉÓÚʱ¼ä¹Øϵ£¬ÎÒдµÃºÜ²Ö´Ù£¬¿ÉÄÜ´æÔÚÐí¶àµÄ´íÎóºÍ±íÊö²»ÕýÈ·µÄµØ·½¡£Çë´óϺÃÇÖ¸ÕýÁË£¡
ËäÊÇÒÀºù«»­µÄÆ°£¬ÇÒ»­µÄ²»ºÃ¡£µ«Ò²ÊÇÎÒµÄÐĵã¬ÎÒÏëѧϰÆäʵҲÊDz»¶ÏµÄÔÚ»­±ðÈËÒÑ»­ºÃµÄÆ°£¬Èç¹û»­µÄºÃÁ˾ÍÊÇ×Ô¼ºµÄÁË¡£
ÎÄÕÂËä´Ö²Ú£¬×ªÔØÇë±£Ö¤ËûµÄÍêÕûÐÔ¡£
¸Ðл¶þµãÐÖµÜÊÕ¼¯µÄ×ÊÁÏ£¡

                               fxyang                                  
                             2003.11.27Íí