Собственно, игра шифрует каким-то образом метадату, дамперы не работают, т.к. не валидный файл, меджик у него тоже не стандартный (как и размер файла).
Просьба помочь, т.к. перечитал всю возможную инфу, которую смог найти (даже на китайских сайтах) - результата ноль.
Скачал билд юнити, который они юзали (2019.4.14f1), скомпайлил пустой проэкт - функция, которая загружает файл метадаты - выглядит таким образом:
Сиг мейкер помог с сигнатурой -
"48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8B EC 48 81", либо же более длинный вариант:
"48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8B EC 48 81 EC 80 00 00 00"
Интересно, что по сигнатуре в GameAssembly - ничего нету, но чит енжином в рантайме процесса находит эту же сигнатуру в GameAssembly. Помимо этого - находит ещё 3 в UnityPlayer.dll..
Первая функция выглядит вот так:
7FF9534B1850 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF9534B1855 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF9534B185A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF9534B185F - 55 - push rbp
7FF9534B1860 - 41 54 - push r12
7FF9534B1862 - 41 55 - push r13
7FF9534B1864 - 41 56 - push r14
7FF9534B1866 - 41 57 - push r15
7FF9534B1868 - 48 8B EC - mov rbp,rsp
7FF9534B186B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF9534B1872 - 48 8D 05 3FAC5D01 - lea rax,[7FF954A8C4B8] { ("key0") } <<< тут в оригинале "global-metadata.dat"
Вторая:
7FF953DCFDF0 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF953DCFDF5 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF953DCFDFA - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF953DCFDFF - 55 - push rbp
7FF953DCFE00 - 41 54 - push r12
7FF953DCFE02 - 41 55 - push r13
7FF953DCFE04 - 41 56 - push r14
7FF953DCFE06 - 41 57 - push r15
7FF953DCFE08 - 48 8B EC - mov rbp,rsp
7FF953DCFE0B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF953DCFE12 - 66 0F6E 81 1C010000 - movd xmm0,[rcx+0000011C] <<< тут в оригинале "global-metadata.dat"
Третья:
7FF953FA6B40 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF953FA6B45 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF953FA6B4A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF953FA6B4F - 55 - push rbp
7FF953FA6B50 - 41 54 - push r12
7FF953FA6B52 - 41 55 - push r13
7FF953FA6B54 - 41 56 - push r14
7FF953FA6B56 - 41 57 - push r15
7FF953FA6B58 - 48 8B EC - mov rbp,rsp
7FF953FA6B5B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF953FA6B62 - 8B 41 10 - mov eax,[rcx+10] <<< тут в оригинале "global-metadata.dat"
И один из GameAssembly.dll:
7FF967750C60 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF967750C65 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF967750C6A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF967750C6F - 55 - push rbp
7FF967750C70 - 41 54 - push r12
7FF967750C72 - 41 55 - push r13
7FF967750C74 - 41 56 - push r14
7FF967750C76 - 41 57 - push r15
7FF967750C78 - 48 8B EC - mov rbp,rsp
7FF967750C7B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF967750C82 - 4C 8B F1 - mov r14,rcx <<< тут в оригинале "global-metadata.dat"
Нигде, кроме key0 - никакого читаемого текста нету, при подключении дебаггера - игра сразу крашится, пытался хукнуть или эту функцию, или il2cpp::vm::MetadataLoader::LoadMetadataFile(const char *fileName) - тоже результата ноль, и, собственно, на данном этапе у меня ступор. Ищу помощи, спасибо.
UnityPlayer.dll https://drive.google.com/file/d/1MdRapJWAK1UijbPlmev_i557L-NjtcPu/view?usp=sharing
GameAssembly.dll https://drive.google.com/file/d/1Qe51uzDlGRH4TQiCThswLrdc1Wt9MfOJ/view?usp=sharing
global-metadata.dat https://drive.google.com/file/d/10qP2SmCyv3sI_alVB5jnzoYNCSjPSFZV/view?usp=sharing
На unknowncheats видел, что раньше людям помогал Il2CppRuntimeDumper - но ничего с ним так же не удалось..
Просьба помочь, т.к. перечитал всю возможную инфу, которую смог найти (даже на китайских сайтах) - результата ноль.
Скачал билд юнити, который они юзали (2019.4.14f1), скомпайлил пустой проэкт - функция, которая загружает файл метадаты - выглядит таким образом:
Код:
.text:00000001800BC390 ; =============== S U B R O U T I N E =======================================
.text:00000001800BC390
.text:00000001800BC390 ; Attributes: bp-based frame
.text:00000001800BC390
.text:00000001800BC390 ; bool __fastcall il2cpp::vm::MetadataCache::Initialize()
.text:00000001800BC390 ?Initialize@MetadataCache@vm@il2cpp@@SA_NXZ proc near
.text:00000001800BC390 ; CODE XREF: il2cpp::vm::Runtime::Init(char const *)+F0↑p
.text:00000001800BC390 ; DATA XREF: .pdata:00000001809BAE9C↓o
.text:00000001800BC390
.text:00000001800BC390 path = std::string ptr -60h
.text:00000001800BC390 managedMethods = std::vector<MethodDefinitionKey> ptr -40h
.text:00000001800BC390 result = std::string ptr -28h
.text:00000001800BC390 var_s0 = byte ptr 0
.text:00000001800BC390 arg_0 = qword ptr 30h
.text:00000001800BC390 arg_8 = qword ptr 38h
.text:00000001800BC390 arg_10 = qword ptr 40h
.text:00000001800BC390 arg_18 = qword ptr 48h
.text:00000001800BC390
.text:00000001800BC390 ; __unwind { // __CxxFrameHandler4
.text:00000001800BC390 mov [rsp-28h+arg_8], rbx
.text:00000001800BC395 mov [rsp-28h+arg_10], rsi
.text:00000001800BC39A mov [rsp-28h+arg_18], rdi
.text:00000001800BC39F push rbp
.text:00000001800BC3A0 push r12
.text:00000001800BC3A2 push r13
.text:00000001800BC3A4 push r14
.text:00000001800BC3A6 push r15
.text:00000001800BC3A8 mov rbp, rsp
.text:00000001800BC3AB sub rsp, 80h
.text:00000001800BC3B2 lea rcx, fileName ; "global-metadata.dat"
.text:00000001800BC3B9 call ?LoadMetadataFile@MetadataLoader@vm@il2cpp@@SAPEAXPEBD@Z ; il2cpp::vm::MetadataLoader::LoadMetadataFile(char const *)
.text:00000001800BC3BE mov cs:s_GlobalMetadata, rax
.text:00000001800BC3C5 test rax, rax
.text:00000001800BC3C8 jz loc_1800BCA74
.text:00000001800BC3CE mov cs:s_GlobalMetadataHeader, rax
.text:00000001800BC3D5 mov rax, cs:s_Il2CppMetadataRegistration
.text:00000001800BC3DC movsxd rcx, dword ptr [rax+30h] ; count
.text:00000001800BC3E0 mov edx, 8 ; size
.text:00000001800BC3E5 call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC3EA mov cs:s_TypeInfoTable, rax
.text:00000001800BC3F1 mov rax, cs:s_GlobalMetadataHeader
.text:00000001800BC3F8 movsxd rcx, dword ptr [rax+0A4h]
.text:00000001800BC3FF mov rax, 642C8590B21642C9h
.text:00000001800BC409 mul rcx
.text:00000001800BC40C sub rcx, rdx
.text:00000001800BC40F shr rcx, 1
.text:00000001800BC412 add rcx, rdx
.text:00000001800BC415 shr rcx, 6 ; count
.text:00000001800BC419 mov edx, 8 ; size
.text:00000001800BC41E call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC423 mov cs:s_TypeInfoDefinitionTable, rax
.text:00000001800BC42A mov rax, cs:s_GlobalMetadataHeader
.text:00000001800BC431 movsxd rcx, dword ptr [rax+34h]
.text:00000001800BC435 shr rcx, 5 ; count
.text:00000001800BC439 mov edx, 8 ; size
.text:00000001800BC43E call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC443 mov cs:s_MethodInfoDefinitionTable, rax
.text:00000001800BC44A mov rax, cs:s_Il2CppMetadataRegistration
.text:00000001800BC451 movsxd rcx, dword ptr [rax+40h] ; count
.text:00000001800BC455 mov edx, 8 ; size
.text:00000001800BC45A call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC45F mov cs:s_GenericMethodTable, rax
.text:00000001800BC466 mov rax, cs:s_GlobalMetadataHeader
.text:00000001800BC46D movsxd rcx, dword ptr [rax+0ACh]
.text:00000001800BC474 mov rax, 0CCCCCCCCCCCCCCCDh
.text:00000001800BC47E mul rcx
.text:00000001800BC481 shr rdx, 5
.text:00000001800BC485 mov cs:s_ImagesCount, edx
.text:00000001800BC48B movsxd rcx, edx ; count
.text:00000001800BC48E mov edx, 50h ; 'P' ; size
.text:00000001800BC493 call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC498 mov cs:s_ImagesTable, rax
.text:00000001800BC49F mov rax, cs:s_GlobalMetadataHeader
.text:00000001800BC4A6 movsxd rcx, dword ptr [rax+0B4h]
.text:00000001800BC4AD mov rax, 0F0F0F0F0F0F0F0F1h
.text:00000001800BC4B7 mul rcx
.text:00000001800BC4BA shr rdx, 6
.text:00000001800BC4BE mov cs:s_AssembliesCount, edx
.text:00000001800BC4C4 movsxd rcx, edx ; count
.text:00000001800BC4C7 mov edx, 60h ; '`' ; size
.text:00000001800BC4CC call ?Calloc@Memory@utils@il2cpp@@SAPEAX_K0@Z ; il2cpp::utils::Memory::Calloc(unsigned __int64,unsigned __int64)
.text:00000001800BC4D1 mov cs:s_AssembliesTable, rax
.text:00000001800BC4D8 mov r9, cs:s_GlobalMetadataHeader
.text:00000001800BC4DF movsxd rdi, dword ptr [r9+0A8h]
.text:00000001800BC4E6 mov r10, cs:s_GlobalMetadata
.text:00000001800BC4ED add rdi, r10
.text:00000001800BC4F0 xor esi, esi
.text:00000001800BC4F2 mov r12d, esi
.text:00000001800BC4F5 mov r11d, cs:s_ImagesCount
.text:00000001800BC4FC test r11d, r11d
.text:00000001800BC4FF jle loc_1800BC6F1
.text:00000001800BC505 mov r15d, esi
.text:00000001800BC508 nop dword ptr [rax+rax+00000000h]
Сиг мейкер помог с сигнатурой -
"48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8B EC 48 81", либо же более длинный вариант:
"48 89 5C 24 10 48 89 74 24 18 48 89 7C 24 20 55 41 54 41 55 41 56 41 57 48 8B EC 48 81 EC 80 00 00 00"
Интересно, что по сигнатуре в GameAssembly - ничего нету, но чит енжином в рантайме процесса находит эту же сигнатуру в GameAssembly. Помимо этого - находит ещё 3 в UnityPlayer.dll..
Первая функция выглядит вот так:
7FF9534B1850 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF9534B1855 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF9534B185A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF9534B185F - 55 - push rbp
7FF9534B1860 - 41 54 - push r12
7FF9534B1862 - 41 55 - push r13
7FF9534B1864 - 41 56 - push r14
7FF9534B1866 - 41 57 - push r15
7FF9534B1868 - 48 8B EC - mov rbp,rsp
7FF9534B186B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF9534B1872 - 48 8D 05 3FAC5D01 - lea rax,[7FF954A8C4B8] { ("key0") } <<< тут в оригинале "global-metadata.dat"
Вторая:
7FF953DCFDF0 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF953DCFDF5 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF953DCFDFA - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF953DCFDFF - 55 - push rbp
7FF953DCFE00 - 41 54 - push r12
7FF953DCFE02 - 41 55 - push r13
7FF953DCFE04 - 41 56 - push r14
7FF953DCFE06 - 41 57 - push r15
7FF953DCFE08 - 48 8B EC - mov rbp,rsp
7FF953DCFE0B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF953DCFE12 - 66 0F6E 81 1C010000 - movd xmm0,[rcx+0000011C] <<< тут в оригинале "global-metadata.dat"
Третья:
7FF953FA6B40 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF953FA6B45 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF953FA6B4A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF953FA6B4F - 55 - push rbp
7FF953FA6B50 - 41 54 - push r12
7FF953FA6B52 - 41 55 - push r13
7FF953FA6B54 - 41 56 - push r14
7FF953FA6B56 - 41 57 - push r15
7FF953FA6B58 - 48 8B EC - mov rbp,rsp
7FF953FA6B5B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF953FA6B62 - 8B 41 10 - mov eax,[rcx+10] <<< тут в оригинале "global-metadata.dat"
И один из GameAssembly.dll:
7FF967750C60 - 48 89 5C 24 10 - mov [rsp+10],rbx
7FF967750C65 - 48 89 74 24 18 - mov [rsp+18],rsi
7FF967750C6A - 48 89 7C 24 20 - mov [rsp+20],rdi
7FF967750C6F - 55 - push rbp
7FF967750C70 - 41 54 - push r12
7FF967750C72 - 41 55 - push r13
7FF967750C74 - 41 56 - push r14
7FF967750C76 - 41 57 - push r15
7FF967750C78 - 48 8B EC - mov rbp,rsp
7FF967750C7B - 48 81 EC 80000000 - sub rsp,00000080 { 128 }
7FF967750C82 - 4C 8B F1 - mov r14,rcx <<< тут в оригинале "global-metadata.dat"
Нигде, кроме key0 - никакого читаемого текста нету, при подключении дебаггера - игра сразу крашится, пытался хукнуть или эту функцию, или il2cpp::vm::MetadataLoader::LoadMetadataFile(const char *fileName) - тоже результата ноль, и, собственно, на данном этапе у меня ступор. Ищу помощи, спасибо.
UnityPlayer.dll https://drive.google.com/file/d/1MdRapJWAK1UijbPlmev_i557L-NjtcPu/view?usp=sharing
GameAssembly.dll https://drive.google.com/file/d/1Qe51uzDlGRH4TQiCThswLrdc1Wt9MfOJ/view?usp=sharing
global-metadata.dat https://drive.google.com/file/d/10qP2SmCyv3sI_alVB5jnzoYNCSjPSFZV/view?usp=sharing
На unknowncheats видел, что раньше людям помогал Il2CppRuntimeDumper - но ничего с ним так же не удалось..