软件注册的种类多种多样,危险漫步也将流行的软件保护方法以及常用的破解手段进行了总结以及实例演示。
软件保护中最常见以及最容易下手的破解保护方式,就要数有注册按钮而且是F(序列号)=f(用户名)这类算法了。比较难对付的软件保护方式要数key注册、硬件注册以及矩阵注册了,当然加密狗的软件保护方法就更是困难了。对于刚接触软件破解的朋友来说,会遇到一些没有注册按钮的软件。这类软件会实时计算用户输入的用户名以及序列号,只有当结果正确的时候才会弹出注册成功的提示,或者直接进入注册界面。由于这类软件没有错误提示,没有按钮,所以很多朋友不知道应该从哪里下手,危险漫步这里就以一款这类注册的crackme为实例,演示一下这类软件的一般破解思路,如果读者有更好的方法,还望多多交流。
首先来看crackme的运行界面,没有任何按钮,只有静态的文本提示。软件破解之前的信息收集工作就一带而过了。软件没有加壳,直接载入到OD中,暂停在所示的位置。
我们在注册框里输入任何的东西都没有提示,没有按钮,那我们应该怎么办呢?我们可以看到“NOT Registered”这个字符串,我们不妨尝试在OD中查找一下,看看有没有什么可用的线索。用超级字符串参考查找软件中的所有字符串,需找没有注册时的提示,有所收获,而且在这个字符串上面就是“Registered”,看来当危险漫步输入正确的序列号时,这个文本框的提示就会变成Registered。双击字符串所在的位置,来到反汇编代码窗口。
这附近有很多的跳转指令,我们先找到代码块的起始位置,起始代码如下所示。
我们在段首00425F64按F2下断点,然后按F9运行程序,然后再输入框中输入任意的字符串,这里输入1。当我们输入1后发现程序中断在了我们设置断点的位置,下面我们要做的就是单步跟踪,找到关键的跳转位置进行修改了。按F8单步跟踪,不久我们就会来到所示的代码位置,这里就是注册成功与否的关键跳转。原来的跳转指令已经实现,我们将代码JE SHORT crackme.0042615F修改为jmp即可。修改完毕代码后我们保存程序,运行,再次输入1,我们会看到注册提示已经变成所示的提示了。
上面我们只作为一次破解的偶然成功,为什么这么说呢,因为在大多数情况下注册的成功与否是不会有任何提示的。所以下面我们要介绍通用的破解模式。这类软件的运行方式是这样的:每当用户在编辑框输入信息时,就会产生一个键盘消息,系统捕获这个消息,并投递到这个程序用于处理消息的代码进行处理。这样我们就有了对付这类注册软件的方法:键盘消息断点。重新载人目标程序,并运行,程序界面出现后按F12暂停程序,点击工具栏“W”按钮进入显示窗口界面。
我们找到TEdit类,点击右键,选择“设置ClassPro消息断点”。此时会弹出消息断点设置对话框,选择“键盘 ”(某些情况下选择编辑控件。设置完断点后我们按F9运行程序,程序出现后我们在输入框中输入任意字符,这里输入1进行测试。输入完毕后程序立刻被中断在了系统领空。下面就要按照前面一节进行跟踪了,直到跟踪到我们的程序领空,就可以进行分析了。
消息跟踪法作为一种杀手锏式的破解方法,在处理任何软件的时候都可以用得到,但其复杂程度以及代码的分析追踪难度要比其他的方式复杂,当然如果你对OD的脚本编写很在行的话,可以直接写脚本,利用脚本自动地从系统领空跟踪到程序领空。消息中断法破解软件要求破解者对win平台比较熟悉。
软件破解作为逆向工程的一个分支,需要更多的是实战练习,基础是重要的,但有时通过大量的练习,你可以自己总结出理论来。
本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法破解行为。