工具:OllyDbg
程序:某车游戏定时秒杀道具辅助
此程序是我的朋友写的,经他同意后发布,不带原程序和成品。
验证成功登录之后是这个样子
8M6EG$@@T}2$Y60[BWLCFMO.png (52.35 KB, 下载次数: 0)
下载附件
2022-1-2 18:54 上传
由于作者是我朋友,我提前得知有暗桩,验证非法后触发蓝屏,结束自身和删除自身。
那接下来我们就一一解决吧!
首先拖进OD,易语言程序我有个习惯,就是首先尝试push窗体。使用插件EWND枚举出8个窗口ID,挨个载入试试
屏幕截图 2022-01-02 185932.png (409.06 KB, 下载次数: 0)
下载附件
2022-1-2 18:59 上传
通过窗口push得知一下有效信息
1 52010001--------无响应
2 52012F9F--------编辑账号窗口
3 52012FA5--------编辑账号窗口
4 52019FBB--------无响应
5 52019FBC--------系统消息窗口
6 52019FBD--------无响应
7 5201B1C6--------超级文本整理窗口
8 5201B1C8--------发现新版本窗口
屏幕截图 2022-01-02 190617.png (423.23 KB, 下载次数: 0)
下载附件
2022-1-2 19:23 上传
看来EWND插件也不能push出主功能窗口,但是我不死心,我要到易语言体,找到启动程序载入的第一个窗口ID,再push一下试试。
Ctrl+B,输入FF25
屏幕截图 2022-01-02 191230.png (11.47 KB, 下载次数: 0)
下载附件
2022-1-2 19:13 上传
都知道啥意思吧?
在这里再测试一下我们用EWND获取的窗体ID,由于已经知道了2,3,5,7,8对应的窗体了,而且1是程序启动后载入的第一个窗体,也就是登录页面
那只要试试4和6也就是52019FBB和52019FBD
(ZMZ_{)UDAUT)RAFLQ@U3$V.png (257.92 KB, 下载次数: 0)
下载附件
2022-1-2 19:28 上传
LP@SQZHM5SM@XHCD_R2M)8F.png (226.01 KB, 下载次数: 0)
下载附件
2022-1-2 19:28 上传
4是登录界面,6也是系统消息界面
那么我们得知有效消息
1 52010001--------程序启动后载入的第一个窗口(登录界面)
2 52012F9F--------编辑账号窗口
3 52012FA5--------编辑账号窗口
4 52019FBB--------登录界面
5 52019FBC--------系统消息窗口
6 52019FBD--------系统消息
7 5201B1C6--------超级文本整理窗口
8 5201B1C8--------发现新版本窗口
从中得知1和4都是登录界面,其他也都不是主功能窗口,那主功能窗口去哪里了呢?另外4也就是52019FBB这个窗口ID很可疑,先留意一下。
我自己写了一个程序,想验证是否可以点击帮助按钮后,直接载入功能窗口呢?
YSFY[843H~DDS)V9`URR~L9.png (40.08 KB, 下载次数: 0)
下载附件
2022-1-2 19:57 上传
将此测试程序载入OD后分析
自己写的测试程序太简单了,都不用下按钮断点,就知道哪里是按钮事件了,我将帮助按钮的按钮事件全部nop掉,然后直接jmp到载入窗口的函数,结果为我按下帮助按钮后载入功能窗口
%5G(${NK[%IO_O@9JW%C(`3.png (573.6 KB, 下载次数: 0)
下载附件
2022-1-2 20:06 上传
同理,我也可以直接把登录按钮的按钮事件全部nop掉,直接jmp到载入窗口的函数。
回到主题,我可不可以把登录按钮的按钮事件nop掉,直接jmp到载入主功能窗口的函数呢?
通过下按钮断点(Ctrl+B搜索易语言按钮事件特征码FF 55 FC 5F 5E),一步一步跟踪到登录按钮的按钮事件头部,细心的我观察到了下面出现了很多4的窗口ID----52019FBB
]%DLUV[K}}DM)H5VKCYQDJT.png (219.35 KB, 下载次数: 0)
下载附件
2022-1-2 20:16 上传
本来就觉得可疑,又在登录按钮事件里看到了,我感肯定这个窗口ID就是主功能窗口的ID了,那我该怎么定位载入窗口的函数呢?
我的土方法是一个一个试,Ctrl+B搜索push 0x52019FBB,将所有搜索到的函数头部地址记录下来
00499B74 /. 55 push ebp
屏幕截图 2022-01-02 202102.png (100.87 KB, 下载次数: 0)
下载附件
2022-1-2 20:21 上传
00499BAE /. 55 push ebp
屏幕截图 2022-01-02 202208.png (88.68 KB, 下载次数: 0)
下载附件
2022-1-2 20:22 上传
有点多就不截图了,全部搜索并复制完共计36个
00499B74 /. 55 push ebp
00499BAE /. 55 push ebp
00499ECE /. 55 push ebp
0049A004 /. 55 push ebp
0049A02E /. 55 push ebp
0049A058 /. 55 push ebp
0049A088 /. 55 push ebp
004C48F2 /. 55 push ebp
004C5311 /. 55 push ebp
004C579B $ 55 push ebp
004C5988 /. 55 push ebp
004C617D /. 55 push ebp
004C6342 /. 55 push ebp
004C63F3 /. 55 push ebp
004C64CD /. 55 push ebp
004C8312 /. 55 push ebp
004C836B /. 55 push ebp
004C8399 /. 55 push ebp
004C83F2 /. 55 push ebp
004C844B /. 55 push ebp
004C84A4 /. 55 push ebp
004C84FD /. 55 push ebp
004C8556 /. 55 push ebp
004C85AF /. 55 push ebp
004C8608 /. 55 push ebp
004C8661 /. 55 push ebp
004C86BA /. 55 push ebp
004C8713 /. 55 push ebp
004C8CAC /. 55 push ebp
004C8D92 /. 55 push ebp
004C8DFC /. 55 push ebp
004C8E55 /. 55 push ebp
004C93A2 /. 55 push ebp
004C9528 /$ 55 push ebp
004C975F /. 55 push ebp
004C9983 /. 55 push ebp
这些地址就是包含了push 0x52019FBB的函数头部,不知道能不能理解为每一个地址都是一个子程序的开始?
接下来就是大工程了,先将登录按钮的按钮事件全部nop掉
屏幕截图 2022-01-02 203709.png (282.16 KB, 下载次数: 0)
下载附件
2022-1-2 20:38 上传
然后jmp到上面这36个地址,一个个地试,因为按照我的想法,总有一个是载入主功能窗口的。
屏幕截图 2022-01-02 203809.png (236.58 KB, 下载次数: 0)
下载附件
2022-1-2 20:39 上传
本以为是个大工程,没想到第二个就是呢?
哎呀,稀里糊涂的,怎么就给我进来了呢?以前也玩过撞库,没想到这也能撞对?
至此我们已经进入到主功能窗口了,点击启动,一个措不及防的蓝屏。
哈哈,原来启动还有个二次验证非法呢,蓝屏还是不好的,我们先将修改保存,然后转战到虚拟机吧。
防止我们调试的时候不小心触发暗桩了呢,先把蓝屏都去除吧,通过蓝屏探寻插件找到3处,我们定位过去把段首retn了,注意我这个retn后面的跟的参数是到段尾找到的,一定要首位对应
尾部是retn,那头部的push ebp也改成retn,如果跟参,那我们也把参数带上。比如此处就是retn 0x20
屏幕截图 2022-01-02 205158.png (275.95 KB, 下载次数: 0)
下载附件
2022-1-2 20:54 上传
三处都处理好之后,再点击启动就不会再触发蓝屏了,但是结束自身和删除自身还在呢?这个我没有处理,而是采用最简单原始的办法,备份原程序。
下按钮事件断点,断下之后F7进入CALL,就到了这个位置,这里就是启动按钮的按钮事件了,地址是0045EC7E先记录下来
屏幕截图 2022-01-02 205932.png (31.38 KB, 下载次数: 0)
下载附件
2022-1-2 21:00 上传
然后F8一步一步往下走,走到这里有一个很长的已经实现的跳转0045ECB4
屏幕截图 2022-01-02 210143.png (40.33 KB, 下载次数: 0)
下载附件
2022-1-2 21:02 上传
再一次F8,就跳转到这个CALL,
屏幕截图 2022-01-02 210804.png (200.61 KB, 下载次数: 0)
下载附件
2022-1-2 21:09 上传
本来想F7进这个CALL,结果手快按了一下F8单步跟踪,程序就终止了,而且释放了一个tem.vbs
哟呵,删除自身!
屏幕截图 2022-01-02 211654.png (57.62 KB, 下载次数: 0)
下载附件
2022-1-2 21:18 上传
那好办了,把那个已经实现的跳转0045ECB4给nop掉再点击启动按钮试试
屏幕截图 2022-01-02 211950.png (236.79 KB, 下载次数: 0)
下载附件
2022-1-2 21:20 上传
启动按钮的处理好了,接下来就是立即秒杀按钮的非法验证了,同样,下按钮断点后跟踪到立即秒杀按钮的按钮事件
image.png (176.45 KB, 下载次数: 0)
下载附件
2022-1-2 21:24 上传
然后F8单步跟,
屏幕截图 2022-01-02 212529.png (174.4 KB, 下载次数: 0)
下载附件
2022-1-2 21:26 上传
一个很长的,未实现的跳转,再F8一次到下面的CALL,程序就结束了,而且同样释放了tem.vbs。
JNZ是啥,不知道没关系,咱去百度搜,
JNZ不等于则跳转
JE 等于则跳转 同JZ JNE
屏幕截图 2022-01-02 213448.png (271.78 KB, 下载次数: 0)
下载附件
2022-1-2 21:35 上传
修改JNZ为je后,点击启动秒杀,提示请刷新飞车。
至此破解成功!