type
status
date
slug
summary
tags
category
icon
password
腾讯游戏安全2023安卓初赛题解
1、绕过检测:
这里有着对frida和ida的检测,我搜索到了对frida和ida常用端口的检测,所以最简单的就是更换端口
2、il2cppdumper
因为是unity游戏,所以使用il2cppdumper进行恢复符号表是第一步的操作,但是使用dunper工具发现dump失败,显示让我输入,所以两个原因,不是metadata.dat文件被加密就是il2cpp.so文件被加密,但是经过查看metadata.dat他的开头符合正常的文件开头,所以大概率是正确的,所以关键就出在so文件那了,我选择在内存中dump这个so文件。
要内存dump首选的肯定还是frida进行内存dump,但是我没有选择在内存中搜索elf文件开头,然后解析文件结构的方式进行dump,而是选择在内存中对so文件所有的段进行dump,脚本如下:
这里有一个关键点就是
这里最好使用的就是Process,因为我最开始使用Module进行搜索,怎么都会漏掉一个段,所以还是使用Process比较好,问了一下Module的范围是比较小的
还有一个关键点就是
如果不使用这个的话可能会导致报错,显示越界,所以使用这个进行约束一下
dump下来就可以进行恢复了
tips:
这里学到一个,将dump出来未分段的文件patch到原来加密的so里面,然后重构一下代码,借鉴的一个师哥的代码(tql)
将这两个段的代码重新删除原来的定义同时重新生成函数
神奇的妙妙小脚本
恢复符号:
分别使用两个文件进行导入:
3、il2cpp.so分析:
外挂编写--flag获取:
从dump.cs中搜索coin可以看到一些函数:
通过偏移找一下函数
显而易见判断函数,我这里采用的时hook里面的getvalue的函数,然后会得到所有的值包括血量和刷金币都是1000,成功拿到flag
代码如下:
注册机分析:
总体加密流程解释:
在上面分析coin的时候往下翻可以看到有一个Smallkeyboard函数,“小键盘”听起来有点像我们在输入时的操作,可以全部hook一下看看什么功能
竟然函数还有混淆,这不就是说明等着我手动还原你吗
我hook1得到了我输入的东西,hook2得到了加密,所以2肯定是一个加密操作
但是得不到有用的东西,据说是动态回填的,只有动态执行到这个的时候才会出现代码
hook混淆smallkeyboard类代码
tips:
下面这个时c#中字符串的结构体,我们在对字符串进行打印hook时,要特别处理一下这些,需要解析一下结构体
hook代码如下:
可以得到一些提示就是根据OO0OoOOo这个混淆嘞找到一些加密函数,类似于opcode,这个是比较容易逆向的,就是指令混淆罢了,下面再细说
hookOO0类代码
再hook完这个之后,我去找了一下ooo这个混淆类
找一下这个混淆类,我可以搜到一些东西
看这个函数三个参数,像不像输入,key,输出
进去看一下
交叉引用一下看看有什么东西,往下翻到xtea的魔改,这个也好逆向
原本我接下来的操作是通过hook上面那个输入下面加密的代码的栈回溯来追踪他的调用栈,发现这个是徒劳,得不到什么有用的东西现在有点懂了,hook那个只能得到调用栈,
所以最终我对tea这个函数进行栈回溯,得到了一些东西:
得到了一些东西
发现有一个libsec2023的调用,所以肯定是调用完libsec.so之后的加密在调用libil2cpp.so的加密
libil2cpp.so逆向分析:
vm分析:
接下来就是逆向这样的代码,其实就是一些指令混淆,逆向起来还是比较好玩的
我通过将这些所有的类似于混淆的函数进行hook得到了他的加密流程:
先来分析一下他的vm指令是什么意思,他的指令混淆背后是什么东西
通过具体的数据进行猜测
hook代码如下:
得到流程:
我输入的是12345678
可见他前面肯定还是有其他操作的
他的加密算法就是这样,很简单
xtea分析:
下面我只给了解密代码,加密代码也是类似,我是用的c写的
先hook一下key的值
python的也有,毕竟都要写在一块
libsec2023.so逆向分析:
我们跳转过去看一下是什么加密
看看上面的函数里面是什么
这个是我手动改的
对于encde1,里面全是一个个小片段,根本看不出来逻辑
BR跳转分析:
全是一个个BR跳转,还是老方法分析呗,hook住所有的地址,进行查看
我得到了三个加密,其中一个四字节的,还有一个小函数还是有加密
unidbg调用
使用unidbg进行调用分析一下,unidbg真好用
正好学习使用一些unidbg
加解密代码:
可以得到一个加密:
encode2分析:
修改一下指针,改一个JNIEnv就行
可以看到这是调用java层代码,我们使用frida-dex-dump进行dump
得到一些代码,使用脚本给他归结到一起
然后放大到dex里面分析:
java分析:
因为jadx有混淆,但是jeb可以去混淆,但是还是有点乱,不过不影响看
直接提取关键代码进行分析:
最后代码如下:
最终加解密代码:
我们现在就可以简单分析一下他的加密了
解密代码我们反过来就行
- Author:xiaowaaa
- URL:https://www.xiaowaaa.asia//article/1675df8d-8884-80e6-a777-eb524d4d70e4
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!