真正的菜鸟的第一脱——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是最简单的,难怪了!嗯,算了,毕竟咱也菜,才第一天,就不苛刻自己了!
这个以下是加过壳的和脱过壳的东东,要的话自己下!后缀自己改一下,我是为了方便上传加了后缀的!
简单的按照教程操作就可以了 ESP定律不好使
楼主你这个方法也不行啊
jmp大跳 跳到的不是入口
定一下了,哈哈,都是新手哦! 学习学习,都是新手哦,呵呵:hug: 其实UPX直接往下找到空代码上面就有一个远跳,F4,直接跟进去就是OEP了,呵呵,我也菜菜
谢谢提供,我这么好的方法!
好 方法。。顶。。 新手学习!! 比我强多了。 我也来学习了. 看不懂啊.. 一直在跳.怎么没有注释啊