-
-
[原创]UnityPlayer.dll加载GameAssembly.dll的流程
-
发表于: 2024-12-30 15:15 1831
-
使用的版本:Unity6000.025 il2cpp版本:31
想要加密GameAssembly.dll
,就需要知道Unity是加载GameAssembly.dll
的顺序,本文将会从IDA打开UnityPlayer.dll
开始,详细讲解加载流程
0x0 exe还是dll
首先要确定两件事:GameAssembly.dll
的加载属于自动加载还是手动加载?GameAssembly.dll
从Game.exe
加载还是UnityPlayer.dll
加载?
直接给出结论:查看PE,IDA之后得知:GameAssembly.dll
从UnityPlayer.dll
手动加载
0x1 从字符串到HMODULE
IDA打开后直接搜索字符串GameAssembly.dll
,直接定位到第一个使用此字符串的函数,往下一翻,发现了一处打印
1 2 3 4 | ... if ( !Result ) UnityPlayer_MessageBox( "Failed to load il2cpp" ); // 这里的函数名是我自己改的,内部使用了MessageBox ... |
如果你把GameAssembly.dll
删掉,加载不成功,就会出现这个报错。
那么任务目标就变成了:找出计算Result的位置,这个位置一定也加载了GameAssembly.dll
函数的开头是这样的:
1 2 3 4 5 6 7 8 9 10 | ... LOBYTE(Block[0]) = 0; v58 = 31; strcpy (( char *)sub_7FFF0024C970(( __int64 *)Block, 0x10ui64), "GameAssembly.dll" ); if ( (v58 & 0xC0) != 0 ) Block[2] = ( void *)16; else v58 = 15; Result = LoadGameAssemblyAndGetResult(Block); // 这里的名字也是我自己改的 ... |
这里基本上可以确定:LoadGameAssemblyAndGetResult
实现了通过名字加载dll,我们直接一路追踪Result,就能得到产生这个数据的位置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | HMODULE __fastcall 函数名( const WCHAR *a1, __int64 a2) { HMODULE result; // rax __int128 v4; // [rsp+20h] [rbp-29h] __int64 v5; // [rsp+30h] [rbp-19h] __int128 v6; // [rsp+50h] [rbp+7h] __int128 v7; // [rsp+60h] [rbp+17h] __int128 v8; // [rsp+60h] [rbp+17h] __int128 v9; // [rsp+90h] [rbp+47h] result = LoadLibraryW(a1); // 对这里进行了断点调试,输入的a1就是GameAssembly.dll if ( !result ) { LODWORD(v5) = 36; *(_QWORD *)&v4 = "C:\\build\\output\\unity\\unity\\External\\baselib\\baselib\\Source\\WinApi\\Baselib_DynamicLibrary_WinApi.inl.h" ; *((_QWORD *)&v4 + 1) = "Baselib_DynamicLibrary_OpenUtf16" ; *(_QWORD *)&v7 = 0i64; DWORD2(v7) = 0; WORD6(v7) = 0; v9 = v7; DWORD2(v9) = 100663296; *(_QWORD *)&v6 = v5; v8 = v9; BYTE12(v8) = 1; *((_QWORD *)&v6 + 1) = GetLastError(); if ( !*(_DWORD *)(a2 + 40) ) { *(_OWORD *)a2 = v4; *(_OWORD *)(a2 + 16) = v6; *(_OWORD *)(a2 + 32) = v8; } return ( HMODULE )-100i64; } return result; } |
这里调用了LoadLibraryW
,可以确定就是加载的位置了
赞赏
赞赏
雪币:
留言: