当前位置: 首页 > news >正文

某端游外挂网络验证的分析与破解思路

前言

去年年底的时候,听说该游戏出现了一个挂号称可以无限刷爱心(游戏货币),于是从朋友A那里要来了样本,折腾半天干掉了网络验证部分,结果一顿分析完之后发现该功能的实现原理十分不优雅,放国内游戏厂商估计老早ban掉了...这里就把其网络验证部分的分析和破解思路分享出来吧,整个流程还是挺有意思的

分析

国际惯例,DIE启动,可以看到加了个SE壳

启动dump一下,丢IDA分析,看代码特征能看出来是易语言写的,还有经典的一堆VMProtect标记,大概是网络验证模块里的代码自带的,代码也没有任何被vm的地方,那就简单了

首先要解决第一个问题,因为出了一些意外被作者抓到有人破解了他的大宝贝,所以有一个关键云端文件被清空了,现在直接打开会报一个错误

HTTP Debugger抓包看一下,从云端获取了SSSSSPRO.json这个文件

当时第一次破的时候忘记把文件内容存下来了,所以后面在这里折腾了好一会,去分析代码又太麻烦。这时突然就灵机一动,他既然有PRO,那会不会还有不带PRO的版本呢?

诶试了一下他还真有,格式是一模一样的

然后又折腾好一会猜一下对应字段的意思

1

2

3

4

5

6

7

8

9

10

11

{

"SM":"d54bca47c7d6fa5247dd8f9cadd2ac5e1",// Software MD5

"UM":"b27d69cf88e09e919328b0a2bada77c8",// Updater MD5

"DB": 1131533037,// unknown

"ZB": 1,// unknown

"MRDB": [// 每日代币数据

...

],

"clickPic":"...",// 点击图片跳转的链接

"notice":"..."// 公告

}

那么本地起个server简单模拟一下数据,然后将程序对应的url替换了就可以了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

fromflaskimportFlask, jsonify, make_response

app=Flask(__name__)

@app.route('/pc/SSSSSPRO.json', methods=['GET'])

definit():

d=jsonify({

"SM":"8e8b5927c023c6c04689c94f3b96269b",

"UM":"0974868e7f92234dfab0ccc9d37f2c28",

"DB":1131533037,

"ZB":1,

"MRDB": [

],

"clickPic": "",

"notice": ""

})

res=make_response(d)

res.status_code=200

returnres

if__name__=='__main__':

app.run(host='0.0.0.0', port=8818, debug=False)

为了后面方便,我这里直接选用注入frida gadget的方案了,但又懒得写劫持注入,所以写了个loader.exe,CreateProcess启动外挂主程序后立刻把gadget.dll注入进去

hook.js

1

2

3

4

5

varurl_addr = ptr("0x0057B54E")

varurl ="http://127.0.0.1:8818/pc/SSSSSPRO.json"

Memory.protect(url_addr, url.length,"rw");

Memory.writeUtf8String(url_addr, url);

gadget.config

1

2

3

4

5

6

{

"interaction": {

"type":"script",

"path":"hook.js"

}

}

现在双击loader.exe启动,就不会再弹那个错误了,剩下的卡密验证部分,当然可以选择逆向找到验证点修改跳转,但那还是太吃操作了,有没有更简单的方法呢?有的兄弟有的

先定位到接口url

然后用密探扫一下子域名

https://doc.*.com/就是目标使用的网络验证的接口文档,里面还给了sign的计算方式和加解密算法,加入文档的QQ群也可以获取到其他语言的SDK,再结合抓包得到的数据其实就可以自己写一个server把他对接过来了

但实际写的时候不知道哪里出了问题,一直报数据异常,但又懒的去调试了,所以这里又去换了条路。

https://web.*.com/这个就是其网络验证后台登录地址,他是允许任何人去注册的,这不就省去我自己写server的麻烦了

注册之后自己新建一个软件,然后生成配置,加密算法默认rc4,

然后修改hook.js替换对应配置值就行了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

varurl_addr = ptr("0x0057B54E")

varurl ="http://127.0.0.1:8818/pc/SSSSSPRO.json"

varapp_key_addr = ptr("0x0057B6FA")

varapp_key ="*"

varrc4_key_addr = ptr("0x0057B73C")

// rc4_key = rc4key+客户端签名

varrc4_key ="*123[data]456[key]789"

varkey_addr = ptr("0x0057B714")

varkey ="*"

Memory.protect(url_addr, url.length,"rw");

Memory.writeUtf8String(url_addr, url);

Memory.protect(app_key_addr, app_key.length,"rw");

Memory.writeUtf8String(app_key_addr, app_key);

Memory.protect(rc4_key_addr, rc4_key.length,"rw");

Memory.writeUtf8String(rc4_key_addr, rc4_key);

Memory.protect(key_addr, key.length,"rw");

Memory.writeUtf8String(key_addr, key);

给自己生成几个永久卡玩玩

至此就破解完毕了

总结

整个流程下来难度其实不大,没有太多逆向的地方,主要是思维的发散了。还有那两个猜测的点,想不到的话就只能硬干了,如果能把server模拟出来当然是最好的。

http://www.cnnetsun.cn/news/1291207.html

相关文章:

  • 探索双级式储能模型:充放电转换、低电压故障穿越与负序抑制
  • Dropout(0.5) 的本质
  • TADA: A Generative Framework for Speech Modeling via Text-Acoustic Dual Alignment
  • 谈工业品迭代规律与开发者创业逻辑
  • Anaconda的安装和使用Anaconda配置python
  • 深耕20年实话实说:化工园区安全整治,真不是“花架子”
  • 如何清除OpenClaw的记忆
  • 搞工控的老铁对安川MP7系列肯定不陌生,这货在产线上跑得比双十一快递还勤快。今天咱们扒开它的源码裤衩,看看那些藏在十六进制背后的骚操作
  • Blender导出FBX到Unity坐标轴异常问题解决(亲测有效)
  • Julia 交互式命令详解
  • 课程顾问任务调度与转化率分析看板
  • 收藏!Java 后端转 AI 大模型开发?结合自身优势才是最优解
  • 【java基础难点:“反射“】别再觉得它难了!一文让你彻底理解!
  • frp 内网穿透工具详细使用指南
  • 三大Java工具库:Hutool vs Guava vs Commons
  • 【量化工具推荐】期货量化交易品种与合约信息平台对比
  • StepFun团队首创图像生成模型的“虚拟GUI环境“评测基准
  • 【量化工具推荐】期货量化交易等待与驱动机制平台对比:8款平台深度分析
  • 避开渲染坑!有哪些靠谱的云渲染平台值得选?
  • 2026最新Postman安装教程[简单易懂]附安装包
  • OpenClaw部署失败怎么办?云服务器常见问题汇总
  • ABoVE:加拿大西北地区土壤有机质的燃烧严重程度,2014-2015 年
  • 从「设计优先」到「实践优先」:构建自学习 AI Agent 的技能生态系统
  • ros2 jazzy下的gazebo仿真与moveit
  • JAVA三大版本与JDK、JRE、JVM
  • 题目2267:蓝桥杯2016年第七届真题-取球博弈
  • 导远科技 × 银河通用 —— 车规级 IMU 赋能具身智能机器人场景
  • Maven依赖下载网址
  • 面试常问:TCP相关(中级篇)问题原因即解决方案
  • Flutter 三方库 lyrebird 的鸿蒙适配指南 - 录制与回放网络流量、在鸿蒙端实现极致的离线仿真自动化测试