记一次cocos逆向
记一次cocos逆向
- 为什么要想着去做逆向
- 何为逆向技术
- cocos逆向思路
- 准备工作
- 开始逆向
- 最后
为什么要想着去做逆向
有一次我在考虑怎么给游戏加密的时候,突发奇想,与其想着怎么加密,不妨看看那些搞逆向的是怎么破解的,正所谓知彼知彼,百战不殆。然后就开始了我的逆向之旅…
何为逆向技术
逆向技术是一项既庞大而又复杂的知识系统,上到密码学,下到各种编程语言系统,若想有大成,没个三年五载难是很难的。因此,我只是去了解了一下关于cocos的逆向,在此我借鉴了一下**https://www.freesion.com/article/1910938019/**这篇博客的一些思路,读者也可以了解一下,但是最后笔者发现这个学习资料太少,又花点时间了解了一下目前主流的逆向技术,最后还是选择了用hook,框架选择了frida,主要frida有不少的学习资料,使用也很方便。
cocos逆向思路
这里我只介绍用xxtea加密的(主要其它自定义的我也不会…)。
1.获取xxtea签名
2.获取xxtea key
3.用xxtea算法解密
准备工作
xxtea的签名能直接获取,主要工作是获取key。xxtea算法的key一般是写在c++层的,所以必须得分析c++的代码,一般我们逆向都是拿人家发布的游戏来做的,而且一般拿安卓的apk(不要问为什么),所以就要分析apk里的so文件。
而分析so文件就必须要反编译,所以我们需要IDA工具。我们主要分析so中xxtea解密算法接口所在的内存偏移地址,然后用hook技术截取到这个key,所以我们还需要搭建hook的环境。
所以需要准备以下工具:
1.下载并安装好IDA【官网链接】
2.一台root手机(笔者主要时间花在了这里…)
3.搭建好frida的hook环境【传送门】
要做到这三步也并非易事,这里关键是搭建frida环境,注意:
1.adb工具版本和手机支持的adb的匹配且能获取adb root(笔者在这里也花了点时间)。
2.frida的服务工具包的架构要和手机的cpu架构匹配,现在的手机基本arm64了吧。
3.注意so使用的指令架构,分thumb和arm指令,看IDA里的反编译的so相邻地址偏移量是多少,大于2是arm,反之都是thumb,thumb指令要在算接口内存中的地址时要+1。
开始逆向
1.获取xxtea签名:
用记事本随便打开一个加密文件,取前面几位明文,记录下来。
2.根据手机cpu架构分析so,拿到接口内存偏移地址
做cocos的都很熟悉引擎结构,很容易就能定位到xxtea解密接口的位置。这里的是我的手机是arm指令集,所以就是箭头所指的地址。
3.写hook脚本获取key:
到这一步前提是手机上已经运行了frida的服务端了,直接上脚本:
import frida
import sysrdev = frida.get_remote_device()
session = rdev.attach("游戏进程名")
script = session.create_script("""
Java.perform(function(){ var soAddr = Module.findBaseAddress("libcocos2dlua.so");//0x04000000;//Module.findBaseAddress("libcocos2dlua.so");send("soAddr:"+soAddr);var MD5Digest = soAddr.add(0xFE7B94)send("MD5Digest:"+MD5Digest)console.log("MD5Digest in libcocos2dlua.so addr:"+MD5Digest)Interceptor.attach(MD5Digest, {onEnter: function(args) {send('hooking...');send("arg0:"+args[0]+" arg1: "+args[1]+" arg2: "+args[2]+" arg3: "+args[3]+" arg4: "+args[4]+" arg5: "+args[5])send(Memory.readCString(args[2],9)) #args[3]的值}//, onLeave: function(retval) {// retval.replace(0); // Use this to manipulate the return value//}});
});""")
def on_message(message, data):if message['type'] == 'error':print("[!] " + message['stack'])elif message['type'] == 'send':print("[i] " + message['payload'])else:print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()
拿到xxtea的key,记录下来:
4.开始解密
让人激动人心的时刻终于到来了,这里我使用了一个xxtea工具【传送门】
最后
我是说如果,你还顺利的话,我得提醒你一下,逆向不注意,亲人两行泪。这里所做的其实只算是逆向中皮毛的皮毛,不过逆向也并不是那么得深不可测,逆向的领域也有很多,人生年不过百,希望你能在有限得时间内能在自己的领域有大成。
记一次cocos逆向相关推荐
- 记悠学派APP逆向及利用
记悠学派APP逆向及利用 0×00 前言 0×01 逆向部分 抓包部分 登录 APK逆向 sign鉴权算法 0×02 功能实现 sign生成 软件实现 0×03 结论 0×00 前言 学校为促进学生们 ...
- 记一次js逆向详细过程
目标网站 aHR0cHM6Ly9zdG9yZS5zdGVhbXBvd2VyZWQuY29tL2xvZ2luLz9yZWRpcj0mcmVkaXJfc3NsPTEmc25yPTFfNF80X19nbG9 ...
- 逆向入门--第一次的HelloWorld
终于算是慢慢的爬入了逆向的大门,梦想虽远,坚持就好 记第一次简单的逆向过程 首先贴出CrackMe的源码,很简单的一个if而已 #include <stdio.h> #inclued &l ...
- 安卓逆向学习笔记(一)
这些都是通过学长给予,以及网络上的资源来做的个人理解.总结,大牛们不要喷. 零基础小萌新在角落瑟瑟发抖的认真记笔记. 安卓逆向学习笔记(一) 写一个安卓程序(附上原帖链接教我兄弟学Android逆向0 ...
- 光伏并网发电教学实验
太阳能光伏发电系统主要由太阳能光伏电池组,光伏系统电池控制器,逆变器,汇流箱和交直流逆变器是其主要部件.其中的核心元件是光伏电池组和控制器.各部件在系统中的作用是: (1)光伏电池:光电转换. (2) ...
- Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画
Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStud ...
- cocos creator jsc 逆向解码为js
cocos creator 下的jsc cocos creator 编译之后的所生成的jsc文件,虽然后缀是jsc,但其实和js虚拟机所执行的字节码(jsc)是二个不同的东西,只是使用xxtea对js ...
- 记一次安卓小程序sign的逆向
记一次安卓小程序sign的逆向 最近因为疫情原因居家办公了,而且任务量比较大,其余的时间也都在学习,这次记录一个前几天遇到的一个特殊的sign值的逆向,之前写的安卓测试技巧阅读量还可以,可以看出大 ...
- 记一次逆向追踪请求ip的经历
记一次逆向追踪请求ip的经历 事发 应急处理 寻找问题原因 封锁请求进入 定位请求的内网ip 事发 某日下午,部门使用的测试环境出现问题,所有集成测试case都执行失败.查询测试用服务器发现是磁盘已满 ...
最新文章
- 蓝桥杯-最大的算式(java)
- ASP.NET MVC 获取当前访问域名
- [NOIP2016]愤怒的小鸟(状压DP)
- !doctype html报错h5,【Web前端问题】javascript import 报错
- 领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践
- Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...
- Nginx基本数据结构之ngx_array_t
- C语言 FileStreaming buffer
- IOS div上下滑动效果
- 吴恩达机器学习之单变量线性回归实现部分
- pythonclass全局变量_python类怎么定义全局变量
- C语言冒泡排序(从小到大排序)
- android视频播放的代码
- ROC-RK3328-CC开源主板运行LibreELEC系统
- android 如何发送短信,如何在android中发送短信
- 解决mmediting运行模型报错(result, consumed) = self._buffer_decode(data, self.errors, final)编码utf-8的问题
- latex转成mathml_使用MathML或LaTeX和MathJax探索跨浏览器的数学方程
- 手工搭建多层(多隐藏层)BP神经网络
- 三角形加几笔能变成什么_一个圆添上几笔能出来什么形状?例如:表,太阳,向日葵.-圆形加几笔得什么事物-数学-伍靖都同学...
- ICPC Latin American Regional – 2017 B题(模拟+思维)
热门文章
- python nameerror什么意思_我用Python编写的GTIN程序中的“NameError”是什么意思?
- 下列不属于C语言程序开发步骤,程序设计技术(C语言)-中国大学mooc-题库零氪...
- 【JZOJ4763】【NOIP2016提高A组模拟9.7】旷野大计算
- 保姆级教程:如何搭建一个专属云平台?
- mysql max_allowed_packet 到底什么意思
- 阿里云服务器java项目踩坑日记
- 视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)
- 提升自信心的十五个心理暗示法
- 如何使用swing创建一个BeatBox
- 请听一个故事------讲述一段失败的创业经历 ,希望你能从中受到启发