慕若曦 发表于 2022-8-6 22:55:02

某去水印软件爆破思路

本帖最后由 763837023 于 2022-8-7 12:19 编辑

额,我没学过汇编,也不会用x64dbg,所以做的不完美,大佬看(xiao)看(xiao)就行了。

PS最近老奔溃,想起来电脑上还有个快速去水印的小工具,打开更新了下版本到最新,提示要注册,网上搜了下好像也没公开版,所以就有了这个帖子。


所有的逆向都一样,上手先DIE查壳,64bit c++程序,因此逆向工具应该选x64dbg,开发语言QT应该是误判,因为没有QT相关的dll。




打开要处理的图片,涂抹消除水印后保存,提示没注册。



根据我长达一年半的.Net逆向经验,有弹窗的时候,暂停,然后看调用堆栈找来源就行。

因此掏出x64dbg,把程序拖进去跑起来,一直到弹出未注册的对话框时点暂停,然后查看调用堆栈窗口。



看这个堆栈,一层一层找关键 Call 的话会很麻烦。

因此考虑其它快速定位关键位置的方法,如,bp断点,字符串搜索等方式。通常QT程序或者mfc程序都可以这么去处理。

这里有个小技巧,直接搜中文字符串可能找不到,因为它是多语言软件。

此时我们先把软件的语言切换到英文。




对应的弹窗提示信息就变成了“This feature ...”



这种时候搜索字符串就很容易能找到。



至于原因,做过软件开发的同学都知道,一般我们会设置控件的text属性,而多语言则通过钩子或者别的方式替换text的内容,没有对应的语言文件则显示你设置的text内容。



双击搜索结果来到调用,可以看到第一个框起来的地方会影响到这个字符串,调试了一下发现到这里jne没有跳转,因此导致弹出了注册框。

回想一下我学过的少的可怜的汇编知识,jne的反义词是je。

所以在这里暴力点儿,把jne改成je让跳过这个代码段。

此时点击保存就不会弹窗了,但是紧接着发现点了保存以后并没有保存……

在函数最后的ret上下个断点,跑到断点后F8,即可找到这个call的来源。



跟一下能看到有个je



这个je将要跳转,看了下跳过的这段的内容,比较关键。



左侧的红线区域即为刚才的je范围,很大,看右边的字符串,明显把保存各种格式的操作给跳过了。

同样的知识再用一遍,je的反义词是jne,改了以后程序就能正常保存了。

------

反思:
本次的内容建立与dnSpy用惯了以后把知识体系挪用到x64dbg上的实践,实际上应该在关键call里修改ret的返回值,从而使不修改跳转也能实现想要的跳与不跳,比这种无脑爆破更加优雅,最优解是软件打开时直接改成已注册,但是我不懂汇编,所以无力研究,等啥时候学会了再来复盘。

梦之泉 发表于 2022-8-6 23:01:54

从群里过来给点个赞,顺便瞅瞅学下这作业

lies2014 发表于 2022-8-7 00:46:42

谢谢教程

hero888 发表于 2022-8-7 09:58:54

学习!不错

mwl 发表于 2022-8-7 17:27:44

这个破解版本已经很多了,感谢分享经验!

onhawk 发表于 2022-8-8 09:10:07

谢谢分享,支持,收藏

q19889030 发表于 2022-8-8 10:08:16

感谢分享经验

wengmyze 发表于 2022-8-8 15:48:01

感谢分享经验

乐活 发表于 2022-8-8 17:34:17

过来学习,楼主很厉害啊

onhawk 发表于 2022-8-10 09:01:22

谢谢分享,支持,收藏
页: [1] 2 3
查看完整版本: 某去水印软件爆破思路