首页
社区
课程
招聘
[原创]手脱PEX 0.99
发表于: 2010-9-5 12:08 8009

[原创]手脱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期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 1095
活跃值: (4177)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
2
消灭零回复啊
2010-9-8 08:39
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
谢谢分享。。。
2010-9-23 11:15
0
雪    币: 98
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好东西!学习中,还在消化!
2010-9-26 00:12
0
雪    币: 239
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
为什么要在命令: //右键查找命令cmp dword ptr [ecx], 0xA8C
这个地方下端点?
2011-1-11 15:36
0
游客
登录 | 注册 方可回帖
返回
//