realright 发表于 2010-3-13 16:23

真正的菜鸟的第一脱——UPX 0.89.6 - 1.02 / 1.05 - 1.24

本帖最后由 realright 于 2010-3-13 16:45 编辑

真正的菜鸟的第一脱——UPX 0.89.6 - 1.02 / 1.05 - 1.24

别的不多说,我菜,你们想不到的菜:
汇编,什么破代码,我不懂;
VB, 好吧我知道,dim啥啥,其他一遍闪;
C,知道一个for,一个choose,一个while,其他同上;
然后,其他就是白痴一个了!

但是,这个不妨碍,我学!脱吧,壳嘛,大不了单步!

今天我来脱一个,这是看了一天的论坛,按大侠们教的!

工具:OllyICE,peid,ImpREC,upx加壳软件
软件:uxp 加壳的 notepad.exe
文件名:upx_jsb   jsb(就是记事本的意思)

1 查壳
peid拿来:


2 脱壳
od载入,显示如下代码:
01014260 > $60            pushad                                              //f8一路往下走
01014261   .BE 00000101   mov   esi, 01010000
01014266   .8DBE 0010FFFF lea   edi, dword ptr
0101426C   .57            push    edi
0101426D   .83CD FF       or      ebp, FFFFFFFF
01014270   .EB 10         jmp   short 01014282                        //往下跳的,允许了
01014272      90            nop
01014273      90            nop
01014274      90            nop
01014275      90            nop
01014276      90            nop
01014277      90            nop
01014278   >8A06          mov   al, byte ptr
0101427A   .46            inc   esi
0101427B   .8807          mov   byte ptr , al
0101427D   .47            inc   edi
0101427E   >01DB          add   ebx, ebx
01014280   .75 07         jnz   short 01014289
01014282   >8B1E          mov   ebx, dword ptr                //跳到这,继续f8
01014284   .83EE FC       sub   esi, -4
01014287   .11DB          adc   ebx, ebx
01014289   >^ 72 ED         jb      short 01014278    //到这里,这个也是跳,我不懂,但跑几次后,发现老是往上回 到01014278,那就f4跳过
0101428B   .B8 01000000   mov   eax, 1
01014290   >01DB          add   ebx, ebx
01014292   .75 07         jnz   short 0101429B                                  //往下,允许了
01014294   .8B1E          mov   ebx, dword ptr
01014296   .83EE FC       sub   esi, -4
01014299   .11DB          adc   ebx, ebx
0101429B   >11C0          adc   eax, eax
0101429D   .01DB          add   ebx, ebx
0101429F   .^ 73 EF         jnb   short 01014290                               //没有实现跳,继续
010142A1   .75 09         jnz   short 010142AC                                  //往下,好继续
010142A3   .8B1E          mov   ebx, dword ptr
010142A5   .83EE FC       sub   esi, -4
010142A8   .11DB          adc   ebx, ebx
010142AA   .^ 73 E4         jnb   short 01014290                  
010142AC   >31C9          xor   ecx, ecx
010142AE   .83E8 03       sub   eax, 3
010142B1   .72 0D         jb      short 010142C0                              //往下的
010142B3   .C1E0 08       shl   eax, 8
010142B6   .8A06          mov   al, byte ptr
010142B8   .46            inc   esi
010142B9   .83F0 FF       xor   eax, FFFFFFFF
010142BC   .74 74         je      short 01014332
010142BE   .89C5          mov   ebp, eax
010142C0   >01DB          add   ebx, ebx
010142C2   .75 07         jnz   short 010142CB                         //往下的
010142C4   .8B1E          mov   ebx, dword ptr
010142C6   .83EE FC       sub   esi, -4
010142C9   .11DB          adc   ebx, ebx
010142CB   >11C9          adc   ecx, ecx                                    //到这了
010142CD   .01DB          add   ebx, ebx
010142CF   .75 07         jnz   short 010142D8                        //又是往下
010142D1   .8B1E          mov   ebx, dword ptr
010142D3   .83EE FC       sub   esi, -4
010142D6   .11DB          adc   ebx, ebx
010142D8   >11C9          adc   ecx, ecx                                    //到这了,继续
010142DA   .75 20         jnz   short 010142FC                           //这个跳没有实现,继续
010142DC   .41            inc   ecx
010142DD   >01DB          add   ebx, ebx
010142DF   .75 07         jnz   short 010142E8                              //往下,继续
010142E1   .8B1E          mov   ebx, dword ptr
010142E3   .83EE FC       sub   esi, -4
010142E6   .11DB          adc   ebx, ebx
010142E8   >11C9          adc   ecx, ecx                                           //到这了
010142EA   .01DB          add   ebx, ebx
010142EC   .^ 73 EF         jnb   short 010142DD                              //这个往上,f4过去往下走
010142EE   .75 09         jnz   short 010142F9                                  //往下的,走
010142F0   .8B1E          mov   ebx, dword ptr
010142F2   .83EE FC       sub   esi, -4
010142F5   .11DB          adc   ebx, ebx
010142F7   .^ 73 E4         jnb   short 010142DD
010142F9   >83C1 02       add   ecx, 2                                          //到这,走
010142FC   >81FD 00F3FFFF cmp   ebp, -0D00
01014302   .83D1 01       adc   ecx, 1
01014305   .8D142F      lea   edx, dword ptr
01014308   .83FD FC       cmp   ebp, -4
0101430B   .76 0F         jbe   short 0101431C                                  //没有跳,走下去
0101430D   > /8A02          mov   al, byte ptr
0101430F   . |42            inc   edx
01014310   . |8807          mov   byte ptr , al
01014312   . |47            inc   edi
01014313   . |49            dec   ecx
01014314   .^\75 F7         jnz   short 0101430D                     //到这,要跳回去
01014316   .^ E9 63FFFFFF   jmp   0101427E                           //这个也是要回去,全部f4过去
0101431B      90            nop
0101431C   >8B02          mov   eax, dword ptr             //从这个f8下去
0101431E   .83C2 04       add   edx, 4
01014321   .8907          mov   dword ptr , eax
01014323   .83C7 04       add   edi, 4
01014326   .83E9 04       sub   ecx, 4
01014329   .^ 77 F1         ja      short 0101431C                        //也没有实现跳,走吧往下
0101432B   .01CF          add   edi, ecx
0101432D   .^ E9 4CFFFFFF   jmp   0101427E                           //到这,要往回跳,f4过去
01014332   >5E            pop   esi
01014333   .89F7          mov   edi, esi
01014335   .B9 32010000   mov   ecx, 132
0101433A   >8A07          mov   al, byte ptr
0101433C   .47            inc   edi
0101433D   .2C E8         sub   al, 0E8
0101433F   >3C 01         cmp   al, 1
01014341   .^ 77 F7         ja      short 0101433A                         //这是要往上,不让你跳
01014343   .803F 01       cmp   byte ptr , 1
01014346   .^ 75 F2         jnz   short 0101433A                        //这个也想回去,照旧不让跳
01014348   .8B07          mov   eax, dword ptr
0101434A   .8A5F 04       mov   bl, byte ptr
0101434D   .66:C1E8 08    shr   ax, 8
01014351   .C1C0 10       rol   eax, 10
01014354   .86C4          xchg    ah, al
01014356   .29F8          sub   eax, edi
01014358   .80EB E8       sub   bl, 0E8
0101435B   .01F0          add   eax, esi
0101435D   .8907          mov   dword ptr , eax
0101435F   .83C7 05       add   edi, 5
01014362   .89D8          mov   eax, ebx
01014364   .^ E2 D9         loopd   short 0101433F                           //一路走到这,好像是个循环,不能回去,f4过掉
01014366   .8DBE 00200100 lea   edi, dword ptr
0101436C   >8B07          mov   eax, dword ptr
0101436E   .09C0          or      eax, eax
01014370   .74 3C         je      short 010143AE                               //跳转没有实现,继续走
01014372   .8B5F 04       mov   ebx, dword ptr
01014375   .8D8430 14AE01>lea   eax, dword ptr
0101437C   .01F3          add   ebx, esi
0101437E   .50            push    eax
0101437F   .83C7 08       add   edi, 8
01014382   .FF96 DCAE0100 call    dword ptr       //走到这,call啥,好像是个loadlibarya啥玩意,朦朦胧胧地觉得这就可以
                                                       //下断点的地方,什么原理嘛?嘛玩意嘛?反正都不懂,随便你了,走吧往下

01014388   .95            xchg    eax, ebp
01014389   >8A07          mov   al, byte ptr
0101438B   .47            inc   edi
0101438C   .08C0          or      al, al
0101438E   .^ 74 DC         je      short 0101436C                        //往上跳的,没有实现,下走
01014390   .89F9          mov   ecx, edi
01014392   .57            push    edi
01014393   .48            dec   eax
01014394   .F2:AE         repne   scas byte ptr es:
01014396   .55            push    ebp
01014397   .FF96 E0AE0100 call    dword ptr    //又是call,这玩意尽欺负人,下吧--!(getprocaddress,下断点用的?
                                                               //大牛们老提到这个的,郁闷,这就是什么都不懂的坏处!杯具…)
0101439D   .09C0          or      eax, eax
0101439F   .74 07         je      short 010143A8                      //没有实现,下
010143A1   .8903          mov   dword ptr , eax
010143A3   .83C3 04       add   ebx, 4
010143A6   .^ EB E1         jmp   short 01014389//这个往上,不让你回。但是,我f4不管用了,它直接就运行了,郁闷!
                                                      //重新上述步骤,来到此处!往下一看,嘿有popad,这是什么出口,
                                                      //说是到这了,就是壳解压完了!我f4直接到那里去算了
010143A8   >FF96 E4AE0100 call    dword ptr
010143AE   >61            popad                                                //f4到这里了,走,下了
010143AF   .- E9 E92FFFFF   jmp   0100739D                   //跳很远的,貌似就是他们所说的什么入口点前的跳入了,跟进!结果如下:



大跳后的代码:
0100739D    6A 70         push    70                            //难道这里就可以新建eip?不懂,试试吧!结果出现提示:可疑的什么玩意,不懂,
                                                                            //继续我的事!插件dump,什么不改,确认,保存为1.exe
                                                                     //好了,这回我们去看看什么玩意吧,那个1.exe !!!!希望可以
0100739F    68 98180001   push    01001898
010073A4    E8 BF010000   call    01007568
010073A9    33DB            xor   ebx, ebx
010073AB    53            push    ebx
010073AC    8B3D CC100001   mov   edi, dword ptr          ; kernel32.GetModuleHandleA
010073B2    FFD7            call    edi
010073B4    66:8138 4D5A    cmp   word ptr , 5A4D
010073B9    75 1F         jnz   short 010073DA

桌面双击1.exe,哇,我们熟悉的记事本出来了!
peid查壳一下:什么深度、核心啊,都是一样的结果,看来我们成功了!呵呵


什么深度、核心啊,都是一样的结果,看来我们成功了!呵呵!
可以啊,我们菜鸟什么都不懂的,也可以啊!

可惜,后来看了一下,都是upx是最简单的,难怪了!嗯,算了,毕竟咱也菜,才第一天,就不苛刻自己了!


这个以下是加过壳的和脱过壳的东东,要的话自己下!后缀自己改一下,我是为了方便上传加了后缀的!

zhourongjun1227 发表于 2014-3-22 11:54

简单的按照教程操作就可以了

Carlton 发表于 2014-3-20 12:58

ESP定律不好使
楼主你这个方法也不行啊
jmp大跳 跳到的不是入口

ll2323001 发表于 2010-3-13 17:13

定一下了,哈哈,都是新手哦!

654902893 发表于 2010-3-13 17:21

学习学习,都是新手哦,呵呵:hug:

疯子韩 发表于 2010-3-17 22:42

其实UPX直接往下找到空代码上面就有一个远跳,F4,直接跟进去就是OEP了,呵呵,我也菜菜

jjzb2003 发表于 2010-3-18 10:00


谢谢提供,我这么好的方法!

一丁 发表于 2010-3-18 11:32

好 方法。。顶。。

秋风夜雪 发表于 2010-3-18 11:35

新手学习!!

nuojiya8 发表于 2010-3-18 13:42

比我强多了。

zhou_wei 发表于 2010-3-18 23:58

我也来学习了.

zhlmhy 发表于 2010-3-19 00:35

看不懂啊.. 一直在跳.怎么没有注释啊
页: [1] 2 3 4 5 6 7 8
查看完整版本: 真正的菜鸟的第一脱——UPX 0.89.6 - 1.02 / 1.05 - 1.24