|
文是由ximo大牛的指导下完成,学到了很多东西,感谢ximo,膜拜ximo
脱壳目标:TPPpack加过的记事本(TPPpack主程序见附件,在tut发现的..)
1.SEH + AntiDRx01013010 > $ E8 00000000 call 01013015 ; EP
01013015 $ 5D pop ebp
01013016 . 81ED F58F4000 sub ebp, 0x408FF5
0101301C . 60 pushad
0101301D . 33F6 xor esi, esi ; ESI清零
0101301F . E8 11000000 call <SEH_1>
00495024 8B6424 08 mov esp, dword ptr [esp+0x8] ; Drx清零
复制代码01013035 > $ 64:FF35 00000000 push dword ptr fs:[0]
0101303C . 64:8925 00000000 mov dword ptr fs:[0], esp
01013043 . AD lods dword ptr [esi] ; 造成第一次内存访问异常.Dr7清零
01013044 . 90 nop
01013024 . 8B6424 08 mov esp, dword ptr [esp+0x8] ; 异常出口
01013028 . 64:8F05 00000000 pop dword ptr fs:[0]
0101302F . 58 pop eax
01013030 . 61 popad
01013031 . EB 13 jmp short 01013046
01013046 ? 60 pushad
01013047 ? 33FF xor edi, edi ; edi清零
01013049 . E8 00000000 call <SEH_2>
0101304E >/$ 830424 10 add dword ptr [esp], 0x10
01013052 |. 64:8B07 mov eax, dword ptr fs:[edi]
01013055 |. 50 push eax
01013056 |. 64:8927 mov dword ptr fs:[edi], esp
01013059 |. C607 00 mov byte ptr [edi], 0x0 ; 再次造成内存访问异常.Dr7清零
0101305C |. 90 nop
0101305D |. 90 nop
0101305E |. 8B7C24 0C mov edi, dword ptr [esp+0xC] ; DRx全部清零
01013062 |. 33C0 xor eax, eax ; eax清零
01013064 |. 8947 04 mov dword ptr [edi+0x4], eax
01013067 |. 8947 08 mov dword ptr [edi+0x8], eax
0101306A |. 8947 0C mov dword ptr [edi+0xC], eax
0101306D |. 8947 10 mov dword ptr [edi+0x10], eax
01013070 |. 8387 B8000000 27 add dword ptr [edi+0xB8], 0x27
01013077 |. 33C0 xor eax, eax
01013079 \. C3 retn ; 返回到ntdll.7C9232A8
0101307A 1F db 1F
复制代码Dr0,Dr1,Dr2,Dr3是存放中断的地址,Dr6,Dr7是控制状态的(比如硬件写入断点还是执行等等),被清零了,你下的硬件断点信息全被清掉了,因此下的硬件断点也就失效了
2.Stolen code
bp VirtualProtect 解码后返回
alt+m 在x001000下内存访问断点 shift+f9就到fake oep了01007568 /$ 68 BA750001 push 010075BA ; 断在这里
复制代码向上一拉,全是00... |
|