160 个 CrackMe 之 102,103 - Acid_Cool_178 系列去 NAG 新方法应用!
160 个 CrackMe 之 102,103 - Acid_Cool_178 的两个 CrackMe 都是去除 NAG 弹窗,并且,两个 CrackMe 都是 P-code 形式的 VB 代码,我们这次不采用修改 p-code 代码的方式来破解,而是采用修改 VB 程序的数据结构中的数据来破除 NAG。理论则来自于我的另一个帖子。https://www.52pojie.cn/thread-1000513-1-1.html
上面的帖子中有对这方面的说明,这里只应用其方法。
首先看看第 102 个 CrackMe。
一、102 - Acid_Cool_178.vb1 的破解
方式1 - 删除事件法
我们用 VB Decompiler 打开该 CrackMe,如下图所示:
可以看到,是在 Form_Load() 事件中弹出的 NAG 弹窗,而且该事件没有其它可用代码,只有 NAG 弹窗的代码,我们只要去掉 Form 的 Load () 事件处理,就可以去除 NAG 弹窗。
按照我在 101 - CrackMe 的方法,找到 Form 的事件地址块,如下图所示:
将上面的事件地址清除,用 0 填充即可,如下图所示,就可以去除事件了:
保存后,我们再次反编译,如下图所示,Form_Load() 事件处理函数没有了,变成了一个未使用的函数了:
这样,就可以去除 NAG 弹窗,这种方式,适于方法代码可以全部去除的情况。
方式2 - 修改代码长度法
现在,我们使用另一种方式来去除该 NAG 弹窗,还是用 VB Decompiler 打开,如下图所示:
可以看到,事件代码开始地址为 0x00401A48,另外除了最后一条指令,前面的代码指令都是用来进行弹窗处理的。我们通过修改该事件的 p-code 代码长度来跳过弹窗代码。
在 VB Decompiler 中,Form_Load() 事件的名称显示为 Form_Load_401A74,而这个 401A74 就是在 101 CrackMe 中讲到的事件信息块的地址,这个地址指向事件代码的结束位置。
因此,我们可以算出该方法的p-code 代码长度为:
0x00401A74 - 0x00401A48 = 0x002C
就是説该事件的代码长度为 0x2C,如下图所示,也证实了这个数据:
我们就是要修改这个数据,从前的指令区可以看到,最后一条指令的地址是 0x00401A71,因此,最后的代码长度为:
0x00401A74 - 0x00401A71 = 0x0003
所以,我们只要把 0x002C 改成 0x0003,就可以完美跳过 NAG 弹窗的代码,如下图所示:
在 VB Decompiler 中点“保存”后就可以了。
这种方式适于事件或函数代码中最前面的代码为 NAG 代码的情况,也就是可以去除函数中最前面的代码,如果在中间或后面则不行。
二、103 - Acid_Cool_178.vb1a
在 102 CrackMe 破解中的第二种破解方式,正好也适于 103 的破解,如下图所示:
在其 Command1_Click() 事件中,所选部分是有效代码,显示另一个窗口,而未选择部分是显示 NAG 弹窗代码,需要去除,首先要计算代码长度,原有代码长度如下:
0x00401E30 - 0x00401DE8 = 0x0048
如下图所示,原有长度正是 0x0048 字节:
新的代码长度为:
0x00401E30 - 0x00401E11 = 0x001F
如下图所示,修改成 0x001F,再在 VB Decompiler 中直接“保存”,就可以了:
以上修改完成后,就可以去除 NAG 弹窗的显示了。
不过,根据窗口中 Label 及弹窗显示,第一个显示的 Form(Crackme) 是第1个 NAG,弹窗是第 2 个 NAG,只有第 2 个 Form (Done)才是有效表单,其它都要去除,因此,使用 4C 法调整显示顺序就可以了。前面的去 NAG 弹窗方式只是用来説明去除vb的方法或函数中最前面的无用代码的一种方法。
分析完毕!!!
写的好详细,赞一个。 给作者点赞,受教!!! 学习了,谢楼主分享
页:
[1]