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

从APP小游戏到Web漏洞的发现

一、前因:

在对一次公司的一个麻将游戏APP进行渗透测试的时候发现,抓到HTTP请求的接口,但是反编译APK后发现没有在本身发现任何一个关于接口或者域名相关的关键字,对此感到了好奇。
于是直接解压后everything搜索了一下,发现域名关键词在global-metadata.dat文件中

二、global-metadata.dat是什么?

global-metadata.dat是Unity游戏开发引擎在构建过程中生成的文件之一。它包含了游戏项目的元数据信息,如类和方法的名称、类型信息等。这个文件对于Unity引擎在运行时正确加载和解析游戏项目非常重要。通常情况下,开发者不需要直接处理或操作global-metadata.dat文件。
global-metadata.dat是Il2cpp翻译C++代码之后存放类型和符号信息的文件,libil2cpp.so文件就是应用业务逻辑所在的文件。将global-metadata.dat中的类型和符号信息解析出来定位到libil2cpp.so中才能更方便的去做逆向分析。
简单的说,global-metadata.dat是为了将代码安全存储所存在的中转的unity开发中的解析符号文件。

这也说明了该app采用了unity游戏引擎开发。

三、怎么来的?

首先Unity可以使用Mono和IL2CPP两种方式来打包出APK
1、Unity使用Mono方式打出来的apk,我们可以直接从包内拿到Assembly-CSharp.dll,如果开发者没有对Assembly-CSharp.dll进行加密处理,那么我们可以很方便地使用ILSpy.exe对其进行反编译。
2、如果使用IL2CPP方式出包,则没有Assembly-CSharp.dll,不过,有一个IL2CppDumper工具,通过它,我们可以逆向得到Assembly-CSharp.dll,然后再进行分析
简单的来说呢,我们需要利用IL2CppDumper这个工具来逆向global-metadata.dat,这个工具还需要libil2cpp.so文件

四、判断加密

global-metadata.dat头部信息,正常是AF 1B B1 FA 18。可以看该APP出来并未进行加密,因此就无需额外的对抗了

五、解密

https://github.com/Perfare/Il2CppDumper
https://github.com/AndnixSH/Il2CppDumper-GUI

Il2CppDumper.exe input\libil2cpp.so input\global-metadata.dat output

1、dump.cs

里面放的是方法和类名,以及字段
Assembly-CSharp.dll 和 dump.cs 的内容是一致的

2、script.json

以json格式显示方法,类名,也存在路由信息等

3、stringliteral.json

以json格式显示所有的字符串详情,这里是我们要的关键

4、Assembly-CSharp.dll文件

这个文件反编译出的c#代码,

只找到了接口但是不知道字段怎么办?在上面我们获取到了大量的web路由,以common-activity为例 ,我们可以通过关键词在dump.cs里找到GetCommonActivity以此获得它的参数可能为id

六、发现的漏洞

1)之后通过上述的信息发现了大量接口,部分接口已经是以前的老活动残留下来的,对于游戏来说,会经常上线一些活动,这些活动可以免费领取金币或者奖励,但是活动下架了接口却没有下架

例如发现了可能为历史福袋的接口,针对该接口进行了并发,成功实现了大量金币的获取
xxx/share/share-fudai-award

2)接口通用问题
通过上述发现了存在的大量接口后,由于是mj类游戏,因此公司存在大量的马甲包(发行体和玩法不一样,界面也不一样,但是后端接口基本是一样的套壳),例如福建mj和四川mj就可以拥有一样的后端API,但是长期运营的部门和人员可能不是一个。

因此也就产生了接口通用问题,拿A APP的接口去碰撞B APP的接口,从而达到某些隐藏接口的获取,例如金币可以大量获取。

利用隐藏接口无限触发可导致获取无限的金币

七、xxtea算法和信息泄露漏洞

很多小游戏都采用了Cocos2d-x进行开发,Cocos2d-x 衍生了很多版本,例如Cocos2d-lua ,Cocos2d-js,其中最流行的就是cocos2d-lua

例如某个APK程序解压后如下

assets目录下存放大量Luac,这些是编译后的lua文件,能直接被lua虚拟机直接解析
luac后缀是被编译过的lua脚本,也有可能是被编译然后再加密的(否则一下就被反编译了),而后缀也有可能不是luac,而是luax,luaxxxx等等,可以自定义

Cocos-2dx对于lua脚本加密提供了一种轻量级解决方案, 算法是xxtea,一般来说未经过二次处理的xxtea加密可以通过一下方式解密

xxtea官方加解密需要三个参数:
1、文件路径     2、加密sgin      3、加密key
解密脚本:https://github.com/lyzz0612/cocos_decrypt
1、获取sign
hexdump   -C  xxxxxx.luac  |  head -n 5 
2、获取加密key
strings libcocos2dcpp.so |  grep -i  sign值xxxx   -A 3 -B 3

八、解密后的作用

1)在lua文件中获取硬编码Key,例如以下lua直接获取了wx的secret

2)算法解密
在httpxxx.lua文件中一般存放和发送http请求相关的信息,如下所所示

在解密后即可通过关键字获取到信息

接着回溯方法,找到了相关的算法

算法值具象化为如下所示

md5Encode("request_key=" .. funtable.apihubKey .. "&request_time=" .. time .. "&request_secret=" .. funtable.apihubSecret .. "||" .. laterurl)  md5(request_key=50023.okevxyosgu&request_time=1678347337&request_secret=f2cf7xf11x689ed7bx397x7c0533fxd||{"phone":"","account":"iphone","weixin":"1","system":"29","phone_version":"29","phone_type":"020000000000","network":"","type":"1","package_id":"3010","game_version":"70406","content":"\"><111>\n","regtime":"1970-01-01 08:00:00","qq":"1","sdk_id":"xxxxx","numid":0,"ext":"{\"usertype\":7,\"device\":\"xxxxx\",\"lobbyver\":\"2.0.0.949\",\"logintype\":6}","areatypeid":3,"gameid":9,"areaid":5016,"images":"1"})

通过解密xxteam还原代码,再到获取签名解密,最后才能实现正常接口的抓包改包,发现更多的漏洞。

相关文章:

从APP小游戏到Web漏洞的发现

一、前因&#xff1a; 在对一次公司的一个麻将游戏APP进行渗透测试的时候发现&#xff0c;抓到HTTP请求的接口&#xff0c;但是反编译APK后发现没有在本身发现任何一个关于接口或者域名相关的关键字&#xff0c;对此感到了好奇。 于是直接解压后everything搜索了一下&#xff…...

设计模式07-结构型模式(装饰模式/外观模式/代理模式/Java)

4.4 装饰模式 4.4.1 装饰模式的定义 1.动机&#xff1a;在不改变一个对象本身功能的基础上给对象增加额外的新行为 2.定义&#xff1a;动态地给一个对象增加一些额外的职责&#xff0c;就增加对象功能来说&#xff0c;装饰模式比生成子类实现更为灵活 4.4.2 装饰模式的结构…...

C# 广播技术——发现局域网设备技术——

一广播技术应用 客户端发现与管理&#xff1a;软件可以通过广播消息来发现网络中的客户端&#xff0c;从而方便对客户端进行集中管理和监控。服务通知&#xff1a;向所有客户端广播重要的通知、更新或警告信息&#xff0c;确保客户端及时了解相关情况。资源共享与分配&#xf…...

【QA】windows和linux陷入系统调用后有什么区别?

最近被某面试官的这个问题拷打&#xff0c;当场脸烧起来… 首先讲讲系统调用&#xff1a; 系统调用是操作系统为调用者提供服务的接口&#xff0c;以便程序员聚焦于业务问题。分为文件操作&#xff0c;内存分配&#xff0c;进程管理等等。用户使用系统调用后会触发软中断&…...

Github 2024-11-01 开源项目月报 Top19

根据Github Trendings的统计,本月(2024-11-01统计)共有19个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目9TypeScript项目3JavaScript项目3Svelte项目1Jupyter Notebook项目1Ruby项目1HTML项目1Rust项目1Java项目1C++项目1Go项目1Python中的…...

Python实现深度学习模型预测控制(tensorflow)DL-MPC(Deep Learning Model Predictive Control

链接&#xff1a;深度学习模型预测控制 &#xff08;如果认为有用&#xff0c;动动小手为我点亮github小星星哦&#xff09;&#xff0c;持续更新中…… 链接&#xff1a;WangXiaoMingo/TensorDL-MPC&#xff1a;DL-MPC&#xff08;深度学习模型预测控制&#xff09;是基于 P…...

Anki插件Export deck to html的改造

在Anki中进行复习时&#xff0c;每次只能打开一条笔记。如果积累了很多笔记&#xff0c;有时候会有将它们集中输出成一个pdf进行阅读的想法。Anki插件Export deck to html&#xff08;安装ID&#xff1a;1897277426&#xff09;就有这个功能。但是&#xff0c;这个插件目前存在…...

csdn 记载文章十分缓慢

现象&#xff1a;其它网站能够正常访问&#xff0c;但只要点击某个 csdn 页面就会等很久 &#xff08;本文只针对 csdn 网页&#xff0c;其他网页出现类似情况可以同样处理&#xff09; 产生这种现象的原因&#xff1a; 这种情况很有可能是在访问 CSDN 主页时&#xff0c;需要向…...

python通过pyperclip库操作剪贴板

pyperclip介绍 pyperclip是一个python库用于操作剪贴板&#xff0c;可以非常方便地将文本复制到剪贴板或从剪贴板获取文本。 通过pip进行安装&#xff1a;pip install pyperclip pyperclip的github地址 pyperclip使用 复制到剪贴板 import pypercliptext "Hello, Wo…...

LSTM——长短期记忆神经网络

目录 1.LSTM 工作原理 2.LSTM的代码实现 3.代码详解 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;用于解决长序列中的长期依赖问题。它通过引入门机制&#xff0c;控制信息的流入、保留和输出&…...

10进阶篇:运用第一性原理解答“是什么”类型题目

在667分析题题型中,关于“如何做”和“好处是什么”的题目,许多同学都能较好地运用前述的667作答地图开展答题,但是唯独在“是什么”类型题目(也可以叫做认识型题目),不知从何下手。这种题目通常要求我们理解、分析,并展望未来的发展方向,而结构化、逻辑清晰的答案往往…...

【elkb】索引生命周期管理

索引生命周期管理 Index lifecycle management(索引生命周期管理)是elasticsearch提供的一种用于自动管理索引的生命周期的功能。允许使用者定义索引的各个阶段&#xff0c;从创建至删除。并允许使用者在每个阶段定义索引需要执行的特定动作。这些动作包含索引创建&#xff0c…...

江协科技STM32学习- P25 UART串口协议

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…...

15分钟学 Go 第 22 天:包的使用

第22天&#xff1a;包的使用 欢迎来到Go语言的第22天&#xff01;今天&#xff0c;我们将深入探讨如何创建和使用包。通过学习包的使用&#xff0c;你将能够更好组织你的代码&#xff0c;提高复用性和可维护性。 1. 包的概念 在Go语言中&#xff0c;包是代码的基本组织单位。…...

【Leecode】Leecode刷题之路第35天之搜索插入位置

题目出处 35-搜索插入位置-题目出处 题目描述 个人解法 思路&#xff1a; 1.依次遍历数组&#xff0c;看目标值是否在数组中 2.如果不在&#xff0c;将目标值插入数组&#xff08;涉及到数组移动、扩容&#xff09;&#xff0c;返回下标代码示例&#xff1a;&#xff08;Java…...

速盾:海外cdn高防

随着互联网的快速发展&#xff0c;网站的安全性和稳定性变得越来越重要。尤其是对于大型企业和电商平台来说&#xff0c;保护用户数据和维护网站稳定运行是至关重要的。为了应对日益增长的网络攻击和恶意访问&#xff0c;海外CDN高防服务成为了一种非常受欢迎的解决方案。 首先…...

图书管理系统(JDBC)

AdminUser是管理员类 NormalUser是用户类 AddOperation是增加图书类 BorrowOperation是借书类 DelOperation是删除图书类 ExitOperation是退出类 FindOperation是查找图书类 IOPeration是接口 ReturnOperation是还书类 ShowOperation是显示所有图书类 注意&#xff1a…...

模板初阶及STL简介

目录 一.模板初阶 1.泛型函数 2.函数模板 1.函数模板概念 2.函数模板使用格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 3.类模板 1.类模板的定义格式 2.类模板的实例化 二.STL简介 1.什么是STL 2.STL的版本 3.STL的六大组件 4.如何学习STL …...

UE5 不同的编译模式下,module的组织形式

由于最近在琢磨UE5.4这个引擎&#xff0c;在学习过程中&#xff0c;碰到了一些非常有意思的事情&#xff0c;我在尝试把之前写的一些底层库搬到UE里面&#xff0c;比如底层库&#xff0c;网络库等等&#xff0c;我通过建立module&#xff0c;将这些库用源代码的方式整合进了UE5…...

【ms-swift 大模型微调实战】

安装环境 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepip install modelscope vllm ‘ms-swift[llm]’ -U 下载模型 modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir ./Qwen2.5-7B-Instruct 微调 实验环境&#xff1a;…...

告别IBus!在Ubuntu 22.04上为Fcitx5安装搜狗输入法并设置自启动的完整流程

在Ubuntu 22.04上深度配置Fcitx5与搜狗输入法的现代输入方案 对于追求高效输入的Linux用户而言&#xff0c;输入法框架的选择往往决定了日常使用的流畅度体验。传统IBus框架虽然预装在大多数发行版中&#xff0c;但在中文输入场景下常显力不从心——词库更新滞后、云输入支持有…...

DiffSinger歌声合成:3大技术革新与完整部署指南

DiffSinger歌声合成&#xff1a;3大技术革新与完整部署指南 【免费下载链接】DiffSinger An advanced singing voice synthesis system with high fidelity, expressiveness, controllability and flexibility based on DiffSinger: Singing Voice Synthesis via Shallow Diffu…...

王晓玲越“激进”,长安马自达越尴尬:油改电没份,新能源没量

【文/深度评车&财经三剑客】当长安马自达执行副总裁王晓玲喊出"马自达电动化转型&#xff0c;合资中最激进"时&#xff0c;市场的反应却是一阵沉默——因为这句话&#xff0c;怎么听都像是一种自我安慰。 王晓玲的底气有二&#xff1a;一是长安马自达坚持不做油改…...

电源设计方案指南(含x86板卡专属,全场景适配)

电源设计方案指南(含x86板卡专属,全场景适配) 本指南为全场景电源设计提供完整落地路径,覆盖储能、工业、消费类、服务器、笔记本五大场景,整合x86板卡电源设计核心规范,从需求分析、拓扑选型、器件选型到场景适配、测试验证逐一拆解,嵌入DVFS、SVI3等专业术语并详解,…...

为什么四羟基合铝酸钠中的羟基明明是氢氧根离子却叫做羟基?

一、为什么四羟基合铝酸钠中的「羟基」明明是 OH⁻ 离子&#xff0c;却叫做「羟基」&#xff1f; 这是一个很好的概念辨析问题&#xff0c;涉及到配位化学命名规则与无机化学传统命名的差异。 1. 在配位化合物中&#xff0c;OH⁻ 作为配体时的名称就是「羟基」 在配合物&#x…...

STM32F407用HAL库驱动42步进电机,从CubeMX配置到代码调试的完整避坑指南

STM32F407 HAL库驱动42步进电机实战&#xff1a;从CubeMX配置到高效调试的完整指南 第一次用STM32F407的HAL库驱动42步进电机时&#xff0c;我花了整整三天时间才让电机转起来。最让我抓狂的是明明CubeMX配置看起来一切正常&#xff0c;TIM1通道就是死活不出PWM波形。后来才发现…...

CIO与CHRO携手合作,共同留住企业AI核心人才

Gartner上周发布的一项研究显示&#xff0c;到2027年&#xff0c;缺乏完善AI人才战略的企业&#xff0c;将有半数面临顶尖AI人才流失至竞争对手的风险。为完成这份报告&#xff0c;Gartner在今年第一季度对逾12000名企业员工和管理者进行了调研&#xff0c;重点了解AI对工作的影…...

2026年实用降AIGC软件:亲测AI率从90%降至4%的靠谱方案

一、前言&#xff1a;2026年毕业必过AIGC检测门槛 2026年国内高校对学术论文的AIGC疑似度审核全面收紧&#xff0c;绝大多数院校都发布了明确的AIGC检测数值要求&#xff1a;985、211院校规定本科论文AI率需低于20%&#xff0c;硕士论文AI率不得高于15%&#xff0c;普通高校也普…...

3分钟搞定B站评论分析:这个开源工具让你秒懂评论区用户身份

3分钟搞定B站评论分析&#xff1a;这个开源工具让你秒懂评论区用户身份 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分&#xff0c;支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...

别再用math.atan了!用NumPy的angle函数处理复数相位,效率提升不止一点点

别再用math.atan了&#xff01;用NumPy的angle函数处理复数相位&#xff0c;效率提升不止一点点 在信号处理、图像分析和科学计算领域&#xff0c;复数相位计算是基础但关键的操作。许多开发者习惯性地使用math.atan(y/x)来计算角度&#xff0c;却不知道NumPy提供的angle()函数…...