加壳脱壳工具:Armadillo标准加壳的程序的脱壳和引入表修复方案

  用过ARMADILLO人都知道,用它加壳有两种方式,是使用COPYMEMII,是标准加壳.用COPYMEMII般可用DILLODUMP脱(当然也有时脱不了),而用标准加壳用DILLODUMP是脱不了,这是DILLODUMP中介绍说明,我们来看看: 

  NOTE: This _disibledevent=>0012DB30 000CB000 |Size = CB000 (831488.) 
0012DB34 00000004 |NewProtect = PAGE_READWRITE 
0012DB38 0012F034 pOldProtect = 0012F034  它将往401000也就是IAT所在地方写入信息:这是再按下F9,又停下来,D 401000,我们可看到,IAT所在位置已经写入了东西,还不是dll地址,还记得那个无效指针地址吗:401030,我们清掉断点,然后在在内存定位到401030处,"右键-->po-->hardware on write-->dword",然后按F9运行,停了下来: 

00D0942F  8B85 5CFBFFFF MOV  EAX, DWORD PTR SS:[EBP-4A4] 
00D09435  8B8D 48F9FFFF MOV  ECX, DWORD PTR SS:[EBP-6B8] 
00D0943B  8908      MOV  DWORD PTR DS:[EAX], ECX 
00D0943D  8B85 5CFBFFFF MOV  EAX, DWORD PTR SS:[EBP-4A4]   ; 停在这 
00D09443  83C0 04    ADD  EAX, 4 
00D09446  8985 5CFBFFFF MOV  DWORD PTR SS:[EBP-4A4], EAX 
00D0944C ^ E9 78FEFFFF  JMP  00D092C9
  看到上述 2行:MOV ECX,DWORD PRT [EBP-6B8],我们再往上找几行可看到这个语句: 

00D093E3  E8 F8C0FEFF  CALL  00CF54E0 
00D093E8  8985 48F9FFFF MOV  DWORD PTR SS:[EBP-6B8], EAX 
00D093EE  83BD 48F9FFFF 0>CMP  DWORD PTR SS:[EBP-6B8], 0 
00D093F5  75 38     JNZ  SHORT 00D0942F
  在第 2行也有个[EBP-6B8],注意前面这个CALL,我们去看看 

00CF54E0  55       PUSH  EBP 
00CF54E1  8BEC      MOV  EBP, ESP 
00CF54E3  53       PUSH  EBX 
00CF54E4  56       PUSH  ESI 
00CF54E5  57       PUSH  EDI 
00CF54E6  33FF      XOR  EDI, EDI 
00CF54E8  33DB      XOR  EBX, EBX 
00CF54EA  66:F745 0E FFFF TEST  WORD PTR SS:[EBP+E], 0FFFF 
00CF54F0  75 03     JNZ  SHORT 00CF54F5 
00CF54F2  8B5D 0C    MOV  EBX, DWORD PTR SS:[EBP+C] 
00CF54F5  57       PUSH  EDI 
00CF54F6  FF15 A430D100 CALL  DWORD PTR DS:[D130A4]      ; kernel32.GetModuleHandleA 
00CF54FC  3945 08    CMP  DWORD PTR SS:[EBP+8], EAX 
00CF54FF  75 07     JNZ  SHORT 00CF5508 
00CF5501  BE C053D100  MOV  ESI, 0D153C0 
00CF5506  EB 60     JMP  SHORT 00CF5568 
00CF5508  393D 9859D100 CMP  DWORD PTR DS:[D15998], EDI 
00CF550E  B9 9859D100  MOV  ECX, 0D15998 
00CF5513  74 3C     JE   SHORT 00CF5551 
00CF5515  8B35 B8B1D100 MOV  ESI, DWORD PTR DS:[D1B1B8] 
00CF551B  A1 CCEED100  MOV  EAX, DWORD PTR DS:[D1EECC] 
00CF5520  F641 08 01   TEST  BYTE PTR DS:[ECX+8], 1 
00CF5524  74 0E     JE   SHORT 00CF5534 
00CF5526  8B50 70    MOV  EDX, DWORD PTR DS:[EAX+70] 
00CF5529  3350 60    XOR  EDX, DWORD PTR DS:[EAX+60] 
00CF552C  3350 3C    XOR  EDX, DWORD PTR DS:[EAX+3C] 
00CF552F  F6C2 80    TEST  DL, 80 
00CF5532  75 13     JNZ  SHORT 00CF5547 
00CF5534  8B50 70    MOV  EDX, DWORD PTR DS:[EAX+70] 
00CF5537  3350 64    XOR  EDX, DWORD PTR DS:[EAX+64] 
00CF553A  3350 58    XOR  EDX, DWORD PTR DS:[EAX+58] 
00CF553D  3350 20    XOR  EDX, DWORD PTR DS:[EAX+20] 
00CF5540  3316      XOR  EDX, DWORD PTR DS:[ESI] 
00CF5542  3955 08    CMP  DWORD PTR SS:[EBP+8], EDX 
00CF5545  74 1E     JE   SHORT 00CF5565 
00CF5547  83C1 0C    ADD  ECX, 0C 
00CF554A  83C6 04    ADD  ESI, 4 
00CF554D  3939      CMP  DWORD PTR DS:[ECX], EDI 
00CF554F ^ 75 CF     JNZ  SHORT 00CF5520 
00CF5551  FF75 0C    PUSH  DWORD PTR SS:[EBP+C]
  这里面有几个跳转,其中最后个CF554F是往上跳.我们看个就可发现: 



  00CF5513  74 3C     JE   SHORT 00CF5551,这个跳正好可跳出这个循环.只要改这个跳,就不会破坏引入表了. 

  再次重新载入,BP VirtualProtect,出现注册框后OK,再断下来,这时清除断点(包括硬件断点),CTRL+F9回领空,把CF551374 3c改成eb 3c,按F9运行,运行后打开importREC,选中,入口填入59b0,-->IAT自动搜索-->获得输入信息",如果还有无效大可放心cut,它们本来就不是有用指针了(也可能是importREC把IAT大小判断错了),.然后修复脱壳后文件.OK,大功告成. 

  测试了下脱壳后,运行正常,那个烦人注册框没有,时间限制也注册了,别说30天,就是30年都没问题.



Tags:  加壳工具 armadillo脱壳机 armadillo脱壳 加壳脱壳工具

延伸阅读

最新评论

发表评论