破解小白爆破Inpaint9.1全过程

(编辑:jimmy 日期: 2024/10/30 浏览:2)

起因
在B站上看到一个up主用到这个软件,它可以去掉图片上多余的物体。搜索后下载使用发现要收费。进安装目录一看居然只有一个23M的exe,初步猜测可能是自解压文件,运行后释放到temp目录。于是利用火绒的自定义防护监测行为,拦截除读取外的操作,如图1所示。
破解小白爆破Inpaint9.1全过程

1.png


运行软件,结果……火绒无任何提示,进temp目录也未发现释放的文件。很奇怪,这么大一个exe,到底是用什么写的?常规操作,PEID查壳,显示不是有效的PE文件,如图2。
破解小白爆破Inpaint9.1全过程

2.png


果然PEiD太老不好用了,于是换DiE,如图3,原来是Qt写的,无壳。
破解小白爆破Inpaint9.1全过程

3.png


[static linked]就是采用静态链接库,打包了引用的库,所以大一些。还能看出它是64位程序。实话实说,我是个零基础的破解小白,学过的所有知识仅限于yyhd老师的几篇帖子。而Inpaint看上去破解非常简单,正是适合我练习的程序。于是,我凭着初生牛犊不怕虎的精神,开搞!
摸索中前行
话不多说,直接拖进OD,我最熟练的就是这一步了。
破解小白爆破Inpaint9.1全过程

4.png


如图4,这个提示跟PEiD如出一辙,强行载入,呃……失败了,心里顿时很慌。猜测还是因为OD太老,听说x64dbg好用,就从爱盘下载,打开。界面比OD丰富许多,中文好评。再把软件拖进去,正常读取了。按F9直到左下角显示“运行中”,软件窗口出现。激活方式是输入序列号,随便输一串数字,如图6,提示“Serial-Key key is invalid. Please check all fields.”。
破解小白爆破Inpaint9.1全过程

6.png


显然,下一步就是搜索字符串了。那么问题来了,在x64dbg中如何搜索字符串?(不要笑话我,我就是这么小白。)百度搜索一番,原来是图7这样操作。
破解小白爆破Inpaint9.1全过程

7.png


稍等片刻加载完成,输入刚才的字符串,精准匹配!字符串没有加密,简直太幸运了。双击转到所在行,观察上面的跳转,有一个小跳,刚好跨过失败提示,还有三个大跳,如图9。
破解小白爆破Inpaint9.1全过程

9.png


哪一个才是关键?任选一个大跳往下看,实在太远了,而且发现关键字符串:“Thank you for registering!”,三个大跳无一例外跳过了,因此可以排除,小跳才是修改的关键。其实往上翻一点就可以发现,三个大跳都开始于另一个小跳内部。小跳还包含这一个字符串:“Can't connect to the server, please check your internet connection.”,如图10。
破解小白爆破Inpaint9.1全过程

10.png


显然,这个小跳是检测网络连接的,三个大跳的作用不去关心。顺手改一下,jne改成jmp无条件跳转,就绕过网络检测了。然而……指令怎么修改??照OD的操作双击代码,结果焦点转移到跳转的终点了。那鼠标右键单击,把菜单仔仔细细看了个遍,还是找不到。看似不起眼的步骤,居然把我卡住了。百度了半天,一无所获。难道真的修改不了?不知过了多久,至少十几分钟,在我束手无策之际,无意间按到了空格键,然后……我苦苦寻找的汇编窗口出现了。我真的十分不解,那么多教程,为什么没有一个人讲修改代码的快捷键?不要说什么常识,每个大牛都是从菜鸟成长起来的,对菜鸟而言,不存在常识。解决了这只本不该存在的拦路虎之后,暂时没有其他困难了。跳过网络检测和失败提示(都是改成jmp),再输一个序列号,这次的失败提示变成了“Get License Failed: Forbidden”,如图11。
破解小白爆破Inpaint9.1全过程

11.png


再次搜索,只能找到“Get License Failed: ”,而没有“Forbidden”。猜测一下,这一步是网络验证,冒号后面是验证服务器返回的信息(不难想到)。于是现在有两种方案:直接修改跳转,或者修改返回数据包。我对破解一知半解,对网络更是一窍不通,所以选择第一种方法。双击转到失败信息所在行,向上观察,又是一个小跳和三个大跳。应该修改哪个?很容易判断。因为,三个大跳都开始于刚才修改过的跳转内部,这三条语句肯定不会被执行。现在似乎发现了一个小规律:遇到三个大跳和一个小跳就修改小跳。虽然不一定正确,但一会说不定用得着。所以把小跳改成jmp,如图12。
破解小白爆破Inpaint9.1全过程

12.png


再次输入任意序列号,提示又变了:“This license is expired.Would you like to renew it now?”,如图13。
破解小白爆破Inpaint9.1全过程

13.png


直接搜索,只有一条结果。不纠结,点开看看。很奇怪,上面根本没有跳转,如图14。
破解小白爆破Inpaint9.1全过程

14.png


这可怎么办?机智的我想到:三个失败提示依次出现,那么我在第二个失败提示前的跳转下断点,然后单步跟进,应该会有新的发现。这一步真的是我自己想到的哈,不知道算不算技巧(我是一点技巧都没看过,全靠蒙,做对了纯属瞎猫碰上死耗子)。问题又来了,怎么找到刚才修改的位置?重新搜索字符串可以,但我忘了字符串是啥了,而且跳转已经修改过,得重新打开程序再修改一遍才能看到,太麻烦了。我搜索并研究一番,找到了捷径:按Ctrl+P或者菜单栏--文件--补丁,就显示出所有的修改。但分不清哪个才是,接下来点击“选择组”按钮,焦点就移动到修改处,上下查看代码就找到了,如图15。
破解小白爆破Inpaint9.1全过程

15.png


F2设置断点,然后输入序列号,程序果然断在期望的位置,如图16。
破解小白爆破Inpaint9.1全过程

16.png


F8单步运行,走了719行,有线索了:一个大跳将要执行,往下一看,“Thank you for registering!”所在的行被跳过了,如图17。
破解小白爆破Inpaint9.1全过程

17.png


这一步需要眼力和警觉,当然没看到也没关系。我以没看到为例,继续运行,发现跳转终点后三行的这个call与弹出提示有关。先按F9让程序自动运行,然后重复刚才的操作,单步运行到这个call前面(要是记不准位置就得多来几遍了)。这时候发现上方一个小跳刚好跨过这个call,如图18。
破解小白爆破Inpaint9.1全过程

18.png


不用说,改成jmp。再次运行,输入序列号,结果……毫无反应。按说激活成功应该有提示吧。处理一张图片试试效果,还是导出失败,说明并没有成功激活。现在的问题是不知道激活成功的提示是什么(假装刚才没看见),于是还是从刚才的断点开始跟着再走一遍。这次通过仔细观察,发现了注册成功的字符串和上方的跳转(来回翻翻就找到了),于是在跳转这一行右键--二进制--用NOP填充,如图19。
破解小白爆破Inpaint9.1全过程

19.png


再输入序列号,还是没反应。老办法,在刚才修改的行下断点,单步跟进,看看发生了什么。找到了,注册成功字符串上面三行有个跳转,而且将要执行,如图20。
破解小白爆破Inpaint9.1全过程

20.png


用NOP填充,然后,注册成功的提示就弹出来了!效果如图21。
破解小白爆破Inpaint9.1全过程

21.png


这里有个小问题,如果刚才发现了这个跳转,直接修改它,没有注意到expired提示的位置,那么在弹出成功提示之后还会弹出那个失败提示。其实这就说明,现在仍没有激活成功。再找张图片处理一下然后导出,还是不行。我会的办法都用上了,结果破解失败,看来这种方法行不通。总结失败的原因,激活成功的窗口确实弹出来了,但实际上并没有激活。说明光弹出窗口没用,我把目标搞错了:不是让它弹出激活成功的窗口,而是激活它。
明确目标,一针见血
走了好大一圈弯路,我从小白成长为一只菜鸟,熟悉了x64dbg的基本操作,摸索出一点技巧,也收获了失败的经验。在寻找新的思路之前,首先明确目标是什么。激活是为了使用软件的全部功能,实际上只要解锁受限的功能就可以了。刚才测试激活效果的时候我注意到,激活仅在导出文件时起作用,编辑过程不受限制。那么我只需分析导出图片的过程,绕过激活检测,就能达到目的。于是我打开一张图片,处理一下导出,看到了图22的提示。
破解小白爆破Inpaint9.1全过程

22.png


搜索字符串“This feature is available in registered version only.”,只有唯一结果。过去看看,太明显了,就是上面紧邻的跳转,如图23。
破解小白爆破Inpaint9.1全过程

23.png


把它改成jmp,再次尝试导出。结果又没反应,虽然没有提示,但文件并没有成功导出。有了之前的失败,我料到了这个结果。提示是表象,去除它是为了不妨碍下一步——研究导出的过程。因此,在刚才的修改处下断点,再次导出。程序断下来了,单步跟进。忽然看到一条陌生的指令ret,查了一下,原来它是call的结束,会返回到调用处。刚一返回,下面就出现了一个可疑的大跳。先往下看看,在跳转内部发现了JPEG,BMP,PNG等关键字符串,如图24。
破解小白爆破Inpaint9.1全过程

24.png


显然,这部分就是导出文件的代码。把这个跳转用NOP填充,然后自动运行。终于,我朝思暮想的保存窗口出现了!真是激动人心的时刻!缓慢而坚定地按下保存键,图片成功导出!打开看看,没有问题!顿时成就感爆棚啊!此时此刻,简直无法用语言形容我内心的喜悦了。至此,破解就算成功了。说实话,本来我以为恐怕会失败,结果真有点出乎我的意料。
一些小问题
刚才是以另存为的方式导出的,我又尝试Ctrl+S保存,结果不行。研究一番无果,没再深究,论坛的大牛有兴趣可以看下。另外,这个软件使用了联网验证,由此推测它在联网和断网环境下执行的效果不同。刚才一直在联网环境下调试,那么现在断开网络连接。把x64dbg完全退出,记得先导出补丁,方法是Ctrl+P--导出,一会儿导入即可。重新打开x64dbg,运行程序,导入补丁,F9自动运行,出现了图26的提示。
破解小白爆破Inpaint9.1全过程

26.png


还记得吗?这个提示刚才出现过。直接搜索字符串,找到两条结果。那么哪条才是这个提示所在的位置呢?很好判断,先退出x64dbg重进(方法同上),然后定位到修改过跳转的“Can't connect to the server”提示,在跳转下断点,如图28。
破解小白爆破Inpaint9.1全过程

28.png


然后F9自动运行,结果没有断下来。再输入序列号,运行中断了。现在明确了,两个提示虽然内容相同,但不是同一条代码。于是完全退出重进,搜索字符串,把另外一处提示上方的跳转(很好找)改成jmp,如图29。
破解小白爆破Inpaint9.1全过程

29.png


F9运行,提示变成了图30。
破解小白爆破Inpaint9.1全过程

30.png


搜索这个字符串“Check Server Status Failed”,只有一条结果。转到所在位置,上面又有四个跳转,如图31。
破解小白爆破Inpaint9.1全过程

31.png


三个大跳在刚刚修改过的跳转内,那一个小跳就是目标。三大一小的跳转前面已经出现两次了,为什么有这个特点,我搞不明白。总之,按照规律修改小跳,改成jmp。无意中往下一翻,发现这个跳转结束处后面有个字符串:“Server status OK”。看来这样修改是对的,现在导出补丁(切记),退出x64dbg,重新打开,导入补丁,现在没有任何提示了。这样就屏蔽了讨厌的弹出窗口,但联网功能没有去除(因为我不会)。最后一步,导出修改后的exe文件,Ctrl+P--修补文件即可。
总结
我这个破解小白,第一次破解一个不小的软件居然成功了,只能说运气相当好。软件没有加壳,也没有反调试。尝试破解激活失败后直接爆破导出文件过程,竟然得手,实在幸运之至。论坛里相关的帖子很少,还是很久以前的,都选择分析算法找出注册码的方法。由于新版使用网络验证,我猜测用注册码注册可能会失效。而我直接对保存文件的过程下手,直击要害,以新奇的思路克敌制胜。扬长避短,避开了技术上的不足。要不是出奇制胜,以我的技术怎能搞定这样一个复杂的软件?这次破解我最大的收获就是思路非常重要,而找到好思路的关键是明确目的。一个巧妙的方法,可以弥补许多技术的欠缺。还有,我凭直觉感到破解这个软件有可能成功,敏锐的眼光也是成功的一部分。
写在后面
破解用了一个晚上,写这个帖子又用了两天,终于完成了。其实破解这个软件一点也不难,肯定有人说我啰嗦。这不是技术帖,其实可以当作一篇入门教程。我只是详细记录了一个破解小白一点点摸索的过程,以及自己的体会。希望我的破解过程能给初学破解的小白一些启发。破解过程的不当之处,还请各位大牛不吝赐教。现在我算是踏入了破解的大门,今后会不断学习,成长为一只老鸟。
自己动手,丰衣足食。这句话永不过时。禁止发成品不见得是坏事,授人以鱼不如授人以渔。下载的只是一个软件,掌握了技术就有无数的软件。各位坛友不妨亲自操作一下,软件官网下载地址是https://download.theinpaint.com/windows/InpaintSetup.exe。欢迎大家提出更好的思路。如有会破解网络验证的大神,楼主一定去围观!
PS:图片哪来的?你自己想吧。