XY_RE复现(三)

一,baby unity

查看目录,是经过il2cpp加密过的

使用Il2CppDumper提取文件,网上只看见提出apk中的libil2cpp.so文件,相当于

apk的dll,但我们需要解决的是exe,暂时卡住了,后面经过我的搜索,得到了GameAssembly.dll文件就相当于apk的那个.so文件,接下来就可以进行dump了

"C:\Users\sun\Desktop\xy\baby unity(1)\baby unity_Data\il2cpp_data\Metadata\global-metadata.dat"

结果output还是空的,看了一下,咔,dll文件被加壳了

得到Assembly-CSharp.dll这个文件。

嗯,有点复杂,先放在这里了。

接着继续搞,IDA打开GameAssembly.dll怪复杂的好像

1.file这一栏有Script file选项(Alt+F7)导入ida_with_struct_py3.py文件

"E:\dll_re\Il2CppDumper-net6-win-v6.7.40\ida_with_struct_py3.py"

2.再选择script.json文件

"E:\dll_re\Il2CppDumper-net6-win-v6.7.40\output\script.json"

3.接着选il2cpp.h

结果报错了:

不对,好像是在加载,好像挺慢的,只能等一下了。

还是没有啊

别人是这样的:

继续看了一下可能是metadata文件的问题。

metadata 文件后,放入查找十六进制的文件,如果开头魔术字依然是 AF 1B B1 FA,那么一般来说是没有被混淆的

但是也没有问题啊!

好吧,是ida打开GameAssembly.dll文件,Assembly-CSharp.dll还是用dnspy打开。

函数很多,一直在加载。

再按上述操作弄一下,可以先在dnspy打开Assembly-CSharp.dll找关键函数

终于出来了,就是太大了有点卡。

在checkkkflag( )里

在encrypt( )里,发现加密方式

cpp 复制代码
System_String_o *__stdcall Check__EEEEEEEEEEEEEncrypt(System_String_o *text, const MethodInfo *method)
{
  System_Text_Encoding_o *UTF8; // rax
  __int64 v4; // rcx
  System_Byte_array *v5; // rbx
  System_String_o *v6; // rax
  System_Char_array *v7; // r9
  unsigned int v8; // eax
  uint16_t v9; // dx

  if ( !byte_1813259E2 )
  {
    sub_1801E5570(&System_Convert_TypeInfo, method);
    byte_1813259E2 = 1;
  }
  UTF8 = System_Text_Encoding__get_UTF8(0i64);
  if ( !UTF8 )
    goto LABEL_12;
  v5 = (UTF8->klass->vtable._16_GetBytes.methodPtr)(UTF8, text, UTF8->klass->vtable._16_GetBytes.method);
  if ( !System_Convert_TypeInfo->_2.cctor_finished )
    il2cpp_runtime_class_init();
  v6 = System_Convert__ToBase64String(v5, 0i64);
  if ( !v6 || (v7 = System_String__ToCharArray(v6, 0i64), v8 = 0, v4 = 0i64, !v7) )
LABEL_12:
    sub_1801E57A0(v4);
  while ( v4 < SLODWORD(v7->max_length) )
  {
    if ( v8 >= LODWORD(v7->max_length) )
      sub_1801E5790();
    v4 = v8;
    v9 = v7->m_Items[v8++] ^ 0xF;
    v7->m_Items[v4] = v9;
    LODWORD(v4) = v8;
  }
  return System_String__CreateString_6450285200(0i64, v7, 0i64);
}

传入的字符串首先进行了base64编码,然后与0xF进行了异或

python 复制代码
import base64
enc=""
flag=""
str="XIcKYJU8Buh:UeV:BKN{U[JvUL??VuZ?CXJ;AX^{Ae]gA[]gUecb@K]ei^22"
for i in range(len(str)):
  enc+=chr(ord(str[i])^0xF)
print(enc)
flag=base64.b64decode(enc)
print(flag)
# WFlDVEZ7Mzg5ZjY5MDAtZTEyZC00YzU0LWE4NWQtNjRhNTRhZjlmODRjfQ==
# b'XYCTF{389f6900-e12d-4c54-a85d-64a54af9f84c}'

可以看看这篇[原创]IL2CPP 逆向初探-软件逆向-看雪-安全社区|安全招聘|kanxue.com

二,ez unity

只能使用frida-il2cpp-bridge了好像

vscode打开该文件夹

记frida-il2cpp-bridge的使用-CSDN博客

还不太会用,先学习一下。

好像还有一个hook问题,也学完再来写吧。

相关推荐
Monodye2 分钟前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光8 分钟前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
元气代码鼠9 分钟前
C语言程序设计(进阶)
c语言·开发语言·算法
霍霍哈嗨21 分钟前
【QT基础】创建项目&项目代码解释
开发语言·qt
friklogff22 分钟前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net
无名指的等待71232 分钟前
SpringBoot中使用ElasticSearch
java·spring boot·后端
Tatakai251 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis
武子康1 小时前
大数据-133 - ClickHouse 基础概述 全面了解
java·大数据·分布式·clickhouse·flink·spark
.生产的驴1 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
虚拟搬运工1 小时前
Python类及元类的创建流程
开发语言·chrome·python