chuiyan121 发表于 2022-3-11 00:14

The047. 反汇编练习,适合破解新手的160个CrackMe [003] 之 [注册机+去NAG窗口]


The047. 反汇编练习,适合破解新手的160个CrackMe 之 [注册机+去NAG窗口]
反汇编实战练手,下面是我的学习记录,如有疑问欢迎交流指正。^_^

被试程序合集下载:帖子https://www.52pojie.cn/thread-1598336-1-1.html

0x0、查壳,无壳程序,VB语言编写。
https://s1.ax1x.com/2022/03/11/b5CaV0.png

0x2、OD载入,F9运行,首先弹出NAG窗口,几秒钟后切换到主窗口,输入假码,OK按钮,提示错误窗口。
https://s1.ax1x.com/2022/03/11/b5CNbq.png

0x3、不要关闭错误窗口,F12暂停程序,Alt+K打开调用堆栈窗口,在地址00408722处右键显示调用,切换至反汇编窗口rtcMsgBox弹窗调用处。
https://s1.ax1x.com/2022/03/11/b5Ctrn.png

0x4、来到反汇编窗口向上翻,程序很长,一直到004080F0函数头处,F2下断,F9一次激活主程序,再次点击OK按钮,程序运行到004080F0函数头如下图。
https://s1.ax1x.com/2022/03/11/b5CYKs.png

0x5、一顿漫长的F8,老规矩,仅记录关键点如下:
关键1 取输入的Name【112233】
https://s1.ax1x.com/2022/03/11/b5C82Q.png
关键2 真码?【533377】
https://s1.ax1x.com/2022/03/11/b5CdaV.png
关键3 真码变了??【533379】
https://s1.ax1x.com/2022/03/11/b5Cw5T.png
关键4 真码又变了???【1600135】
https://s1.ax1x.com/2022/03/11/b5CBPU.png
关键5 真码还变????【1600150】
https://s1.ax1x.com/2022/03/11/b5CDGF.png
之后没有看到值有大的变化了,将上面记录的几个数值带入程序测试,发现最后一个【1600150】是真码。
https://s1.ax1x.com/2022/03/11/b5C6M9.png

0x6、既然知道真码了,开始编写注册机(方法上集有介绍)。
https://s1.ax1x.com/2022/03/11/b5Cr24.png

0x7、运行生成的注册机123.exe,首先NAG窗口,然后主程序,输入假码,提示错误的同时注册机里真码已经提示。
https://s1.ax1x.com/2022/03/11/b5CRVx.png

0x8、接下来把那个烦人的NAG弹窗给去掉。去NAG有两种方法:一种是变相去除,一种是真正去除。如果NAG窗口没有影响程序的功能,则采用第一种方式,比较好理解;如果NAG窗口影响程序使用功能了,则采用第二种方式完全去除。下面来演示第一种曲线实现目标的方法:使用VBExplorer工具载入程序,选择CMSplash窗体,属性栏选择Timer1时间控件,Interval时间间隔为7000毫秒,在计算器中得出7000【十进制】=1B58【十六进制】。
https://s1.ax1x.com/2022/03/11/b5CsxJ.png

0x9、使用Hex WorkShop工具载入程序,搜索十六进制581B(在反汇编中高低位要颠倒,因此不是搜索1B58),找到Timer1控件附近的一处,这里的就是7000毫秒了。
https://s1.ax1x.com/2022/03/11/b5CcrR.png

0xA、手动修改581B为0100(同样高低位颠倒,实际为十六进制0001),即将7000毫秒改为1毫秒。将文件另存为2.exe,运行程序,发现NAG窗口瞬间闪过,变相实现了去NAG窗口了。
https://s1.ax1x.com/2022/03/11/b5Cgq1.png

0xB、接下来介绍第二种方法,变换窗口调用顺序实现去NAG窗口。这种方法还有个名称叫4C法,据说VB程序开始的PUSH地址加上4C,就是窗口加载的地方。我们来试一下,OD载入程序,看到第一行push地址为004067D4,在数据窗口Ctrl+G转到004067D4+4C处。
https://s1.ax1x.com/2022/03/11/b5CWa6.png

0xC、在数据窗口右键继续跟随DWORD。
https://s1.ax1x.com/2022/03/11/b5CfIK.png

0xD、此时数据窗口中出现两块类似代码,其中有两个标识,00代表先加载的窗体,01代表后加载的窗体。具体为什么是这样我也没弄明白,应该是VB的固定机制吧。
https://s1.ax1x.com/2022/03/11/b5C4PO.png

0xE、互换窗体加载顺序,00换成01,01换成00,让主窗体先启动,则实现了屏蔽NAG窗体的目的。
https://s1.ax1x.com/2022/03/11/b5C5GD.png

0xF、运行3.exe,成功去掉了NAG窗口。
https://s1.ax1x.com/2022/03/11/b5CoxH.png

在此感谢@pk8900大牛提供的解题思路。



1354272760 发表于 2022-3-11 01:31

CCQc 发表于 2022-3-11 07:40

感谢分享思路

yyb414 发表于 2022-3-11 07:54

思路是学习的核心,感谢

hkjmiao 发表于 2022-3-11 09:10

还是基础太差,感谢分享,学习了。

ricky2196 发表于 2022-3-11 09:57

学习了!多谢分享

elevo 发表于 2022-3-11 11:05

有点东西的,先看看

ongp1347 发表于 2022-3-11 19:32

大佬 VB不是被编译成伪码吗 请指教

chuiyan121 发表于 2022-3-11 20:31

ongp1347 发表于 2022-3-11 19:32
大佬 VB不是被编译成伪码吗 请指教

没明白你的意思{:1_907:}

ongp1347 发表于 2022-3-11 23:09

chuiyan121 发表于 2022-3-11 20:31
没明白你的意思

VB像Java的字节码 不是机器码
页: [1] 2
查看完整版本: The047. 反汇编练习,适合破解新手的160个CrackMe [003] 之 [注册机+去NAG窗口]