破解注册程序之内部注册机(在内存中找到注册码)
0x00 前言
注册机的分为内部注册机和外部注册机,本次的破解目标就为内部注册机。破解的方法名为跟踪调试法,指在调试过程中找到其中一点作为突破口,顺藤摸瓜,最终得到自己想要的数据。
0x01 超级屏幕录像专家的破解
0x10 运行程序,找关键字符
首先尝试运行程序,获取关键字符串。(这里我已经注册过了,但不影响我们破解这个程序)

0x11 查壳 -> 无壳
然后就是使用 PE 工具查壳(查壳文件本身,而不是桌面的快捷方式):

0x12 OD 载入,跟踪调试
无壳,老规矩,拖入 OD 直接调试,搜索字符串就直接看到了关键字符串:

双击跳转过去,找到对应的 call,下断点,然后运行:

软件自行打开,找到注册,随机输入账号密码点击确定,程序就在断点处停了下来:

进 call F7 单步步入,跳 call F8 单步步过。一步一步慢慢来。
0x13 得到正确的注册码
随即就在寄存器里发现了正确的注册码:

关闭调试程序,然后打开原程序,用户名不变,进行注册即可。

0x02 现代汉语词典的破解
0x20 关键字符串
该程序不需要安装,点击 exe 文件即可运行:

0x21 查壳脱壳
可以看到这个这个软件未注册,并且许多功能都未开放。先查壳,发现有壳(Aspack):

选择手动脱壳或者自动脱壳皆可,很简单的就脱了壳。
0x22 OD 载入
拿到了程序,然后 OD 打开搜索字符串下断点:


发现注册失败是从 0052715B 跳转过去的,所以在它上面最近的 call 下断点即可:

运行程序,进入注册,随机输入(这里的注册号只能输入数字),程序便停在了断点处:

0x23 得注册码,注册成功
在寄存器里就可以看到正确的注册码和我输入的注册码。复制正确的注册码去注册即可:

注册成功,功能全部解锁!

0x03 总结
- 总的来说,软件的加密保护等级不是很高(或者完全没有),可以很容易进行破解或者逆向。
- 从破解的技术角度来说,不一定非要得到注册码,也可以暴力破解,将注册程序 nop 掉,然后生成新的可执行文件,即可免注册。当然了,也可以写对应的注册机,只要输入用户名即可得到注册码。但是这就需要 IDA 分析源码,将程序的注册码效验过程了解清楚后才能实现。这相对于跟踪调试或者暴力破解是更消耗精力和时间的。
- 对于跟踪调试,大致步骤就是:运行程序得到关键字符串 ->(查壳 / 脱壳)->OD 载入,搜索字符串 -> 找到关键 call-> 下断点,运行调试 -> 单步跟踪,在寄存器中找到注册码。
0x04 附件下载
附件链接:https://pan.baidu.com/s/1DJt4mWpz42GuQEDhzLdBqQ
提取码:LIYZ 解压密码:Asteri5m