160个crackme之003 Afkayas 去VB程序NAG窗口方法-4C法
本帖最后由 pk8900 于 2017-5-31 20:31 编辑160个crackme之003 Afkayas 程序地址:http://pan.baidu.com/s/1dFuKnoH
程序要求:去NAG窗口,找出序列号算法
序列号算法已经有人发贴了,写的很详细,去NEG窗口好像没人说,我说在这里写一下,有正在学习的可以参考一下。
说到去这个程序的NAG窗口,我以前也从来没研究过,前段时间在论坛里下载了一个《使用 OllyDbg 从零开始 Cracking》教程(原贴:http://www.52pojie.cn/thread-338571-1-1.html),学习了一下,其中有一个文章是关于这个去NAG窗口的,好像对付VB程序很好用。
教程中起了个名字叫做4C法。
原程序启动有一个NAG窗口,若干秒后会自动关闭,打开主窗口。
OD载入程序:OEP处
VB程序有个特点-入口点处都是一个PUSH指令,然后一个CALL指令,看JMP 后面跟的MSVBVM50,应该是VB5.0编写的。(如果不是这种情况的话,那么该程序可能被加过壳), PUSH将要压入堆栈的是004067D4,现在我们在数据窗口中定位到这个地址。显示如下:
现在就要用至4C了,也就是从当前定位的地址往后偏移4C,数据窗口CRTL+G,输入4067d4+4c,显示如下:
数据窗口继续跟踪:00406820处的DWORD值,00406868,内容如下:
这里我们可以看到两块类似的数据,每块50(十六进制)个字节的长度,每块数据的第24(十六进制)个字节处都有一个标志(第一个是01,第二个是00)。该标志指定了每块代码(也就是程序启动后要加载的窗体)出现的顺序,先加载00,也就是我们要去的NAG窗口,再加载01,是主窗口。所以这里我们将各两个标志的值颠倒一下,01改00,00改01,二进制修改,保存文件,运行测试,NAG窗口去除了。
这个方法也适用一些有限制的VB程序,程序运行后会出现一个注册或提示限制的窗口,不能注册或解除限制就只能退出。用这个方法把主窗口优先启动,就能跳过限制。
这里我们可以看到两块类似的数据,每块50(十六进制)个字节的长度,每块数据的第24(十六进制)个字节处都有一个标志(第一个是01,第二个是00)。该标志指定了每块代码(也就是程序启动后要加载的窗体)出现的顺序,先加载00,也就是我们要去的NAG窗口,再加载01,是主窗口。
--------------------------------------------------------------------------------------------------------------
大佬小萌新还是不懂这个 00 和 01 怎么找到的 冥界3大法王 发表于 2019-8-10 11:39
@pk8900
老外有个文档里也是这么说的
https://forum.tuts4you.com/topic/24824-change-main-form-of-vi ...
这个不是我原创的,来自《使用 OllyDbg 从零开始 Cracking》教程(看雪上翻译发布的,原名《INTRODUCCIóN AL CRACKING》),不过这个法很好用,有点像易语言的PUSH大法。 还有这样神奇的方法?值得一试 看到NEG我一开始以为是笔误,但是NEG出现次数如此之多,能不能正确地打上NAG? :) xara 发表于 2017-5-31 20:26
看到NEG我一开始以为是笔误,但是NEG出现次数如此之多,能不能正确地打上NAG? :)
英语是跟体育老师学的,中考没及格,高中没去,单词都是硬记的,不会读,只会拼,见笑了。 感谢楼主分享这个经验!我之前用的是修改时钟资源Interval 7000ms为1ms,NAG出现的时间可以忽略不计,但也算不上完美去除。这个大概算一种很好的方法了。 先收藏了,可不可以发个001的,只找到一个注册码,另一个没找到 pk8900 发表于 2017-5-31 20:30
英语是跟体育老师学的,中考没及格,高中没去,单词都是硬记的,不会读,只会拼,见笑了。
我是喷子,感谢分享经验 :) 高手啊!感谢楼主的无私分享! 我想问一下怎么找到00406868这个位置的? xiawan 发表于 2017-7-11 16:46
我想问一下怎么找到00406868这个位置的?
VB程序开始第一个PUSH 的地址:4067d4 +4c,这个内存地址里的DWORD值就是