所有的逆向都一样,上手先DIE查壳,64bit c++程序,因此逆向工具应该选x64dbg,开发语言QT应该是误判,因为没有QT相关的dll。
打开要处理的图片,涂抹消除水印后保存,提示没注册。
因此掏出x64dbg,把程序拖进去跑起来,一直到弹出未注册的对话框时点暂停,然后查看调用堆栈窗口。
因此考虑其它快速定位关键位置的方法,如,bp断点,字符串搜索等方式。通常QT程序或者mfc程序都可以这么去处理。
这里有个小技巧,直接搜中文字符串可能找不到,因为它是多语言软件。
此时我们先把软件的语言切换到英文。
对应的弹窗提示信息就变成了“This feature ...”
这种时候搜索字符串就很容易能找到。
回想一下我学过的少的可怜的汇编知识,jne的反义词是je。
所以在这里暴力点儿,把jne改成je让跳过这个代码段。
此时点击保存就不会弹窗了,但是紧接着发现点了保存以后并没有保存……
在函数最后的ret上下个断点,跑到断点后F8,即可找到这个call的来源。
同样的知识再用一遍,je的反义词是jne,改了以后程序就能正常保存了。
------
反思:
本次的内容建立与dnSpy用惯了以后把知识体系挪用到x64dbg上的实践,实际上应该在关键call里修改ret的返回值,从而使不修改跳转也能实现想要的跳与不跳,比这种无脑爆破更加优雅,最优解是软件打开时直接改成已注册,但是我不懂汇编,所以无力研究,等啥时候学会了再来复盘。
转自:https://www.chinapyg.com/thread-144265-1-1.html
推荐阅读