首页
社区
课程
招聘
[分享]菜鸟脱壳成长历程
发表于: 2006-9-30 01:16 7173

[分享]菜鸟脱壳成长历程

2006-9-30 01:16
7173
其实很多人如果有机会的话就可以成为高手,但是意志不坚定或者种种因素困扰都让一个菜鸟永远保持这个没前途的状态.翻一下帖子或找一下,发觉万事开头难.所以,刚从那个阶段过来,就想给菜鸟同仁们分享一下,也许很多东西高手会觉得完全没有必要去讲,但是菜鸟是真的真的不明白....

孔明读书所谓"不求甚解"我们一开始学脱壳甚至是学破解也是如此,不要刨根问底,知其然就行了,等你慢慢积累经验你自己会知其所以然,即使还没有找到答案,你至少已经可以没有障碍地阅读高手们写给新手的教程了.

首先选择好工具,从调试区下载已经集成插件的 OllyICE(工具的说明容易看懂,不懂的可以在运用时体会,不赘述)

最初级的开始,三下五除二解决压缩壳:
压缩壳只是为了让可执行文件变得更小,所以都不架设障碍.最简单的upx的入口一个pushad,对应一个popad你只要Ctrl+F搜索popad就可以找到oep

0046AD56    61              popad                   ;直接查到
0046AD57  ^ E9 98CBFEFF     jmp     004578F4        ;看到了,跨段跳
0046AD5C  ^ 74 AD           je      short 0046AD0B
0046AD5E    46              inc     esi

接着在popad那行F4(运行到该位置),然后F8(单步运行)就跳到了OEP

004578F4    55              push    ebp
004578F5    8BEC            mov     ebp, esp
004578F7    83C4 F4         add     esp, -0C
004578FA    B8 AC774500     mov     eax, 004577AC

到了OEP就可以使用Ollydump插件dump出来.开始不管什么,默认选项就可以.

这种方法在很少的时候可以奏效,适用范围很小,只是熟悉一下工具而已.常用的办法当然是下断点.

使用命令行插件运行
bp GetProcAddress
或者 bp LoadLibraryA
或者 bp GetModuleHandleA
这三个是下断点的重要函数,有时候并不是每一个都奏效,所以如果这个不行就换一个.Ctrl+N查看当前有一些什么可用函数,未必都包含,没有的就不选择作为断点了.当然,对于初学者来说,选择什么函数是个问题,下完断点如何不迷失在系统代码又是一个问题.一般的压缩壳如果断在系统代码,可以用ALT+F9返回用户代码,某些时候一返回程序就运行了,那么说明你最好换个断点.以后理解深刻了,再去体会到底为什么会这样.这种方法要学,但是如果你只是想脱一些简单的壳,当然有更加简单的方法.
跟踪不管成功与否,重新载入程序的时候按alt+B删除上次设的断点.这是菜鸟经常忽略的事情.

ESP定律
下面虚线中间部分可以不去了解,你只要知道,很多软件只需要做如下动作,入口位置观察ESP,然后dd (ESP-4),下面的例子也就是12ffc0,接着在ollydbg里面对这个位置右键->硬件访问->word这么下断,你狂按F9,程序运行时候就会停在OEP的下一行.按一下CTRL+↑就看到OEP了.这个定律在很多加密壳里照样用得很好,等你跳过了SEH暗桩躲过了各种检测,剩下一路平坦的时候就可以用一下.
对了,清除硬件断点的办法,ollydbg里面调试->硬件断点,删除就可以了,一般用完要删掉,养成习惯.

------------------------------------------------------------
简单说就是堆栈平衡,形象一点说,你进澡堂洗澡,一开始寄放了一些什么在保管员那里,不管你进去多久是不是换了衣服甚至在里面打了手机,等你出来的时候你取得的东西和你进去时候是一样的.程序就是如此,里面的过程不论,初始状态一个pushad寄存了,那么等最后要一个popad出来,出来的时候自然ESP一样的.

我借用weiyi75[Dfcg]的菜鸟破解教程中第三个例子,是aspack加壳的.
这是入口点的寄存器状态
EAX 00000000
ECX 0012FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFD6000
ESP 0012FFC4
EBP 0012FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 0040D000 chap703.<模块入口点>

这是OEP处的寄存器状态
EAX 004010CC chap703.004010CC
ECX 0012FFB0
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFD4000
ESP 0012FFC4
EBP 0012FFF0
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 004010CC chap703.004010CC
----------------------------------------------

模拟跟踪
Memory map
地址       大小       属主       区段       包含          类型   访问      初始访问  已映射为
00400000   00001000   chap703               PE 文件头        Imag   R         RWE
00401000   00004000   chap703    .text      代码            Imag   R         RWE
00405000   00001000   chap703    .data      数据            Imag   R         RWE
00406000   00001000   chap703    .idata                   Imag   R         RWE
00407000   00005000   chap703    .rsrc      资源            Imag   R         RWE
0040C000   00001000   chap703    .reloc                   Imag   R         RWE
0040D000   00004000   chap703    .adata     SFX,输入表,

看好属主,chap703就是你当前调试文件,贴出来的就是它占用的内存空间以及分布.地址401000-405000这段显然是代码段.那么一眼看去就知道了,使用命令行工具:tc eip<405000 基本上等一会儿就可以找到OEP了.

模拟跟踪和ESP定律是最方便易用的,原理复杂但是使用方便.同样,以后遇到加密壳有SEH暗桩和各种检测的,等你从最后一个SEH出来跳到SE异常处理程序之后一样可以使用模拟跟踪,往往可以节省你很多事.

RAINSAIL的脱壳教程入门篇,基本上都可以用以上两种方法快速解决.当然,最好是学会的方法每一个都用一下,这样可以对这些方法更加理解.不然很多软件根本还不必要手动去脱,直接拿PEID查OEP然后使用LordPE脱出来再用ImportREC修复岂不是更快.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
鼓励一下
2006-9-30 09:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习,谢谢分享。
2006-9-30 12:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看不懂..看来不好学哟
2006-9-30 12:48
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
阅读完毕
2006-9-30 15:59
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
不求甚解的是陶渊明吧
2006-9-30 16:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
还是对于新手们鼓励一下吧
2006-9-30 22:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看了一遍,还是有很多不懂
2006-10-1 17:07
0
雪    币: 238
活跃值: (12)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
9
看楼主的总结,已经跨过新手了.
2006-10-2 00:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习……学习……
2007-3-1 21:07
0
雪    币: 241
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习,柳暗花明
2007-3-2 11:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
看完了,很不错,适合新手的文章,新手应该学习的.     
2007-3-2 11:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
顶啊..学习!!
2007-3-2 21:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看不懂..看来不好学哟
2007-3-2 22:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看不懂..

正在学习
2007-3-3 01:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
完全看不懂?? :confused能不能说得长细D呀
2007-3-4 02:37
0
雪    币: 207
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
学习中 thanks.
2007-3-5 05:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习,谢谢分享。
2007-4-1 20:19
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
经过一段时间学习,我已经基本上懂了,谢谢楼主
2007-4-3 11:53
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
还好基本上看得懂,谢谢楼主分享
2007-4-11 22:19
0
游客
登录 | 注册 方可回帖
返回
//