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年都没问题.
最新评论