AfKayAs.2
新知识点:软件未注册或软件的试用版经常会弹出一些提示窗口要求注册,这些窗口被称为nag窗口。
概述
NAG窗口:在软件试用期过后,很可能屏蔽软件的正式窗口或某些具有重要功能的重要功能的窗口,从而使软件不能正常使用。NAG窗口可通过修改软件的窗体资源或者修改窗体所在代码来屏蔽窗体或强行跳过,使NAG窗口不再运行
三个学习的点:1、爆破 2、算法 3、取出NAG窗口
暴力破解
爆破的过程和之前的题是一样的,OD搜索字符串,然后找到关键跳转,nop掉它,保存成新文件即可。
算法的分析
开头下断位置:
第一部分,strlen(<注册名>) * 0x15B38 + ASCII(<注册名首字母>)
。
第二部分 转为整数,进行浮点数加减法,这里经过浮点数计算之后将之前的结果+2
第三部分 对结果*3 然后 -2
第四部分
第五部分
`def key(name) : strlen = len(name) s = (strlen*0X15B38+ord(name[0])+2)*3-2+15 print(s) name = input("name") key(name)
这样我们就成功搞定了注册码
去除NAG窗口
在我们双击打开程序后,会出现一个窗口,然后才会进入输入注册码的环节
在下载程序时,我们看到作者给出的信息是VB5,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窗口去除了。
希望大家可以有所收获!