小生我怕怕 发表于 2010-9-5 12:02

手脱PEX 0.99

本帖最后由 小生我怕怕 于 2010-9-5 12:18 编辑


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
00482107    0000            add byte ptr , al
00482109- E9 5D81EDD5   jmp D635A26B
0048210E    2240 00         and al, byte ptr
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 , 0xA8C
009900F4    0F84 C5020000   je 009903BF               //找到之后下断,然后运行
009900FA    E8 01000000   call 00990100
009900FF    6959 DF BD6C294>imul ebx, dword ptr , 0x40296C>
00990106    00DF            add bh, bl
00990108    AD            lods dword ptr
00990109    6C            ins byte ptr es:, dx
0099010A    2940 00         sub dword ptr , eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
00990231    8139 8C0A0000   cmp dword ptr , 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
00990249    0100            add dword ptr , eax
0099024B    0000            add byte ptr , 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    //这里完成对指针的加密
00990278    6A 04         push 0x4                           //取下一个指针地址从而进行循环加密
0099027A    59            pop ecx
0099027B    8A16            mov dl, byte ptr
0099027D    3810            cmp byte ptr , dl
━━━━━━━━━━━━━━━━━━━━━━━━━━
009902FF    8907            mov dword ptr , eax               ; shlwapi.SHDeleteKeyA
00990301    8385 142A4000 0>add dword ptr , 0x4         //上面完成我们正确指针的赋值
00990308    61            popad                                     //直接运行吧
00990309    80BD 1C2A4000 0>cmp byte ptr , 0x0
00990310    75 18         jnz short 0099032A
━━━━━━━━━━━━━━━━━━━━━━━━━━
00482020    E8 15000000   call 0048203A            //到达这里我们取消我们的硬件断点
00482025    E8 E80F0000   call 00483012            //开始一路F7的狂奔
0048202A    009A E8090000   add byte ptr , 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直接可以完全修复指针
由于本人初学写脚本,脚本写得比较挫,高手别见笑



var addr
var GetProcAddress
sto
sto
mov addr,esp
bphws addr,"r"
gpa "GetProcAddress", "kernel32.dll"
bp $RESULT
run
BC $RESULT
rtu
find eip, #81398C0A00000F83C2000000#
bp $RESULT
esto
bc $RESULT
repl eip, #0F83C2000000#, #E9C300000090#, 10
RUN
bphwc $RESULT
STI
sto
sto
sto
sto
STI
sto
sto
sto
sto
STI
sto
sto
sto
STI
sto
sto
sto
sto
sto
sto
cmt eip,"This is the OEP!"
MSG "感谢使用此脚本,现在可以脱壳了"
ret



附件中包含有脱壳程序,有壳程序,脱壳脚本以及脱文

bozai120 发表于 2010-9-5 12:04

生哥发帖!!!威力无边!!!前排插入!!

小糊涂虫 发表于 2010-9-5 12:15

支持一下生哥。。。。:lol

yaojiqiang 发表于 2010-9-5 12:17

支持小生哥哥!

qing、 发表于 2010-9-5 12:24

前排留名。

z26650 发表于 2010-9-5 12:25

严重支持啊。下下来练习一下:lol

tuimaochang 发表于 2010-9-5 12:27

本帖最后由 tuimaochang 于 2010-9-5 13:09 编辑

下了看看,学习下,谢谢楼主
好吧,我学着脱了下。痛苦的发现小生连续两行的注释其实是一句话……
走了好多弯路啊……再次感谢

や 陌恋 发表于 2010-9-5 12:37

老公的每一次发帖都必将引起论坛一阵骚动...我嫉妒...

panpan 发表于 2010-9-5 12:51

支持下。。学习学习!

小Z 发表于 2010-9-5 13:07

学习,哈哈
页: [1] 2 3
查看完整版本: 手脱PEX 0.99