某去水印软件爆破思路
2022-8-14 00:1:47 Author: web安全工具库(查看原文) 阅读量:33 收藏

额,我没学过汇编,也不会用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的返回值,从而使不修改跳转也能实现想要的跳与不跳,比这种无脑爆破更加优雅,最优解是软件打开时直接改成已注册,但是我不懂汇编,所以无力研究,等啥时候学会了再来复盘。

该内容转载自网络,更多内容请点击“阅读原文”


文章来源: http://mp.weixin.qq.com/s?__biz=MzI4MDQ5MjY1Mg==&mid=2247503606&idx=2&sn=2fdd91b3ff6fe349b282419ee03a9480&chksm=ebb521f5dcc2a8e3dd2fa2c8be613bf410c414baed115a1533eef5a146eab9b60f7748f39088#rd
如有侵权请联系:admin#unsafe.sh