吾爱破解培训第五课:反击作者的挑衅--实战解除程序重启验证

Author Avatar
kabeor 3月 31, 2019

吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证

如何在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 = "验证"
0012F534 00544634 |Key = "Key"
0012F538 001C9578 |String = "987654321"
0012F53C 001D7F70 \FileName = "C:\Users\Administrator\Desktop\52Pojie.ini"

GetPrivateProfileStringA:读取配置信息

NjJGJXU3NTI

重启验证3:写入信息进注册表

4JXU2MjM3

实例

image

爆破方法

OD打开,搜索字符串找到
image

跟随字符串

恭喜你发现彩蛋,这是一个解迷的彩蛋,请根据提示得到正解的注册码

image
只要nop掉jnz就可以强制跳转,修改后出现彩蛋
image

追码方法

  1. 52Pojie.txt:ITN3UXJGJ

Ctrl+N 找ReadFile,查找输入函数参考,找到比较注册码的算法。
image

  1. 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
image

  1. 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。

最后,发现长度不够,随便补了3位。
imageimage
image

4.再打开程序就出现彩蛋提示。
image

From https://kabeor.github.io/吾爱破解培训第五课:反击作者的挑衅–实战解除程序重启验证/ bye

This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接:https://kabeor.github.io/吾爱破解培训第五课:反击作者的挑衅--实战解除程序重启验证/