-
-
[原创]手脱PEX 0.99
-
发表于:
2010-9-5 12:08
8009
-
00482000 > /E9 F5000000 jmp 004820FA //OD载入程序
00482005 |0D 0AC4C4C4 or eax, 0xC4C4C40A //F8
0048200A |C4C4 les eax, esp ; 非法使用寄存器
0048200C |C4C4 les eax, esp ; 非法使用寄存器
0048200E |C4C4 les eax, esp ; 非法使用寄存器
━━━━━━━━━━━━━━━━━━━━━━━━━━
004820FA 60 pushad
004820FB E8 01000000 call 00482101 //这里执行ESP定律
00482100 E8 83C404E8 call E84CE588 //同时查找GetProcAddress,然后下段
00482105 0100 add dword ptr [eax], eax
00482107 0000 add byte ptr [eax], al
00482109 - E9 5D81EDD5 jmp D635A26B
0048210E 2240 00 and al, byte ptr [eax]
00482111 E8 06020000 call 0048231C
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C80ADB0 > 8BFF mov edi, edi //运行一次之后停下之后,ait+f9返回
7C80ADB2 55 push ebp
7C80ADB3 8BEC mov ebp, esp
7C80ADB5 51 push ecx
7C80ADB6 51 push ecx
7C80ADB7 53 push ebx
7C80ADB8 57 push edi
━━━━━━━━━━━━━━━━━━━━━━━━━━
009900F2 85C0 test eax, eax //右键查找命令cmp dword ptr [ecx], 0xA8C
009900F4 0F84 C5020000 je 009903BF //找到之后下断,然后运行
009900FA E8 01000000 call 00990100
009900FF 6959 DF BD6C294>imul ebx, dword ptr [ecx-0x21], 0x40296C>
00990106 00DF add bh, bl
00990108 AD lods dword ptr [esi]
00990109 6C ins byte ptr es:[edi], dx
0099010A 2940 00 sub dword ptr [eax], eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
00990231 8139 8C0A0000 cmp dword ptr [ecx], 0xA8C
00990237 0F83 C2000000 jnb 009902FF //这里就是我们的magic jump
0099023D 53 push ebx //将上面的jnb修改为jmp即可处理掉所有的加密指针
0099023E E8 01000000 call 00990244 //具体加密如下
00990243 8D83 C40457E8 lea eax, dword ptr [ebx-0x17A8FB3C]
00990249 0100 add dword ptr [eax], eax
0099024B 0000 add byte ptr [eax], al
━━━━━━━━━━━━━━━━━━━━━━━━━━
00990259 80FA 5F cmp dl, 0x5F //这里是判断当前地址所属指针属于那个模块,从而判断是否加密
0099025C 76 3A jbe short 00990298
0099025E 80FA 6A cmp dl, 0x6A
00990261 74 39 je short 0099029C
00990263 80FA 68 cmp dl, 0x68
00990266 74 38 je short 009902A0
00990268 80FA B0 cmp dl, 0xB0
0099026B 72 05 jb short 00990272
0099026D 80FA B7 cmp dl, 0xB7
00990270 76 2A jbe short 0099029C
00990272 8DB5 1D2A4000 lea esi, dword ptr [ebp+0x402A1D] //这里完成对指针的加密
00990278 6A 04 push 0x4 //取下一个指针地址从而进行循环加密
0099027A 59 pop ecx
0099027B 8A16 mov dl, byte ptr [esi]
0099027D 3810 cmp byte ptr [eax], dl
━━━━━━━━━━━━━━━━━━━━━━━━━━
009902FF 8907 mov dword ptr [edi], eax ; shlwapi.SHDeleteKeyA
00990301 8385 142A4000 0>add dword ptr [ebp+0x402A14], 0x4 //上面完成我们正确指针的赋值
00990308 61 popad //直接运行吧
00990309 80BD 1C2A4000 0>cmp byte ptr [ebp+0x402A1C], 0x0
00990310 75 18 jnz short 0099032A
━━━━━━━━━━━━━━━━━━━━━━━━━━
00482020 E8 15000000 call 0048203A //到达这里我们取消我们的硬件断点
00482025 E8 E80F0000 call 00483012 //开始一路F7的狂奔
0048202A 009A E8090000 add byte ptr [edx+0x9E8], bl
00482030 00E9 add cl, ch
00482032 68 571E4100 push 00411E57
00482037 EB 01 jmp short 0048203A
━━━━━━━━━━━━━━━━━━━━━━━━━━
00482032 68 571E4100 push 00411E57 //这里压入OEP地址
00482037 EB 01 jmp short 0048203A
00482039 C7 ??? ; 未知命令
0048203A 58 pop eax
0048203B 40 inc eax //这里将压入的OEP加1得到真实的OEP
0048203C 50 push eax //在次压入OEP
0048203D C3 retn //飞向我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
这个壳无聊时练练手不错,指针可以不处理magic jump,直接用importrce的修复等级1直接可以完全修复指针
由于本人初学写脚本,脚本写得比较挫,高手别见笑
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)