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