PYG官方论坛 发表于 2019-11-16 20:56:35

鼠标打字 高级版iii 之 爆破分析

鼠标打字 高级版iii

看到群里在讨论的一个微博话题 脑瘫患者因更换新电脑后无法联系到作者 导致无法使用该工具进行网上交流 于是发起了网上求助

现在 www.hoabc.com 该域名已被热心网友注册 并分享了绿色破解版和软件分析文章:https://weibo.com/ttarticle/p/show?id=2309404438205989519536

这里仅对软件验证部分的分析做一个笔记和整理。

OD载入调试发现在VB6里打转,猜测是P-CODE编译,查壳果然如此。之前看别人玩过,基本没接触过过p-code,就现学一下好了。

BranchF: 机器码1C类似jnz/jne如果堆栈为0就跳            
BranchT: 机器码1D类似je/jz   如果堆栈为-1就跳
Branch:机器码1E   类似jmp      无条件跳

---------------------------------------------------------------------

下载vbdebug,动态分析下,win7好像还用不了,于是塞到虚拟机里跑,研究了一下才找到怎么下断点,比较好的是界面上还给出了所有的p-code指令表。



后来突然想起还有一个静态分析工具VB Decompiler,于是去看雪下载了一份。这样看起来就比较方便了。

先说下这个程序的限制,启动的时候有一个时间判断,如果超时,就建议去官网下载最新版,软件两个窗体上共有两处验证:

第一处:
loc_451C14: If ((var_9A <= &H1E) And (var_9A >= 0)) Then
loc_451C3B:   MsgBox CVar("该版本还有" & CStr(var_9A) & "天即将失效"), 0, var_128, var_148, var_168
loc_451C40:   var_170 = "" = "" 'Ignore this
loc_451C47:   var_108 = "": var_128 = "": var_148 = "" = "" 'Ignore this
loc_451C52: End If
loc_451C58: If (var_9A <= 0) Then
loc_451C69:   var_F8 = "请到http://www.hoabc.com更新最新版本"
loc_451C74:   MsgBox var_F8, 0, var_128, var_148, var_168
loc_451C79:   var_108 = "": var_128 = "": var_148 = "" = "" 'Ignore this
loc_451C84:   End
loc_451C86: End If

第二处:
loc_451030: If ((var_9A <= &H1E) And (var_9A >= 0)) Then
loc_451057:   MsgBox CVar("还有" & CStr(var_9A) & "天"), 0, var_124, var_144, var_164
loc_45105C:   var_16C = "" = "" 'Ignore this
loc_451063:   var_104 = "": var_124 = "": var_144 = "" = "" 'Ignore this
loc_45106E: End If
loc_451074: If (var_9A <= 0) Then
loc_451085:   var_F4 = "请到http://www.hoabc.com更新最新版本"
loc_451090:   MsgBox var_F4, 0, var_124, var_144, var_164
loc_451095:   var_104 = "": var_124 = "": var_144 = "" = "" 'Ignore this
loc_4510A0:   End
loc_4510A2: End If

把 451074 和 451C58 两处的跳转修改为 JMP ==> Branch 0x1E

然后运行程序,看到了注册提示框:



在反编译工具中也找到了该字符串:



跟进验证函数看一下:



该函数中会返回 1 or 2,目前我们不了解返回 1 2 4 中哪个值才是有效的,于是我们先让其返回 2,不弹出窗体看下效果。
我们将 450700 这里的 BranchF 0x1C ==> BranchT 0x1D,保存运行,发现在界面胡乱点击后,又现弹框:



这里看来 全局赋值为2还有功能限制,2 应该代表的是未过期的功能限制版,我们回想下验证的时候有赋值1 和 2 两个分支,于是我们将其修改为赋值 = 1

loc_450730:         var_E6 = 2<<==修改为 1

再保存,发现功能没问题了。

后续论坛网友反馈,重新安装后,又开始弹需要注册的窗口了 。。。看来我们之前修改 1C=>1D 触发了弹框条件。

所以我们需要修改为 JMP 跳转, Branch 指令后跟两个参数,参数代表跳转偏移:



中断后:



我也没找到资料,后面的参数是如何计算偏移的,所以这里大家就口算一下好了(不了解格式的话计算这个偏移有点难)。
可以OD加载后,直接修改,对比如下:



看完网友的分析文章后,发现关键call下方的函数若返回成功,对全局赋值为4,该函数返回t=trial,返回r=registered。直接在该函数修改也OK,这样逻辑会更清晰,目前赋值为1也未发现其他问题,本文的修改方案也算一种参考思路。








dryzh 发表于 2019-11-16 21:30:34

VB P-Code看着有点花眼{:biggrin:}

hgzyyl 发表于 2019-11-18 10:12:32

好厉害的分析,赞一个

xiaoji 发表于 2019-11-18 11:09:15

谢谢哦~~~~~~~~这个不错哦

CrazyNut 发表于 2019-11-18 19:43:00


后面的参数是如何计算偏移的,所以这里大家就口算一下好了

wmj517 发表于 2019-11-20 09:25:13

萌萌懂!有些还是不懂

luckcsz 发表于 2020-2-27 17:04:01

初学,先做个记号,谢谢分享~!
页: [1]
查看完整版本: 鼠标打字 高级版iii 之 爆破分析