一、破解准备:
组合一:
侦壳 language.exe
脱壳AspackDie.exe
反编译 W32Dasm黄金中文版
十六进制编辑器 UltraEdit
组合二:
PEid
Ollydbg
二、破解软件步骤:
1.查壳
一般软件都会加壳,所以我们想破解软件,首先必须知道待破解的软件所加壳的类型。在这之前,我们需要先了解壳的概念。什么是壳?所谓壳就是一个保护程序,将可执行文件压缩,保护软件版权信息,不让人随意改动。最常见的加壳软件有ASPACK,UPX,PE compact等等。
其中查壳工具有language.exe、PEid等等。如图所示,我们便可以知道待破解软件是采用什么语言编写的,并且加了什么类型的壳。
2. 脱壳
所谓脱壳,就是将已经加壳的程序从壳中剥离出来。
首先需要介绍OEP的概念,OEP就是原程序的入口点,也就是真正的入口点。当被加壳的程序运行后,首先运行的是壳程序,壳程序会将原程序还原到内存中并将控制权返还。OEP总会在这期间被脱壳者找到。只要找到这个OEP,就可以将原程序从内存中dump出来,而后针对dump出的程序进行处理,最终得到原程序。一般来说,脱壳就是要找程序的OEP,得到这个OEP,脱壳就完成一半了,剩下的就是修复工作了。
脱壳的方法有很多种,如:单步跟踪法、ESP定律法、二次断点法、末次异常法、模拟跟踪法、SFX自动脱壳法、出口标志法、使用脱壳脚本辅助脱壳、使用脱壳工具脱壳。其中,对于比较简单常见的壳,我们可以脱壳工具来帮助我们解决问题。在这里我就不赘述其他方法了,可以参考http://www.cnblogs.com/einyboy/archive/2012/05/19/2508696.html
其中AspackDie.exe是一种针对ASpack壳的专业脱壳工具。通过这个工具的脱壳,我们可以得到一个脱壳后的unpacked.exe。
3.反汇编
所谓反汇编(Disassembly),即把目标代码转为汇编代码的过程。其中常用的工具软件有:反编译 W32Dasm、Ollydbg等等。对于转换过来的汇编代码,一般会比较长,且晦涩难懂,一般人往往不知道从哪里入手。在这个过程中,最重要的是寻找到破解软件的关键点。首先我们可以利用反汇编软件的功能寻找“注册码错误”、“注册成功”等提示性的参考串,缩小我们需要阅读的代码范围。
在“注册码错误”参考串附近,我们可以尽量寻找call子函数调用和有条件跳转(除了jmp的其它跳:je,jne,jz,jnz)。对于这些关键处,一般就是我们所需要寻找的破解软件的关键点。但是不尽然,对于具体的问题,我们还是需要通过阅读汇编代码来分析,所以我们大学里面学的汇编语言在这里就很有用了。
实际修改地址(偏移地址)和行地址(虚拟地址)pw32dasmgold反汇编出来的代码由三列组成。第一列为行地址(虚拟地址)。第二列为机器码(最终修改时用ultraedit修改)。第三列为汇编指令。
其中在上图中,关键点为jne 004ACCB1。从反汇编软件的提示栏我们可以看到这条跳转指令的偏移地址0xacb4b。
4.修改机器码
由于exe可执行文件是二进制文件,我们可以通过UltraEdit软件转换为十六进制显示。当我们修改了文件中十六进制,就相当于修改了可执行文件的内容。
打开十六进制编辑器 UltraEdit,打开脱壳后的unpacked.exe,直接按ctrl+g,出现对话框,输入0xacb4b(即偏移地址)。
在这里我们将指令jne 004ACCB1对应的机器码)0F8560010000修改为0F8460010000,也就是说我们将指令改为了je 004ACCB1。这样的话,程序在判断跳转条件是,几乎不会弹出“注册错误”的对话框,而总是执行“注册成功”那一段子程序。
常见指令对应机器码
三、个人心得:
1.不要畏惧困难
2.具体问题具体分析
(1)从哪里来,经过哪里,到哪里去
(2)追根诉源,逐步分析
3.遇到难题,需要坚持
(1)开阔思路,逆向思维
(2)考虑其他情况