看了一下, 好人做到底.
纯 OD , 不用任何插件
按 Shift+F9 会停在这里
0042E08C CC int3
0042E08D 90 nop
0042E08E 8BC0 mov eax, eax
0042E090 F9 stc
0042E091 90 nop
0042E092 8D045D 34120000 lea eax, [ebx*2+1234]
0042E099 F8 clc
0042E09A 90 nop
0042E09B C1EB 05 shr ebx, 5
0042E09E FC cld
0042E09F 90 nop
0042E0A0 C1C0 07 rol eax, 7
0042E0A3 90 nop
0042E0A4 90 nop
0042E0A5 33DB xor ebx, ebx
0042E0A7 F7F3 div ebx
0042E0A9 64:67:8F06 0000 pop dword ptr fs:[0]
0042E0AF 83C4 04 add esp, 4
将例外设定的 INT 3 打勾
此时 SEH 在 0042E0C5 (程序码我列在后面)
我不知你看程序码的能力为何, 大意为:
若是 INT 3 则 占用 Dr0~Dr3 , 值为 42E090'42E099'42E09E'42E0A3
若是 80000004 则 byte[0042E118] 加 1
若是 除零 , 则清除 Dr0~Dr3
你看作用全落在我上面列的程序码.
所以自从 0042E08C 的 INT 3 到 0042E0A7 的除零, 共会产生4次 80000004 中断
你在 0042E0A9 下软件断点, 按 Shift+F9 .. 一直到..停在 0042E0A9 的 软件断点
此时去掉软件断点.
设好 byte[0042E118] = 04
此时已过了硬断检查, 硬断已可正常使用.
记得设一个 he 404356 (OEP)
<SEH>
0042E0C5 8B4424 04 mov eax, [esp+4]
0042E0C9 8B4C24 0C mov ecx, [esp+C]
0042E0CD FF81 B8000000 inc dword ptr [ecx+B8]
0042E0D3 8B00 mov eax, [eax]
0042E0D5 3D 940000C0 cmp eax, C0000094
0042E0DA 75 24 jnz short 0042E100
0042E0DC FF81 B8000000 inc dword ptr [ecx+B8]
0042E0E2 33C0 xor eax, eax
0042E0E4 2141 04 and [ecx+4], eax
0042E0E7 2141 08 and [ecx+8], eax
0042E0EA 2141 0C and [ecx+C], eax
0042E0ED 2141 10 and [ecx+10], eax
0042E0F0 8161 14 F00FFFF>and dword ptr [ecx+14], FFFF0FF0
0042E0F7 8161 18 00DC000>and dword ptr [ecx+18], 0DC00
0042E0FE EB 60 jmp short 0042E160
0042E100 3D 04000080 cmp eax, 80000004
0042E105 74 0C je short 0042E113
0042E107 3D 03000080 cmp eax, 80000003
0042E10C 74 12 je short 0042E120
0042E10E 6A 01 push 1
0042E110 58 pop eax
0042E111 EB 4D jmp short 0042E160
0042E113 E8 01000000 call 0042E119
0042E118 db 00
0042E119 58 pop eax
0042E11A FE00 inc byte ptr [eax]
0042E11C 2BC0 sub eax, eax
0042E11E EB 40 jmp short 0042E160
0042E120 8B81 B4000000 mov eax, [ecx+B4]
0042E126 8D40 24 lea eax, [eax+24]
0042E129 8941 04 mov [ecx+4], eax
0042E12C 8B81 B4000000 mov eax, [ecx+B4]
0042E132 8D40 1F lea eax, [eax+1F]
0042E135 8941 08 mov [ecx+8], eax
0042E138 8B81 B4000000 mov eax, [ecx+B4]
0042E13E 8D40 1A lea eax, [eax+1A]
0042E141 8941 0C mov [ecx+C], eax
0042E144 8B81 B4000000 mov eax, [ecx+B4]
0042E14A 8D40 11 lea eax, [eax+11]
0042E14D 8941 10 mov [ecx+10], eax
0042E150 33C0 xor eax, eax
0042E152 8161 14 F00FFFF>and dword ptr [ecx+14], FFFF0FF0
0042E159 C741 18 5501000>mov dword ptr [ecx+18], 155
0042E160 C3 retn
后记
1. 到达 OEP 后, 可能本身有防调试器, 因为程序会结束, 你自己找原因.
2. Plugin 留个 CommandBar 吧. 怪不好用的.