安全矩阵

 找回密码
 立即注册
搜索
查看: 1383|回复: 0

某去水印软件爆破思路

[复制链接]

252

主题

252

帖子

1309

积分

金牌会员

Rank: 6Rank: 6

积分
1309
发表于 2022-8-15 23:40:53 | 显示全部楼层 |阅读模式
原文链接:某去水印软件爆破思路


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-29 21:23 , Processed in 0.013341 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表