吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证
如何在OD中找到程序调用的一个API的所有位置
OD字符串插件的使用
Ctrl+F搜索字符串
熟悉OD如何下断点
Ctrl+G:直接断API
Ctrl+N:输入表断API
ctrl+N显示API窗口,直接搜索API,右键,查找函数参考,可给所有位置下断点
利用插件apibreak或api断点设置工具
熟悉procmon的使用
可以监控文件,注册表,网络,进线程信息
排除进程:ExClude
查看指定进程:Include
熟悉文件操作API的使用
CreateFileA/W:创建文件
ReadFile:读取文件
WriteFile:写入文件
CloseHandle:关闭句柄
读取文件:CreateFile->ReadFile->CloseHandle
写入文件:CreateFile->WriteFile->CloseHandle
熟悉注册表操作API的使用
创建注册表Key:RegCreateKey
打开注册表Key:RegOpenKey
查询注册表键值:RegQueryValue(Ex)
写入注册表键值:RegSetValueEx
什么是重启验证
重启验证顾名思义就是在程序启动时验证注册信息。
执行流程
基本的执行流程:注册信息输入–>程序重启–>执行验证机制–>正常执行
扩展的执行流程:注册信息输入–>执行部分验证机制/执行假验证机制–>程序重启–>执行真验证机制–>正常执行
对于有经验的作者来说,可以在注册信息输入和程序重启之间加入假的验证机制,假的验证机制一般比较简单,比如说只是当单纯的明码比较,当我们输入这个假的注册码的,程序一般会提示注册成功,此时程序就会知道我们是逆向者,在程序重启时就会假装注册成功,在执行程序功能时就会报错或是无反应,这就是所谓的暗桩。
重启验证的类型
重启验证根据写入信息位置的不同一般分两类,一类是将注册信息写入文件中,一类是将注册信息写入注册表中。
定位关键代码
1.字符串定位
通过OD字符串插件扫描敏感字符串,一般出现的文件路径或是注册表路径都可能是验证信息的保存位置
2.监控工具定位
通过procmon等监控工具监控注册信息的写入位置
3.API定位
通过定位CreateFile,RegCreateKey等API来获取注册信息的写入位置
Demo演示
重启验证1:写入信息进txt:
JXU2MjExJXU2 |
CreateFile->WriteFile->ReadFile->比较算法
重启验证2:写入信息进ini
WritePrivateProfileStringA:写入配置信息
0012F530 00544638 |Section = "验证" |
GetPrivateProfileStringA:读取配置信息
NjJGJXU3NTI |
重启验证3:写入信息进注册表
4JXU2MjM3 |
实例
爆破方法
跟随字符串
恭喜你发现彩蛋,这是一个解迷的彩蛋,请根据提示得到正解的注册码
追码方法
- 52Pojie.txt:ITN3UXJGJ
Ctrl+N 找ReadFile,查找输入函数参考,找到比较注册码的算法。
- 52Pojie.ini:jN2UXJxEjM2UXJ
Ctrl+N 找GetPrivateProfileString,查找输入函数参考,找到比较注册码的算法。
真实注册码(密):3A 1E 02 25 28 1A 48 15 3A 1D 02 25 28 1A
加0x30还原为真实注册码(明):6A 4E 32 55 58 4A 78 45 6A 4D 32 55 58 4A
- HKEY_CURRENT_USER\Software\52Pojie:confirm 3MjM2UXJ4abc
Ctrl+N 找RegQueryValueExA,查找输入函数参考,找到比较注册码的算法。
首先,倒推出真实注册码的长度为12。
然后,倒推出第5位为的值为0x32(0x66异或0x54)的结果,第9位是0x34,第1位是0x33
再然后,发现字符串比较,得出第2-4位为MJM,第6-8位为UXJ。