记一次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逆向相关推荐

  1. 记悠学派APP逆向及利用

    记悠学派APP逆向及利用 0×00 前言 0×01 逆向部分 抓包部分 登录 APK逆向 sign鉴权算法 0×02 功能实现 sign生成 软件实现 0×03 结论 0×00 前言 学校为促进学生们 ...

  2. 记一次js逆向详细过程

    目标网站 aHR0cHM6Ly9zdG9yZS5zdGVhbXBvd2VyZWQuY29tL2xvZ2luLz9yZWRpcj0mcmVkaXJfc3NsPTEmc25yPTFfNF80X19nbG9 ...

  3. 逆向入门--第一次的HelloWorld

    终于算是慢慢的爬入了逆向的大门,梦想虽远,坚持就好 记第一次简单的逆向过程 首先贴出CrackMe的源码,很简单的一个if而已 #include <stdio.h> #inclued &l ...

  4. 安卓逆向学习笔记(一)

    这些都是通过学长给予,以及网络上的资源来做的个人理解.总结,大牛们不要喷. 零基础小萌新在角落瑟瑟发抖的认真记笔记. 安卓逆向学习笔记(一) 写一个安卓程序(附上原帖链接教我兄弟学Android逆向0 ...

  5. 光伏并网发电教学实验

    太阳能光伏发电系统主要由太阳能光伏电池组,光伏系统电池控制器,逆变器,汇流箱和交直流逆变器是其主要部件.其中的核心元件是光伏电池组和控制器.各部件在系统中的作用是: (1)光伏电池:光电转换. (2) ...

  6. 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 ...

  7. cocos creator jsc 逆向解码为js

    cocos creator 下的jsc cocos creator 编译之后的所生成的jsc文件,虽然后缀是jsc,但其实和js虚拟机所执行的字节码(jsc)是二个不同的东西,只是使用xxtea对js ...

  8. 记一次安卓小程序sign的逆向

    记一次安卓小程序sign的逆向 ​ 最近因为疫情原因居家办公了,而且任务量比较大,其余的时间也都在学习,这次记录一个前几天遇到的一个特殊的sign值的逆向,之前写的安卓测试技巧阅读量还可以,可以看出大 ...

  9. 记一次逆向追踪请求ip的经历

    记一次逆向追踪请求ip的经历 事发 应急处理 寻找问题原因 封锁请求进入 定位请求的内网ip 事发 某日下午,部门使用的测试环境出现问题,所有集成测试case都执行失败.查询测试用服务器发现是磁盘已满 ...

最新文章

  1. 蓝桥杯-最大的算式(java)
  2. ASP.NET MVC 获取当前访问域名
  3. [NOIP2016]愤怒的小鸟(状压DP)
  4. !doctype html报错h5,【Web前端问题】javascript import 报错
  5. 领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践
  6. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...
  7. Nginx基本数据结构之ngx_array_t
  8. C语言 FileStreaming buffer
  9. IOS div上下滑动效果
  10. 吴恩达机器学习之单变量线性回归实现部分
  11. pythonclass全局变量_python类怎么定义全局变量
  12. C语言冒泡排序(从小到大排序)
  13. android视频播放的代码
  14. ROC-RK3328-CC开源主板运行LibreELEC系统
  15. android 如何发送短信,如何在android中发送短信
  16. 解决mmediting运行模型报错(result, consumed) = self._buffer_decode(data, self.errors, final)编码utf-8的问题
  17. latex转成mathml_使用MathML或LaTeX和MathJax探索跨浏览器的数学方程
  18. 手工搭建多层(多隐藏层)BP神经网络
  19. 三角形加几笔能变成什么_一个圆添上几笔能出来什么形状?例如:表,太阳,向日葵.-圆形加几笔得什么事物-数学-伍靖都同学...
  20. ICPC Latin American Regional – 2017 B题(模拟+思维)

热门文章

  1. python nameerror什么意思_我用Python编写的GTIN程序中的“NameError”是什么意思?
  2. 下列不属于C语言程序开发步骤,程序设计技术(C语言)-中国大学mooc-题库零氪...
  3. 【JZOJ4763】【NOIP2016提高A组模拟9.7】旷野大计算
  4. 保姆级教程:如何搭建一个专属云平台?
  5. mysql max_allowed_packet 到底什么意思
  6. 阿里云服务器java项目踩坑日记
  7. 视频图像处理基础知识4(视频分辨率参考 行频 隔行扫描 逐行扫描)
  8. 提升自信心的十五个心理暗示法
  9. 如何使用swing创建一个BeatBox
  10. 请听一个故事------讲述一段失败的创业经历 ,希望你能从中受到启发