• il2cpp分析-gobal-metadata.dat解密


    gobal-metadata.dat解密

    工具:010Editor,IDA 7.5,Jadx,VS Code
    样本Last Island of Survival_6.3_Apkpure.xapk

    分析Il2cpp文件

    打开ida,把libil2cpp拖到ida中按快捷键Shift+F12等待字符串分析完后,搜索global-metadata.dat
    在这里插入图片描述

    双击搜索出来的结果
    在这里插入图片描述

    点击aGlobalMetadata 然后按快捷键X查看引用
    在这里插入图片描述

    选中sub_57E558+3C 然后点击Ok跳转
    在这里插入图片描述

    按F5 查看伪代码
    在这里插入图片描述

    对比il2cpp源代码分析加密位置

    VSCode打开il2cpp源代码,全局搜索global-metadata.dat
    双击搜索出来的结果,切记要选il2cpp目录下的
    在这里插入图片描述

    对比源代码和伪代码
    在这里插入图片描述

    发现

    sub_57EE7C("global-metadata.dat");
    
    • 1

    就是

    vm::MetadataLoader::LoadMetadataFile("global-metadata.dat");
    
    • 1

    ida中双击sub_57EE7C进入,VS code中也跳转到LoadMetadataFile函数
    根据字符串特征ERROR: Could not open %s 定位到Open函数

    os::File::Open(resourceFilePath, kFileModeOpen, kFileAccessRead, kFileShareRead, kFileOptionsNone, &error);
    
    • 1

    在这里插入图片描述

    接着根据源码对比,找出加密位置
    在这里插入图片描述

    算法分析

    根据特征
    while
    v15 = 0;
    v16 = 0;
    v15++
    ^=
    判断加密逻辑为根据文件的长度循环读取字节码做亦或加密
    亦或值从dword_2A26E10中获取
    大致加密逻辑为

    int v15 = 0;
    while(v15<文件流大小){
    	文件流[v15]^=dword_2A26E10[(v15/0x32)%50]
    	v15++;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    还原算法
    import struct
    
    if __name__ == '__main__':
        f = open('global-metadata.dat', 'rb')
        a = ""
        a = f.read()
        key = [0xFE, 0x98, 0xAB, 0xDE, 0x99, 0x76, 0x36, 0x33, 0xBC,
               0xFE, 0xAB, 0x65, 0xAD, 0x61, 0x97, 0xBE, 0x89, 0xAB,
               0xA, 0x93, 0x98, 0x8A, 0x2D, 0x93, 0x23, 0xDF, 0xB3,
               0x35, 0xD, 0x32, 0x4D, 0xE2, 0xE8, 0xDB, 0xE, 0xAE,
               0x8E, 0x3D, 0xA, 0xE9, 0xA8, 0xE8, 0xEB, 0x38, 0xEF,
               0xBD, 0xE8, 0x9B, 0x39, 0xE9, 0, 0]
        with open('global-metadata_fix.dat', 'wb') as fp:
            n = 0
            while n < len(a):
                num = struct.unpack("
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    测试结果

    在这里插入图片描述

  • 相关阅读:
    前端音频处理之AudioMass调研
    内部类概述
    win10语言切换调整为像win7一样,设置纯英文键盘切换,使用ctrol+shift切换键盘
    那些上线MES系统的企业都怎么样了?
    VBA 浏览文件夹对话框调用的几种方法
    Vue六(插件|Vuex的使用|购物车垮组件通信|Vue-route|路由跳转 携带数据 嵌套 守卫)
    【牛客编程题】GO语言入门46题
    入职中国平安三周年的一些总结
    【云原生之Docker实战】使用Docker部署家庭个人在线音乐平台
    Android:单Activity多Fragment,Navigation实现Fragment跳转,Fragment之间通过ViewModel共享数据
  • 原文地址:https://blog.csdn.net/Android_machong/article/details/132758130