【软件逆向-某账本v3.7破解过程】此文章归类为:软件逆向。
学习逆向一段时间了,还没有独自实战过,于是有了这次破解过程。
脱壳

发现是nsPack 加壳,百度查又叫北斗程序压缩。
上论坛查一下有没有nsPack脱壳案例,发现可以用ESP定律脱壳。
EOP:

然后使用Scylla dump下来,自动搜索IAT地址,修复IAT,但是发现运行报错。
入口函数如下
首先他会执行6798C_funcs处所有的函数地址初始化



运行报错就在这初始化函数列表里面,dump如下

大概率可能是需要特殊处理某些函数地址,可能跟下面的反调试有关。
于是放弃修复脱壳,直接x64dbg 动态 + ida 静态脱壳后dump.exe 结合分析程序注册逻辑。
- 找关键点

在逆向过程中,发现主体函数基本都会用到结构化异常处理SEH,形式如下

通过断点CreateWindowsExA,可以断下弹窗注册失败提示

根据栈堆,可以看到密钥和错误关键信息

排查到地址00665D94 即密钥校验的地方,这里用了混淆,导致ida分析不出来

他的特点是,执行完关键程序后,jmp到6663B4,该函数会修改线程上下文,强制改变代码执行流

执行完该函数后,会ret到下面地址,但是该处地址在ida中是上述的函数地址表中的数据。
很明显这是一段代码混淆

这里我没有尝试反混淆,我通过观察栈堆字符串来观察关键函数。
这里操作了可疑字符串,该函数是一个封装的字符串比较函数。


这里断下,F9几次,就来到了关键的字符串比较地方。123456789就是我输入的假码,56是后面拼接

使用33658643 字符串测试一下

- 学习
既然知道了密钥,那么分析密钥是从哪里产生的,对字符串密钥的源头下硬件写入断点,结果得到如下

L"provider=Microsoft.Jet.OLEDB.4.0;user ID=Admin;Data Source=C:\Users\k\Desktop\xxx\Data.ycd;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="ycrj970129";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False"
使用该密钥,DBeaver Ce去打开,没有看到跟注册码明显的关联表。

由于对作者的尊重,我就不放成品出来了,仅记录破解过程,学习软件防破解思路。
更多【软件逆向-某账本v3.7破解过程】相关视频教程:www.yxfzedu.com