7.14 破解静态加密软件

一般来说,软件作者将软件编写完成后,出于对安全和利益的考虑,往往会对软件进行加密,以防止盗版和保护合法使用者的权益。软件加密强度与软件作者的编程水平有关,本节所说的软件加密就是常见的软件注册。

7.14.1 软件注册方式

软件注册主要有以下几种。

(1)注册码方式

现在绝大多数软件都采用注册码方式进行保护。这种方式便于在网上进行交易,没有额外的成本。在软件没有注册前,一般都会对软件的功能、使用时间和使用次数等进行限制。常见的注册码方式有“机器码+注册码”、“用户名+注册码”、“组合方式+注册码”。其中最简单的就是早期固定字符串的软件注册,即设置一个固定的字符串,如果用户输入的字符串与指定的相符,则执行程序的正常功能,否则将提示用户退出或者重新输入注册码。

(2)加密狗方式

加密狗方式多见于商业软件,而且一般都会有一个形同U盘的硬件。由于一个加密狗的成本为数十元,因此个人软件很少使用。

(3)光盘加密

光盘加密常见于游戏光盘,用于防止原版光盘被非法复制。

(4)网络验证

网络验证是指软件在注册时要在线连接官方网站进行注册,或者在注册后不定期地自动连接到官方网站进行正版校验,如果无法通过,则视为盗版或者试用版本。

(5)NAG窗口

在使用未注册版本或者试用版本的软件时,经常会弹出一些提示窗口,要求用户注册,这些窗口称为NAG窗口。在软件试用期结束后,NAG窗口很可能会屏蔽软件的正式窗口或者某些重要的功能窗口,使软件不能被正常使用。

7.14.2 破解实例

本例中的注册码是固定的字符串,输入正确的字符串才会显示“Welcome”,否则显示“I am Sad!”,程序运行界面如图7-135所示。

1.查壳

对软件破解来说,第一步往往是检查软件是否进行了加壳处理。目前网上有很多可以用来查壳的软件,例如大名鼎鼎的PEiD等。

直接运行PEiD 0.93,选择需要查壳的文件,如果能够识别,会自动显示文件是采用什么方式进行加壳的。如图7-136所示,显示为“UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo”,即采用UPX软件进行加壳。如果程序没有加壳,则会显示为具体的编程语言。

0336-1

图7-135 破解原文件

0336-2

图7-136 查壳

2.脱壳

查出软件采用的加壳软件后,选择相应的脱壳软件进行脱壳。笔者所采用的UPX脱壳软件需要进行安装,安装完成后会自动将一些与脱壳相关的操作加入文件的快捷菜单中。需要脱壳时,选中文件,单击右键,依次选择“UPX ShellEx”→“UPX通用脱壳机”选项,软件将自动脱壳,如图7-137所示。

0337-1

图7-137 脱壳

说明

有的软件可能采用多种方式加壳。这种软件的脱壳,就需要一层一层进行。脱壳成功后会给出一些提示,如图7-138所示。

0337-2

图7-138 脱壳成功

3.反汇编

本案例使用W32Dasm进行反汇编。W32Dasm是一款绿色的、功能非常强大的反汇编工具,最高版本为8.93,目前已经不再更新了。一些爱好者根据需要对其进行了修改,出现了一些后续版本,本文使用的就是修改后的W32Dasm 10.0。

W32Dasm反汇编得到的源代码主要用于分析程序的一些基本信息、显示程序使用的各个寄存器段、区段、程序包含的对象及应用的函数等,如图7-139所示。

0338-1

图7-139 使用W32Dasm反汇编源代码

0338-2

图7-140 查找字符串

使用W32Dasm反汇编源代码后,可以查找一些字符串,这些字符串可能与注册有关。在本例中主要查找“I am Sad!”。在W32Dasm中依次选择“参考”→“串示数据参考”选项,在弹出的“W32Dasm串式参考内容清单”窗口拖动滚动条,查找“I am Sad!”字符串,如图7-140所示。

注意

使用W32Dasm反汇编的应该是脱壳以后的原文件。

技巧

在查找字符串时,由于字符串是按照字母顺序排列的,因此可以以字符串首字母所在位置进行查找。

查找字符串的目的就是定位地址。找到“I am Sad!”字符串后,双击该字符串,会自动跳转到W32Dasm反汇编窗口,并高亮显示一条数据。记下高亮显示数据的地址信息,在本例中为“004513E6”,如图7-141所示。在该地址上方有一个跳转(jne),在“Welcome”字符串上面有一个“jne”跳转的地址,记下该地址“004513D2”。

0339-1

图7-141 找到地址

4.使用C32sam反汇编工具汇编原文件

C32asm也是一款反汇编工具。C32asm可以直接对反汇编的文件进行十六进制转换,或者直接进行汇编代码的修改。使用C32asm反汇编原文件以后,单击右键,在弹出的快捷菜单中选择“跳到”选项,在“Eip跳转对话框”中输入跳转地址“004513D2”,如图7-142所示,然后单击“确定”按钮,回到C32asm反汇编窗口。

0339-2

图7-142 设置跳转地址

回到C32asm窗口,会高亮显示跳转地址代码。如图7-143所示,选中记录“:004513D2:: 75 12 JNZ SHORT 004513E6”,然后单击右键,在弹出的快捷菜单中选择“对应Hex编辑”选项。再次单击右键,在弹出的快捷菜单中选择“对应汇编模式编辑”选项。

0340-1

图7-143 修改反汇编地址

再次选中记录“:004513D2:: 75 12 JNZ SHORT 004513E6”,单击右键,在弹出的快捷菜单中选择“汇编”选项。如图7-144所示,直接将“JNZ SHORT 004507E6”修改为“NOP”或者“JE SHORT 004507E6”,然后保存。

0340-2

图7-144 修改跳转地址

5.运行破解后的文件

运行破解后的程序CrackmeNo1_Unpack.exe,随便输入一个注册码,都会显示“Welcome!”字符串,如图7-145所示。程序破解成功。

0341-1

图7-145 破解成功