安卓逆向--某手游加密数据破解教程"

admin 2026-10-15 15:28:04 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

安卓逆向 -- 某手游加密数据破解教程

libbb
libbb

逆向有你

2026年10月13日 10:10
河南

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

初步分析

解压最新版apk,进入assets\\bundle目录下,这里面是该游戏的资源文件。可以看到都是.assetbundle的文件。

那么正常情况下,.assetbundle文件都是可以直接拖入asset studio中直接查看的,但是在这里我们会发现拖入没有反应,底下报错No Unity file can be loaded

那么这时候我们就有理由怀疑这个文件被加密过,让我们拖入010分析一下

此时我们可以看见,文件头是UnityKH1FS,那么这里就要查询相关资料

补充知识:.assetbundle 是 Unity 引擎中的一种资源打包文件。他的标准文件头有以下几种:

  1. UnityFS

(最常见)
2. UnityRaw
3. UnityWeb

可以看见,他这不是标准文件头,但是和标准文件头很接近,那么第一步思路就是

 复制代码 隐藏代码
会不会只是把 `UnityFS` 头改了几个字节,防工具识别?

考虑只改文件头恢复文件。我试过这一步但是失败了。
在这个头这里还能再分析:
如果是 AES / XXTEA 这类真正整包强加密,文件头往往应该接近随机,而不是还保留这么明显的 Unity 家族特征。
接下来就去找加密逻辑

native层分析

最开始我们要判断加密逻辑在 Java 层,还是在 native 层?我的判断是native层,原因如下:

  1. Java / dex 里没有明显命中相关字符串。
  2. 如果真是 Unity archive 的私有分支,最自然的地方就是 Unity 引擎自己的 archive 解析逻辑。
    所以重点就应该看:

libunity.so

因为 archive 解析、bundle 识别这些事情,本来就是 Unity 引擎自己做的。

  • libunity.so
  • libil2cpp.so
  • 业务 so
    而其中最优先的是:

那我们直接查壳,发现无壳就拖入ida。搜字符串UnityKH1FS

很明显找到字符

同时我们们在这得到了很多信息,发现还有其他的魔改头UnityKHFS,UnityKHNFS和标准文件头UnityFS (后面查看其他文件发现,在这个文件夹里确实有三种魔改,分别对应着这三种魔改头)
而且还能发现这里有两串可疑长字符串,看着长度很像64且验证后确实是64,那么他们很有可能是  key / 掩码表 / 置换表 / 常量表

那么就去跟踪谁调用了这串字符串,从我们最开始分析的UnityKH1FS开始跟

这里发现有5个函数调用他了,不多那就一个个看(gpt看)

读了以后发现:sub_50462C / sub_5047D8:识别头和读 header
无需理会
sub_505D54 构造默认头
无需理会

sub_505E8C :

并不是解密函数,而是一个与 archive 布局相关的偏移计算函数。函数先判断当前对象是否属于 UnityFS / UnityKHFS / UnityKHNFS / UnityKH1FS 这一家族,随后读取 flags(位于 a1 + 144)和某个基础偏移/长度字段(位于 a1 + 136)。其中最关键的逻辑是:

 复制代码 隐藏代码
if (flags & 0x200)
    v4 = (v4 + 15) & 0xFFFFFFF0;

这是一条非常典型的“向上按 16 字节对齐”的代码。它说明对于当前这类 Unity archive,后续关键数据区的起始位置并不一定紧跟 header 末尾,而可能需要先进行 16 字节对齐。

关键加密函数 sub_506D80
代码过长不贴了,很明显看if分支,
off_1858FA8是Unitykhfs
off_1858FB8是Unitykhnfs
off_1858FC0是aUnitykh1fs

 复制代码 隐藏代码
if ( v7 )
  {
    if ( (byte_43E968)(a3, off_1858FA8[0], 0LL) )
    {
      if ( (byte_43E968)(a3, off_1858FB8[0], 0LL) )
      {
        v7 = (byte_43E968)(a3, off_1858FC0, 0LL);
        if ( !v7 )
        {
        ...

这是部分函数,这里在判断是哪种头,然后不同的头进行不同的加密
加密逻辑抽象出来如下:

UnityKHFS

对缓冲区做一层循环 XOR:
buf[i] ^= KEY_A[i % keyA_len];

UnityKHNFS

对缓冲区做两层 XOR:
buf[i] ^= KEY_B[i % keyB_len];
buf[i] ^= bswap64(len)[i & 7];

UnityKH1FS

最复杂:

  1. 先做一次 sub_506C78
  2. 再按条件选择 KEY_A 或 KEY_B
  3. 再和 bswap64(len) 异或
  4. 然后分段多次 sub_506C78
  5. 最后整体再做一次 sub_506C78
    跟进去读sub_506C78,内部是一个区间反转 + 重排。我没仔细读,丢给gpt写解密了

至此所有加密逻辑都分析完毕,接下来只要逆着写脚本就好了(这一步依旧gpt)

效果展示(已打码)

结语

在最后发现好像还有挺多文件打不开的。看了下还有别的加密。不过到了汇编层面。就先不处理了。

·今 日 推 荐·

---
    安卓逆向--某手游加密数据破解教程" 网络安全文章

    安卓逆向--某手游加密数据破解教程"

    本文档为安卓逆向实战教程,分析某手游Unityassetbundle资源加密机制。通过识别魔改文件头UnityKH1FS等特征,定位至native层libunity.so,经IDA静态分析追踪关键函数,逆向出基于XOR、bswap64及自定义重排的混合加密算法,并编写解密脚本验证。文章提供了从文件头分析到汇编层逆向的完整思路,对类似Unity资源加密逆向具有参考价值。
    WAF日志之自动化AI分析" 网络安全文章

    WAF日志之自动化AI分析"

    本文介绍基于AWS的WAF日志自动化AI分析系统,通过Eventbridge定时触发Lambda提取WAF日志,结合规则匹配与AI行为分析识别攻击IP,利用AbuseIPDB提取威胁情报分,并设计自动释放逻辑避免长期封禁。文章提供Athena查询、IP分类、威胁情报查询等核心代码实现,并建议Athena采用分区以节省成本,适合中小型企业参考落地。
    Fortify静态应用安全测试(SAST)26.4" 网络安全文章

    Fortify静态应用安全测试(SAST)26.4"

    FortifySAST26.4发布,新增Kornshell脚本AI驱动扫描、Vue3预览支持、新应用分析器,扩展后量子密码学覆盖及多个语言框架支持。安全内容更新包括新漏洞类别和误报修复。建议团队更新工具链并注意规则包维护政策变更。
    评论:0   参与:  0