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问题,也学完再来写吧。

相关推荐
迦蓝叶15 小时前
JAiRouter 0.8.0 发布:Docker 全自动化交付 + 多架构镜像,一键上线不是梦
java·人工智能·网关·docker·ai·架构·自动化
lljss202015 小时前
C# 每个chartArea显示最小值、平均值、最大值
开发语言·c#
yzpyzp15 小时前
kotlin的函数前面增加suspend关键字的作用
android·开发语言·kotlin
jiet_h15 小时前
Android Kotlin ObjectAnimator 和 ValueAnimator 全面解析
android·开发语言·kotlin
im_AMBER15 小时前
Leetcode 18 java
java·算法·leetcode
Q_Q196328847515 小时前
python+springboot大学生心理测评与分析系统 心理问卷测试 自动评分分析 可视化反馈系统
开发语言·spring boot·python·django·flask·node.js·php
Android技术之家15 小时前
Kotlin与Compose:Android开发的现代化变革
android·java·开发语言·kotlin
失散1315 小时前
分布式专题——10.3 ShardingSphere实现原理以及内核解析
java·分布式·架构·shardingsphere·分库分表
wzx_Eleven15 小时前
【论文阅读】Towards Privacy-Enhanced and Robust Clustered Federated Learning
论文阅读·人工智能·算法·机器学习·支持向量机·网络安全
十八旬16 小时前
【超简单】后端入门案例-基于SpringBoot+MyBatis-plus+MySQL图书管理系统
java·开发语言·idea·intellij idea·项目实战