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

相关推荐
小五传输3 分钟前
Serv-U替代方案怎么选?政务机关文件安全传输对比与迁移指南
大数据·运维·安全
个 人 练 习 生3 分钟前
数据结构入门:算法复杂度
开发语言·数据结构·经验分享·学习·程序人生·算法
W_3260011 分钟前
Python-OpenCV边缘检测与阈值分割:Sobel、Scharr、Laplacian、Canny、全局与自适应阈值
开发语言·图像处理·python·opencv·机器学习
其实防守也摸鱼12 分钟前
红队技能总结导图:从入门到精通的完整知识体系
开发语言·人工智能·学习·安全·web安全
聊浮游22 分钟前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
MacroZheng34 分钟前
完美替代 Navicat!这款内置 AI 的数据库工具,太香了!
java·后端·mysql
SamDeepThinking1 小时前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane19941 小时前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿1 小时前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
不会代码的小猴1 小时前
4. 控件学习2
开发语言·c++·笔记·qt