最初由 yuhong 发布
可以告诉我怎样解决吗?先谢过!其他就可以dump,就是这个软件不行,晕,是不是做了手脚?不会吧。
用OD中载入程序,下硬件断点,he WaitForDebugEvent,F9运行,中断如下:
77E93A07 k> 55 push ebp <====中断在此处,删除断点
77E93A08 8BEC mov ebp,esp
77E93A0A 83EC 68 sub esp,68
77E93A0D 56 push esi
77E93A0E FF75 0C push dword ptr ss:[ebp+C]
Alt+F9返回,搜索常数FFFFFFF8,来到(004243D6处):
0042438A > \83BD D0F5FFFF>cmp dword ptr ss:[ebp-A30],0<====参考文章里提到的关键代码
00424391 . 0F8C A9020000 jl NOTEPAD.00424640<====跳转到00424640处,因此在00424640处下断点
00424397 . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
0042439D . 3B0D E4454500 cmp ecx,dword ptr ds:[4545E4] //[4545E4]为块的总个数,此处为5
004243A3 . 0F8D 97020000 jge NOTEPAD.00424640
004243A9 . 8B95 44F6FFFF mov edx,dword ptr ss:[ebp-9BC]
004243AF . 81E2 FF000000 and edx,0FF
004243B5 . 85D2 test edx,edx
004243B7 . 0F84 AD000000 je NOTEPAD.0042446A
004243BD . 6A 00 push 0
004243BF . 8BB5 D0F5FFFF mov esi,dword ptr ss:[ebp-A30]
004243C5 . C1E6 04 shl esi,4
004243C8 . 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]
004243CE . 25 07000080 and eax,80000007
004243D3 . 79 05 jns short NOTEPAD.004243DA
004243D5 . 48 dec eax
004243D6 . 83C8 F8 or eax,FFFFFFF8<=====搜索来到这里,向上看
004243D9 . 40 inc eax
004243DA > 33C9 xor ecx,ecx
004243DC . 8A88 802A4500 mov cl,byte ptr ds:[eax+452A80]
004243E2 . 8B95 D0F5FFFF mov edx,dword ptr ss:[ebp-A30]
004243E8 . 81E2 07000080 and edx,80000007
004243EE . 79 05 jns short NOTEPAD.004243F5
004243F0 . 4A dec edx
004243F1 . 83CA F8 or edx,FFFFFFF8
004243F4 . 42 inc edx
004243F5 > 33C0 xor eax,eax
004243F7 . 8A82 812A4500 mov al,byte ptr ds:[edx+452A81]
004243FD . 8B3C8D 60E244>mov edi,dword ptr ds:[ecx*4+44E260]
00424404 . 333C85 60E244>xor edi,dword ptr ds:[eax*4+44E260]
0042440B . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
00424411 . 81E1 07000080 and ecx,80000007
00424417 . 79 05 jns short NOTEPAD.0042441E
00424419 . 49 dec ecx
0042441A . 83C9 F8 or ecx,FFFFFFF8
0042441D . 41 inc ecx
0042441E > 33D2 xor edx,edx
00424420 . 8A91 822A4500 mov dl,byte ptr ds:[ecx+452A82]
00424426 . 333C95 60E244>xor edi,dword ptr ds:[edx*4+44E260]
0042442D . 8B85 D0F5FFFF mov eax,dword ptr ss:[ebp-A30]
00424433 . 99 cdq
00424434 . B9 1C000000 mov ecx,1C
00424439 . F7F9 idiv ecx
0042443B . 8BCA mov ecx,edx
0042443D . D3EF shr edi,cl
0042443F . 83E7 0F and edi,0F
00424442 . 03F7 add esi,edi
00424444 . 8B15 D4454500 mov edx,dword ptr ds:[4545D4]
0042444A . 8D04B2 lea eax,dword ptr ds:[edx+esi*4]
0042444D . 50 push eax
0042444E . 8B8D D0F5FFFF mov ecx,dword ptr ss:[ebp-A30]
00424454 . 51 push ecx
00424455 . E8 FF1F0000 call NOTEPAD.00426459
0042445A . 83C4 0C add esp,0C
0042445D . 25 FF000000 and eax,0FF<====从这里开始修改
00424462 . 85C0 test eax,eax
00424464 . 0F84 D6010000 je NOTEPAD.00424640
在0042438A处下 硬件执行 断点,F9运行到0042438A处,得到ebp-A30=12EB70,这样上述的修改地方修改为:
0042445D FF05 70EB1200 inc dword ptr ds:[12EB70]
00424463 90 mov dword ptr ds:[4545E4],1
00424464 ^ E9 21FFFFFF jmp NOTEPAD.0042438A
{到数据转存窗口,Ctrl-G:004545E4,用来观察004545E4和004545E8二处数据。其中004545E4单元为总块数;004545E8单元为已经解密的块数,如果解密块数>=23H,则会对第0块即00401000处代码实现加密并改变该块读写权限不能进行任何操作(GUARD),所以当004545E8
的值到了20h时就修改为0(也可以在21/22H时改,但不能超过23H). }
但我也遇过块数只有7的也会抓取不了,所以最好就使用
mov dword ptr ds:[4545E4],1
这句来改变