调试通过关闭mutex实现多开的外挂样本

样本来自一个多开器外挂,启动并开启后可以重复开启游戏客户端。
分析后确定是通过关闭游戏进程的mutex实现的多开功能,也确定了游戏防止多开使用的是最常见的mutex方法。以下为对样本的分析过程。
 
运行程序
首先运行样本
开启成功
点击确定,主界面状态变化
 
 
载入样本
F9运行到主程序
查找字符串,在成功提示处下断点后运行,来到提示附近
往上翻看到启动器和游戏进程名
查看对应内存,除了游戏相关进程,还有一个Sessions\\1\\BaseNamedObJects\\COS。不知道是什么先放着,后来知道是一种常见防止多开的手段互斥量mutex。
开启多开后F8跟踪,运行该关键函数后多开生效
函数内容
继续跟踪进入缩小起效范围
在IDA查看该函数
参数lpWindowName为QQMicroGameBoxTray.exe
继续运行,findwindowA失败,之后通过获取程序快照的方式,从第一个进程开始比对
接着遍历快照中的进程,并将进程名与QQMicroGameBox.exe对比
在栈中观察被对比的进程名参数

直到出现了目标游戏盒子进程
和游戏进程比对后再次对比时process32next返回0,从而跳出循环去执行47d54e函数如图
打开QQMicroGameBox.exe并终止该进程
这时重复打开游戏登陆器成功,但重复登陆并不会多开,而是之显示旧的登陆界面
至此得知,函数sub_4cb9b实现了关闭指定进程,接下来样本对QQMicroGameBoxTray.exe执行了一样的查找并关闭操作至此处理完进程QQMicroGameBox.exe,接下来对进程QQMicroGameBoxTray.exe进行相同函数处理
 
接下来处理游戏进程CosClient.exe
结束Sessions\\1\\BaseNamedObJects\\COS,通过关闭游戏进程的mutex实现多开
之后会显示成功提示
此时重复打开游戏客户端成功
 
总结:使用mutex防止游戏被多开是最常用的一种简单方式,该游戏就是一个例子
 
参考资料:
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/Archimedes/p/14894619.html