Armadillo标准加壳的程序的脱壳和引入表修复方案
2007-01-13 20:14:38 来源:WEB开发网核心提示: 00D093E3E8 F8C0FEFFCALL00CF54E000D093E88985 48F9FFFFMOVDWORD PTR SS:[EBP-6B8], EAX00D093EE83BD 48F9FFFF 0>CMPDWORD PTR SS:[EBP-6B8], 000D093F5
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
在第二行也有个[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回程序领空,把CF5513的74 3c改成eb 3c,按F9运行,程序运行后打开importREC,选中程序,入口填入59b0,-->IAT自动搜索-->获得输入信息",如果还有无效的大可放心的cut,因为它们本来就不是有用指针了(也可能是importREC把IAT的大小判断错了),.然后修复脱壳后的文件.OK,大功告成.
测试了下脱壳后的程序,运行正常,那个烦人的注册框没有,时间限制也注册了,别说30天,就是30年都没问题.
更多精彩
赞助商链接