吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征
1.不同编译器反汇编入口点特点
1.VC6编译无壳程序
VC6特点:入口点代码是固定的代码,入口调用的API也是相同的,其中有的push地址不同程序可能不同;区段有四个也是固定的.text、.rdata、.data和.rsrc。
2.VS2008和VS2013编译无壳程序
VS特点:入口点只有两行代码,一个CALL后直接JMP,第一个CALL进去后调用的API也是相同的;区段相对于VC6多了一个.reloc。
3.易语言编译无壳程序(独立编译和非独立编译)(由于易语言独立编译是调用VC的链接程序编译的,所以从区段和入口代码特征和VC相同)
易语言特点:可以从程序里找一些call的调用最终都会走到上面核心代码图位置(文字不太好表达),这个方法可以区分和VC的区别,非独立编译比较容易识别,入口特征和模块特征都有krnln.fnr。
4.Delhpi编译无壳程序
2.如何识别加壳
1.通过PEiD、Exeinfo PE等查壳工具内置各种壳的十六进制特征码进行对比查壳
2.通过入口特征和区段特征来识别
区段信息可以通过PEiD的EP处点击获取到。
入口特征可以通过OllyDBG载入获得,载入后可以按一下“Ctrl+A”,让OD分析一下代码,就可以把入口点一些特征字符串分析出来
3.程序加的是什么壳
windows程序状态大体可以分为以下几种类型:未加壳、压缩壳、传统加密壳、代码虚拟化保护、.Net程序加密
==OD快捷键==
- l:日志信息
- e:模块加载
- m:内存窗口
- t:线程
- w:窗口
- h:句柄
- c:CPU
- p:补丁
- k:调用堆栈
- b:断点窗口
- r:参考
- …:run跟踪
- s:源码
API函数
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
手脱UPX,AsPack
UPS、AsPack压缩壳介绍:
UPX 、AsPack是一款先进的可执行程序文件压缩器。压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过压缩过的程序和程序库完全没有功能损失,和压缩之前一样可正常地运行。对于支持的大多数格式没有运行时间或内存的不利后果。
1、单步跟踪法
此方法是将向上跳转设置断点让它不能实现,向下跳转不执行动作让它实现。
将程序拖入OP,可以看到Pushad是这个程序的入口点。接下来按F8(单步步过)或者点击此按钮即可。
单步跟踪法是将向上跳转设置断点,所以我们就用F8逐一的找向上跳转。
红色椭圆框住的就是向上跳转,每当遇见的时候通常我们都在下一句设置断点,所以我们可以直接在下一句(即红色矩形框框住部分)按F4,逐步向下寻找。
这个跳转因为下一句是一个“CALL”所以我们在CALL下面的一句设置断点。这里注意一下popad。这个是“出站口”,注意到前面pushad是“入站口”,有入站口就会有出站口即popad。再看popad下面的语句,98E1EFFF,0047738C,这个跨度比较大,典型的Delphi程序,一般再单步步进一次就可以进入到程序的真正程序段。
接下来我们进行脱壳,可以直接用OD脱壳插件脱壳,右键用OllyDump脱壳调试进程。
可以用方式1,也可以用方式2,都可以进行脱壳。
2、ESP大法
ESP大法相比于单步跟踪法来说简便,利用寄存器ESP的值来进行脱壳。
ESP大法是在关键语句的下一句如果ESP颜色突变进行操作,我们来看一下下一语句的ESP。
这里我们看到寄存器里只有ESP是红色的,那我们就可以操作了。右键数据窗口中跟随。
然后我们F9运行,来到了我们刚才熟悉的界面,单步步进,来到了主程序程序段,脱壳即可。
点击m进入内存界面,接下来我们找在内存中的本程序段的.rsrc,F2设置断点,运行。
所谓2次镜像法就是要进行2次内存操作,接下来我们再点m进入内存信息界面,找到地址00401000,F2设置断点,运行。又来到了我们熟悉的语句popad,设置断点,单步步进,脱壳。
4、一步直达法
此方法适用于UPX,Aspack壳,前面说过pushad为入口点,那么它必定有一个出口点popad,所以我们只需要Ctrl+f查找popad即可。