一个比较简单的小软件,拿 VB 写的,没壳没加密,很适合逆向入门练手。起因是我自用时发现题库要付费,本着支持正版软件的原则打开了淘宝的购买页面,结果发现这玩意儿还挺特么贵的,并且居然不是永久会员,一气之下决定爆破。
先叠甲,本文仅作技术分享,请支持正版软件。
老规矩,先查壳,看上去问题不大,
拖进 x32dbg 看看,
一直 F9 到软件界面跳出来,
可以发现软件显示“未注册”,点击模拟考场里第2套模拟题会提示我们需要先注册,
这些“未注册”相关的字眼都是关键词。直接在 dbg 里搜索这些字符,
注意这里搜索中文字符需要先在 dbg 的程序目录里放 x64dbg_tol 插件,这个插件可以允许程序正确地加载中文,以便搜索。我一开始死活搜不出来中文字符,只有乱码,还以为软件进行了什么加密,后来发现是 dbg 的问题。
总之我们根据搜出来的字符串进行溯源,
试了几行,发现下面这行跳转过去之后长得比较像有什么线索,
上面有个 cmp,然后 jne,这里通过 di 跟 785160 这个常量对比判断是否注册。在内存里发现这个常量值是 0,修改成 1 看看:
修改完后点击第2套模拟题发现没有提示要注册,可以直接做题,并且软件现在变成了注册版,
那么有没有什么办法能找到在哪里给 785160 或者 di 赋值的?先搜搜 785160,
给所有 mov 语句下断点,之后重载软件,
断在了这两处,之后就正常进入软件了。
怀疑这里就是整个软件检测是否注册的入口点。
这里有两个方法,一是把 00472DB5 | 66:891D 60517800 | mov word ptr ds:[785160],bx |
直接 NOP 掉,二是手动写个 hook 把 bx 变量的值硬改为 1,先 jmp 到空白区,在空白区给 bx 赋值之后再用 bx 给 785160 赋值然后跳回去。这里我图省事直接试试 NOP 可不可以,
然后进入软件界面,
一切功能都能用,并且右下角也提示注册版,说明直接 NOP 掉 785160 的赋值能行。其实运行到这里的时候能看到它的初始值就是 1,这里 NOP 只是不让它赋 0。
大功告成了。保存修补导出即可。