Il2CppDumper v6.1.0

2020-03-06 1,833 ℃

距离上次在博客发布都要快一年了,这次因为又添加了一个新功能,所以在博客介绍一下。

ida脚本现在分为“ida.py”和“ida_with_struct.py”两个,使用“ida_with_struct.py”会载入“il2cpp.h”并在ida应用结构信息,包括变量,函数,虚函数表等等。

测试代码

public class Class1
{
    private int b;

    public Class1()
    {
        b = 1;
    }

    public virtual int Add(int a)
    {
        return b + a;
    }

    public virtual int Sub(int a)
    {
        return b - a;
    }
}

public class Class2 : Class1
{
    private int c;

    public Class2()
    {
        c = 2;
    }

    public override int Add(int a)
    {
        return c + a;
    }

    public override int Sub(int a)
    {
        return c - a;
    }
}

public class Class3
{
    public Dictionary<Class2, int> a = new Dictionary<Class2, int>();
    public static int b = 5;

    public int test(Class2 d)
    {
        var c = new Class2[255];
        c[50] = d;
        var e = d.Sub(b);
        a.Add(d, e);
        return e;
    }
}

使用脚本后ida F5 Class3.test函数,我已经添加了注释

int32_t __cdecl Class3__test(Class3_o *this, Class2_o *d)
{
  Class2_array *v2; // eax
  Class3_o *v3; // ecx
  Class2_array *v4; // edi
  Class3_c *v5; // eax
  int v6; // eax
  Il2CppObject *v7; // edi
  System_Collections_Generic_Dictionary_TKey__TValue__o *v8; // eax
  int v10; // eax
  int v11; // eax

  if ( !byte_1059BC60 )
  {
    sub_100CD270(1700);
    byte_1059BC60 = 1;
  }
  //var c = new Class2[255];
  v2 = (Class2_array *)il2cpp_array_new_specific(Class_Class2__, 255);
  v4 = v2;
  if ( !v2 )
    goto LABEL_18;
  if ( d && !sub_100CCFE0(d, v2->obj.klass->_1.element_class) )
  {
    v10 = sub_100CD1A0();
    sub_100CD380(v10, 0);
  }
  if ( v4->max_length <= 50 )
  {
    v11 = sub_100CD1E0();
    sub_100CD380(v11, 0);
  }
  //c[50] = d;
  v4->m_Items[50] = d;
  v5 = Class_Class3;
  if ( Class_Class3->_2.bitflags2 & 2 && !Class_Class3->_2.cctor_finished )
  {
    il2cpp_runtime_class_init((unsigned int)Class_Class3);
    v5 = Class_Class3;
  }
  //var e = d.Sub(b);
  v3 = (Class3_o *)v5->static_fields->b;
  if ( !d
    || (v6 = ((int (__cdecl *)(Class2_o *, Class3_o *, void *))d->klass->vtable._5_Sub.methodPtr)(
               d,
               v3,
               d->klass->vtable._5_Sub.method),
        v3 = this,
        v7 = (Il2CppObject *)v6,
        (v8 = (System_Collections_Generic_Dictionary_TKey__TValue__o *)this->a) == 0) )
  {
LABEL_18:
    sub_100CD3B0(v3);
  }
  //a.Add(d, e);
  System_Collections_Generic_Dictionary_TKey__TValue___Add(v8, (Il2CppObject *)d, v7);
  //return e;
  return (int32_t)v7;
}

注意对于函数中实例化的局部变量,ida没法正确判断类型,需要手动指定类型。

虽然脚本已经经过了多次测试,但是也不能保证不会报错,其中“apply_type failed”这个错误可以无视,因为ida也不给具体的错误原因,修都不知道从哪里修,其他错误的话欢迎在github或者这里反馈。

ghidra的脚本不支持载入“il2cpp.h”,因为我暂时懒得去翻ghidra的文档了,等等看有没有大佬帮忙完善一下(

最后惯例

下载地址

百度云

Latest Build版本

源码

GitHub

双生视界Live2D提取

总算是回到家了,差点就要把这篇文章咕掉了。 在github上有人提双生视界Live2D解出来的文件载入显示有问题时,UnityLive2DExtractor的代码还没写完,所以先用...

阅读全文

UnityLive2DExtractor

摸了好久终于是把这玩意摸完了。 程序在原本AzurLaneLive2DExtract基础上,除了一些bug修复和细节完善,最主要的是实现了physics3.json的还原,这样其他游戏...

阅读全文

Il2CppDumper v4.4.2

程序已更新,有任何问题请去最新文章下留言 最近一段时间又更新了一下Il2CppDumper,除了支持switch的NSO格式外,最主要的还是完整处理了下MetadataUsage,现...

阅读全文

14 条评论

  1. Initializing metadata…
    Metadata Version: 24.2
    Initializing il2cpp file…
    Detected this may be a dump file. If not, it must be protected.
    Input dump address:
    bbec0000
    Il2Cpp Version: 24.2
    Searching…
    System.IO.EndOfStreamException: 无法在流的结尾之外进行读取。
    在 System.IO.__Error.EndOfFile()
    在 System.IO.BinaryReader.FillBuffer(Int32 numBytes)
    在 System.IO.BinaryReader.ReadUInt32()
    在 Il2CppDumper.PlusSearch.FindCodeRegistration32Bit2019()
    在 Il2CppDumper.Elf.PlusSearch(Int32 methodCount, Int32 typeDefinitionsCount)
    在 Il2CppDumper.Program.Init(Byte[] il2cppBytes, Byte[] metadataBytes, Metadata& metadata, Il2Cpp& il2Cpp)
    ERROR: An error occurred while processing.
    Press any key to exit…

  2. 大佬。用你的Il2CppDumper v6.1.0给il2cpp.so dump出来后,用ida反编译il2cpp.so
    完成后导入il2cpp.so的脚本,到这里就没有可以导入的脚本了,这个版本怎么导入呢,求大佬指教一下。

  3. 大佬你好,之前你所写的双生视界的Live2d提取方法能用到约战.精灵再临这款游戏里的看板提取吗, :!: 我怀疑它里面的physics3文件也经过了加密,可我不知道怎么解出来,游戏虽然不怎么样但它里面的高级看板还是挺精美的,求大佬解答

  4. 双生视界dump不出来,出现下面错误,请问是什么原因
    Initializing metadata…
    Metadata Version: 24.1
    Initializing il2cpp file…
    Applying relocations…
    WARNING: find .init_proc
    ERROR: This file may be protected.
    Il2Cpp Version: 24.1
    Searching…
    CodeRegistration : 3ca5074
    MetadataRegistration : 3ca50ac
    System.IndexOutOfRangeException: 索引超出了数组界限。
    在 Il2CppDumper.Il2Cpp.Init(UInt64 codeRegistration, UInt64 metadataRegistration)
    在 Il2CppDumper.Il2Cpp.AutoInit(UInt64 codeRegistration, UInt64 metadataRegistration)
    在 Il2CppDumper.Program.Init(Byte[] il2cppBytes, Byte[] metadataBytes, Metadata& metadata, Il2Cpp& il2Cpp)
    ERROR: An error occurred while processing.

  5. ghidra的脚本要怎么用?我下了ghidra最新版,但是不知道怎么导入这个脚本。直接导入的话,选择Language应该选哪个?

欢迎留言

6 + 5 =