1.概述
作者:Afkayas
难度:★
保护方式:Nag,Name/Serial
运行程序,有几秒钟的弹框,过几秒自动消失
出现主窗口
随意输入用户名和序列号,点击ok,弹出对话框
2.算法
OD加载程序,用中文搜索引擎里的智能搜索搜到字符串"You Get Wrong",跳转到代码处,向上找到函数的起始处,下断点,运行程序后,在主窗口中输入用户名和序列号点ok,程序被成功断下。
第一次算法:0x15b38*用户名长度+用户名首字母ASCII码,最后转为10进制
第二次算法:第一次算出的值+(10.0/5)
第三次算法:第二次算出的值*3-2
第四次算法:第三次算出的值+15
我们以tutucoo作为用户名,计算出的序列号是:
1.0x15b380x8+0x74=711220
2.711220+2=711222
3.7112223-2=2133664
4.2133664+15=2133679
再以obama作为用户名,计算出的序列号是:
1.0x15b380x6+0x6f=444551
2.444551+2=444553
3.4445533-2=1333657
4.1333657+15=1333672
3.去Nag窗口
3.1 4C法
用OD加载程序,在入口点处有一个push
在命令行中计算? 4067d4+4c,得出0x406820,在数据窗口中跳转到0x406820处,存储的是0x406868
跳转到0x406868处
红箭头处是窗体的顺序,数字越大,顺序越靠后,所以将数字小的改成大的,大的改成小的,窗口启动的顺序就改变了。
右键->复制到可执行文件,将文件另存,打这个patch过的文件,Nag弹窗不见了。
3.2 SetTimer断点法
Nag窗口会停留几秒钟,可以猜测调用了SetTimer,所以在OD中给SetTimer打断点,运行断下来,观察堆栈。
可以看到Timeout=7000ms,说明Nag窗口停留的时间是7秒,我们只要将这个数字修改成0就可以去Nag窗口了,但是代码此时在系统领空,无法直接修改,不过我们可以借助WinHex工具来修改二进制。
记住Timeout处的值是0x581b00
在WinHex中搜索16进制数0x581b00,将它改为0x010000,改为0x000000窗口会一直存在,修改完后保存,重新打开程序Nag窗口已经不见了