从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还原代码,再到获取签名解密,最后才能实现正常接口的抓包改包,发现更多的漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【有啥问啥】视频插帧算法技术原理详解

视频插帧算法技术原理详解 引言 视频插帧&#xff08;Video Interpolation&#xff09;技术&#xff0c;作为计算机视觉领域的一项重要应用&#xff0c;旨在通过算法手段在已有的视频帧之间插入额外的帧&#xff0c;从而提升视频的帧率&#xff0c;使其看起来更加流畅。这一技…

【温酒笔记】DMA

参考文档&#xff1a;野火STM32F103 网友资料整理 1. Direct Memory Access-直接内存访问 DMA控制器独立于内核 是一个单独的外设 DMA1有7个通道DMA2有5个通道DMA有四个等级&#xff0c;非常高&#xff0c;高&#xff0c;中&#xff0c;低四个优先级如果优先等级相同&#xf…

精选云手机平台推荐:五大知名云手机品牌汇总

云手机目前已经在很多行业开始应用&#xff0c;特别是对于需要多设备操作、稳定性能和账号安全保障的用户。下面就为大家推荐几款优质云手机平台&#xff0c;一起来看看各大品牌有什么优势。 1. Ogphone云手机 Ogphone云手机凭借强大的海外网络连接和群控性能受到各行业用户的欢…

C++设计模式结构型模式———适配器模式

文章目录 一、引言二、适配器模式三、类适配器四、总结 一、引言 适配器模式是一种结构型设计模式&#xff0c;它在日常生活中有着广泛的应用&#xff0c;比如各种转换接头和电源适配器&#xff0c;它们的主要作用是解决接口不兼容的问题。就像使用电源适配器将220V的市电转换…

生产车间怎么管?设备、生产、物料管理方法更好

我们都知道&#xff0c;面对竞争激烈的大环境&#xff0c;生产车间对于企业的重要性不言而喻&#xff0c;它是企业发展的关键所在。 生产车间管理是一项复杂且系统性很强的工作&#xff0c;涉及多个重要方面。其中&#xff0c;人员管理是核心之一&#xff0c;员工作为生产活动…

Prometheus套装部署到K8S+Dashboard部署详解

1、添加helm源并更新 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update2、创建namespace kubectl create namespace monitoring 3、安装Prometheus监控套装 helm install prometheus prometheus-community/prome…

Redis 主从同步 总结

前言 相关系列 《Redis & 目录》《Redis & 主从同步 & 源码》《Redis & 主从同步 & 总结》《Redis & 主从同步 & 问题》 参考文献 《Redis的主从复制和哨兵机制详解》 概述 简介 主从同步的本质是数据复制机制。主从同步机制用于将master…

认证鉴权框架之—sa-token

一、概述 Satoken 是一个 Java 实现的权限认证框架&#xff0c;它主要用于 Web 应用程序的权限控制。Satoken 提供了丰富的功能来简化权限管理的过程&#xff0c;使得开发者可以更加专注于业务逻辑的开发。 二、逻辑流程 1、登录认证 &#xff08;1&#xff09;、创建token …

PCM5102A具有PLL和32位、384kHz PCM/I2S接口的2.1VRMS、112dB音频立体声DAC

PCM5102A外观和丝印 1 特性 1•超低带外噪声 •具有BCK基准的高性能集成音频锁相环(PLL)&#xff0c;可在内部生成SCK •直接线路电平2.1VRMS输出 •无需隔直电容 •线路电平输出支持低至1kΩ的负载 •智能静音系统&#xff1b;软斜升或斜降搭配模拟静音&#xff0c;实现120dB…

BUG的跟踪管理

目录 一、bug的类型 二、bug的等级 1、致命错误&#xff1a;------blocker 2、严重错误&#xff1a;------critical 3、一般错误&#xff1a;------major 4、细微错误&#xff1a;------minor 5、改进建议:------enhancement 6、bug类型及等级判断 三、bug的生命周期(…

Spring 框架环境搭建

一、环境要求 JDK版本&#xff1a; JDK1.7及以上版本 Spring版本&#xff1a; Spring5.x版本 二、新建Maven项目 1. 创建 Maven 的普通 Java 项⽬ 2.设置项目坐标 3.设置项目的Maven环境 4.设置项目的名称和存放的工作空间 三、调整项目环境 1.修改JDK版本 properties&g…

网络安全包含哪些方面?如何加强网络安全建设?

系统安全、应用安全、物理安全、管理安全等都属于网络安全。 从大的角度&#xff0c;如系统安全来看&#xff0c;可以理解为在系统生命周期内应用系统安全工程和系统安全管理方法&#xff0c;辨识系统中的隐患&#xff0c;并采取有效的控制措施使其危险性最小。这包括操作系统的…

qt QStackedLayout详解

QStackedLayout类提供了一种布局方式&#xff0c;使得在同一时间内只有一个子部件&#xff08;或称为页面&#xff09;是可见的。这些子部件被维护在一个堆栈中&#xff0c;用户可以通过切换来显示不同的子部件&#xff0c;适合用在需要动态显示不同界面的场景&#xff0c;如向…

【Web前端】JavaScript 对象原型与继承机制

JavaScript 是一种动态类型的编程语言&#xff0c;其核心特性之一就是对象和原型链。理解原型及其工作机制对于掌握 JavaScript 的继承和对象关系非常重要。 什么是原型 每个对象都有一个内部属性 ​​[[Prototype]]​​​&#xff0c;这个属性指向创建该对象的构造函数的原型…

基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Android OpenGL ES详解——裁剪Scissor

目录 一、概念 二、如何使用 1、开启裁剪测试 2、关闭裁剪测试 3、指定裁剪窗口&#xff08;位置和大小&#xff09; 4、裁剪应用举例 三、窗口、视⼝和裁剪区域三者区别 四、源码下载 一、概念 定义1&#xff1a; 裁剪是OpenGL中提⾼渲染的⼀种方式&#xff0c;只刷新…

江协科技STM32学习- P22 实验-ADC单通道/ADC多通道

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

【数据结构】树-二叉树-堆(下)

&#x1f343; 如果觉得本系列文章内容还不错&#xff0c;欢迎订阅&#x1f6a9; &#x1f38a;个人主页:小编的个人主页 &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ✌️ &#x1f91e; &#x1f91f; &#x1f918; &#x1f919; &#x1f448; &…

-XSS-

链接 https://github.com/do0dl3/xss-labs 搭建过程非常容易的 搭建好之后&#xff0c;就可以点击图片开始闯关了 第一关--JS弹窗函数alert() 显示payload的长度是4 level1.php?nametest level1.php?nametest1 发现只要改变name的值就显示什么在页面上 没有什么过滤的 …

【数据结构与算法】《Java 算法宝典:探秘从排序到回溯的奇妙世界》

目录 标题&#xff1a;《Java 算法宝典&#xff1a;探秘从排序到回溯的奇妙世界》一、排序算法1、冒泡排序2、选择排序3、插入排序4、快速排序5、归并排序 二、查找算法1、线性查找2、二分查找 三、递归算法四、动态规划五、图算法1. 深度优先搜索&#xff08;DFS&#xff09;2…