吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 780|回复: 6
上一主题 下一主题
收起左侧

[Android 原创] 某手游加密数据破解教程(截止2026/4/12)

[复制链接]
跳转到指定楼层
楼主
libbb 发表于 2026-4-12 00:07 回帖奖励

某手游最新版本加密数据破解教程(截止2026/4/12)

初步分析

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

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

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


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

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

  1. UnityFS(最常见)
  2. UnityRaw
  3. UnityWeb

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

会不会只是把 `UnityFS` 头改了几个字节,防工具识别?

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

native层分析

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

  1. Java / dex 里没有明显命中相关字符串。

  2. 如果真是 Unity archive 的私有分支,最自然的地方就是 Unity 引擎自己的 archive 解析逻辑。
    所以重点就应该看:

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

    libunity.so

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

那我们直接查壳,发现无壳就拖入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_1858FA8Unitykhfs
off_1858FB8Unitykhnfs
off_1858FC0aUnitykh1fs

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_AKEY_B
  3. 再和 bswap64(len) 异或
  4. 然后分段多次 sub_506C78
  5. 最后整体再做一次 sub_506C78
    跟进去读sub_506C78,内部是一个区间反转 + 重排。我没仔细读,丢给gpt写解密了

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

效果展示(已打码)


结语

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
风子09 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
wangfan8023 发表于 2026-4-13 18:23
完全看不懂,可不可以解apk用手机操作,MT呀,NP呀
3#
 楼主| libbb 发表于 2026-4-13 19:37 |楼主
wangfan8023 发表于 2026-4-13 18:23
完全看不懂,可不可以解apk用手机操作,MT呀,NP呀

不行。他的加密逻辑在native层,要用ida去读取so文件,再写出解密脚本。
4#
guizi 发表于 2026-4-14 05:48
5#
wupeiwupei 发表于 2026-4-14 16:46
我嘞了个去啊~!
大佬,厉害~!
6#
wangfan8023 发表于 2026-4-14 17:43
libbb 发表于 2026-4-13 19:37
不行。他的加密逻辑在native层,要用ida去读取so文件,再写出解密脚本。

有一个卡密弹窗软件,你会去除弹窗不,APK没有加密
7#
 楼主| libbb 发表于 2026-4-14 21:35 |楼主
wangfan8023 发表于 2026-4-14 17:43
有一个卡密弹窗软件,你会去除弹窗不,APK没有加密

哪个啊,不知道没有尝试过
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-15 03:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表