看到论坛里已经有很多朋友分析过如何爆破它了,但好像还没有分析注册过程的
分析对象是x64的版本4143:
https://download.sublimetext.com/sublime_text_build_4143_x64_setup.exe
使用工具:
- x64dbg
- winhex
- openssl
寻找注册过程函数
我们可以从关于对话框中的Unregistered
入手
打开x64dbg,载入sublime_text.exe,运行,搜索=>当前模块=>字符串,过滤Unresgistered
双击来到代码段,向上查找,发现有一个跳转跳过Registered to
,前面比较了[rsi+5]
的值
那么我们在此处下断点,找到[rsi+5]
的地址,在此处下写入断点
随便在网上找一组没被软件本身屏蔽的注册码(可以被服务器屏蔽),然后断开网络,将注册码输入,点击注册,断下来了,可以发现框出来的函数决定了是否将标志位设置为1
分析注册过程
进入刚才那个函数,下断点,断开网络,输入假码注册:
----- BEGIN LICENSE -----52pojieUnlimited User LicenseEA7E-88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888------ END LICENSE ------
断下来了,我们可以发现函数最开始对[7FF6A2AC8670]
往后0xA0个字节的每个字节异或FD,然后拼接出了一个der格式的rsa公钥
继续往后,可以发现这个函数前传递了我们输入的假码和公钥,很有可能是注册的关键函数,进去看看
函数中一共只有两个跳转,图中第一个被设置断点的函数前传递了EA7E
,猜测可能是校验输入的产品编号是否正确
而下面框出来的函数,很有可能是注册验证的函数,前面传递了rsa公钥、假码的前三行(注册信息)、以及假码的剩余部分(注册码),并且下面将eax的值传入esi,而下面有一个jmp跳过了一段不可能运行的代码xor esi,esi
,说明程序是不希望esi的值为0的,此时我们观察寄存器,运行完“注册函数”后,eax的值为0,那么esi的值也将为0,此时我们将eax的值改为1试试,结果注册成功了,更加验证了那个函数是注册函数
进入注册函数,下断点,断开网络,再次输入假码
可以看见函数最开始准备进行一个sha1运算
下面的一个决定函数返回值关键跳转前的函数,被传入了0x80,假码的剩余部分(注册码),以及一段16进制数据,我们尝试将假码的前三行(注册信息)进行sha1运算,恰好就是这段16进制数据,这个函数很有可能就在进行rsa验签
综上,可以逆推出注册码的生成过程:
注册信息=>sha1哈希运算=>rsa私钥签名