逆向南方周易系列windows程序
前言
这款软件也算是一款老牌的软件了,正好之前学过一段时间的逆向,打算借此机会磨练一下技术
本篇文章仅供学习交流,不提供任何样本下载,只是讨论技术,不存在破解软件等侵犯知识产权的可能性!
可以看到如果没有注册的话,会提示以下内容,提示我们注册软件

如果注册码填写的不对,则会提示注册失败

我们的目标是写一个注册机出来,是再好不过了。或者也可以patch某部分代码,实现注册成功
我们现在入手分析此程序,安装目录比较重要的文件就是下面四个:
其中第一个可以直接用记事本打开,就是一些简单的生日等数据,因此可以不必看了。第二个是一个数据库文件,我们打开看一看内容

可以看到也没有和注册相关的内容。这个dll文件实在是太小了,可以简单看看里面代码内容,估计不是和注册相关的
接下来开始分析exe本体文件。其实通过这俩就能简单看出来,软件原理就是导入一些公式化的古籍内容,根据输入的生日自动匹配,给出对应古籍的内容,也就是说只能作为娱乐使用。
咱们使用DIE查询到软件用的语言是VBscript,因此使用Dnspy这个软件进行分析

patch思路破解
打开软件之后,在类里面找和注册相关的方法
先找到一个篇幅稍微长点的,估计是和真正注册码生成的算法相关,就先不分析了。一个软件应该会存放一个变量专门表示软件是否被注册,在使用的时候直接读取这个变量,方便又快捷。我们当务之急就是找到这个变量赋值或者校验的地方。
所幸功夫不负有心人,还是找到了这个地方的函数:
1 | // PaiBazi.RegData |
然后我们看到这个flag变量,那么既然我们是未注册用户,直接将此判断条件取反即可,右键编辑方法可进行修改代码。然后dnspy支持保存修改到exe里面,修改后保存即可
当然,我秉持着最小修改原则,就是怕出一些意料之外的bug等问题。

注册机思路破解
从注册机思路去分析,我的第一个想法就是从校验函数入手,也就是刚才我们分析的这个地方。