从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漏洞的发现
一、前因: 在对一次公司的一个麻将游戏APP进行渗透测试的时候发现,抓到HTTP请求的接口,但是反编译APK后发现没有在本身发现任何一个关于接口或者域名相关的关键字,对此感到了好奇。 于是直接解压后everything搜索了一下ÿ…...
设计模式07-结构型模式(装饰模式/外观模式/代理模式/Java)
4.4 装饰模式 4.4.1 装饰模式的定义 1.动机:在不改变一个对象本身功能的基础上给对象增加额外的新行为 2.定义:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活 4.4.2 装饰模式的结构…...
C# 广播技术——发现局域网设备技术——
一广播技术应用 客户端发现与管理:软件可以通过广播消息来发现网络中的客户端,从而方便对客户端进行集中管理和监控。服务通知:向所有客户端广播重要的通知、更新或警告信息,确保客户端及时了解相关情况。资源共享与分配…...
【QA】windows和linux陷入系统调用后有什么区别?
最近被某面试官的这个问题拷打,当场脸烧起来… 首先讲讲系统调用: 系统调用是操作系统为调用者提供服务的接口,以便程序员聚焦于业务问题。分为文件操作,内存分配,进程管理等等。用户使用系统调用后会触发软中断&…...
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
链接:深度学习模型预测控制 (如果认为有用,动动小手为我点亮github小星星哦),持续更新中…… 链接:WangXiaoMingo/TensorDL-MPC:DL-MPC(深度学习模型预测控制)是基于 P…...
Anki插件Export deck to html的改造
在Anki中进行复习时,每次只能打开一条笔记。如果积累了很多笔记,有时候会有将它们集中输出成一个pdf进行阅读的想法。Anki插件Export deck to html(安装ID:1897277426)就有这个功能。但是,这个插件目前存在…...
csdn 记载文章十分缓慢
现象:其它网站能够正常访问,但只要点击某个 csdn 页面就会等很久 (本文只针对 csdn 网页,其他网页出现类似情况可以同样处理) 产生这种现象的原因: 这种情况很有可能是在访问 CSDN 主页时,需要向…...
python通过pyperclip库操作剪贴板
pyperclip介绍 pyperclip是一个python库用于操作剪贴板,可以非常方便地将文本复制到剪贴板或从剪贴板获取文本。 通过pip进行安装:pip install pyperclip pyperclip的github地址 pyperclip使用 复制到剪贴板 import pypercliptext "Hello, Wo…...
LSTM——长短期记忆神经网络
目录 1.LSTM 工作原理 2.LSTM的代码实现 3.代码详解 LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN),用于解决长序列中的长期依赖问题。它通过引入门机制,控制信息的流入、保留和输出&…...
10进阶篇:运用第一性原理解答“是什么”类型题目
在667分析题题型中,关于“如何做”和“好处是什么”的题目,许多同学都能较好地运用前述的667作答地图开展答题,但是唯独在“是什么”类型题目(也可以叫做认识型题目),不知从何下手。这种题目通常要求我们理解、分析,并展望未来的发展方向,而结构化、逻辑清晰的答案往往…...
【elkb】索引生命周期管理
索引生命周期管理 Index lifecycle management(索引生命周期管理)是elasticsearch提供的一种用于自动管理索引的生命周期的功能。允许使用者定义索引的各个阶段,从创建至删除。并允许使用者在每个阶段定义索引需要执行的特定动作。这些动作包含索引创建,…...
江协科技STM32学习- P25 UART串口协议
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
15分钟学 Go 第 22 天:包的使用
第22天:包的使用 欢迎来到Go语言的第22天!今天,我们将深入探讨如何创建和使用包。通过学习包的使用,你将能够更好组织你的代码,提高复用性和可维护性。 1. 包的概念 在Go语言中,包是代码的基本组织单位。…...
【Leecode】Leecode刷题之路第35天之搜索插入位置
题目出处 35-搜索插入位置-题目出处 题目描述 个人解法 思路: 1.依次遍历数组,看目标值是否在数组中 2.如果不在,将目标值插入数组(涉及到数组移动、扩容),返回下标代码示例:(Java…...
速盾:海外cdn高防
随着互联网的快速发展,网站的安全性和稳定性变得越来越重要。尤其是对于大型企业和电商平台来说,保护用户数据和维护网站稳定运行是至关重要的。为了应对日益增长的网络攻击和恶意访问,海外CDN高防服务成为了一种非常受欢迎的解决方案。 首先…...
图书管理系统(JDBC)
AdminUser是管理员类 NormalUser是用户类 AddOperation是增加图书类 BorrowOperation是借书类 DelOperation是删除图书类 ExitOperation是退出类 FindOperation是查找图书类 IOPeration是接口 ReturnOperation是还书类 ShowOperation是显示所有图书类 注意:…...
模板初阶及STL简介
目录 一.模板初阶 1.泛型函数 2.函数模板 1.函数模板概念 2.函数模板使用格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 3.类模板 1.类模板的定义格式 2.类模板的实例化 二.STL简介 1.什么是STL 2.STL的版本 3.STL的六大组件 4.如何学习STL …...
UE5 不同的编译模式下,module的组织形式
由于最近在琢磨UE5.4这个引擎,在学习过程中,碰到了一些非常有意思的事情,我在尝试把之前写的一些底层库搬到UE里面,比如底层库,网络库等等,我通过建立module,将这些库用源代码的方式整合进了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 微调 实验环境:…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
