На самом деле я Zodiak
-
Автор темы
- #1
Опираясь на статью
У нас есть функция которая декриптит ответ от сервера посредством AES \uE2BC.\uE001, посмотрев как фукнция работает изнутри, можно заметить что она использует только static fields, и статические функции, так что класс в котором она вызывается можно не искать а просто в rcx запихать 0
![DecryptFunc.png DecryptFunc.png](https://yougame.biz/data/attachments/275/275683-e8cc9199fad49618e64e6ddca8731d2e.jpg)
Так же нам нужна декомпрессия, потому что зашифрованный запрос приходит закомпрессированный ZLIB, и в фукнции \uE2BC.\uE007 можно увидеть как в игре она декомпрессируется и выплевывает нашу расшифрованную строку.
![Decompress.png Decompress.png](https://yougame.biz/data/attachments/275/275685-c1bb3b6afcdfbc561ca7b8dc2f04641c.jpg)
Нам потребуется функция E001 и статик функция DecompressNonAlloc, а так же что бы наша E001 приняла наши данные, нужно сформировать mono_array.
Заебись. С декриптом покончено, но что бы декриптить что то, это что то надо получить. А без правильно сформированного запроса мы не получим данные, которые надо декриптить.
запрос идет на ссылку
Проанализировав хедеры запроса продебажив UnityWebRequests.SetRequestHeader я нашел 5 необходимых хедеров.
так же в теле запроса должен быть JSON, с аккаунт айдишником
PHPSESSID можно получить вызвав \uE2C3.get_PhpSessionId, функция статическая, так что проблем с ней не возникнет.
accountId можно получить из самого игрока, ObservedPlayerView + 0x50, это unity_string*
на этом все.
(Но всем будет похуй на статью потому что форум пора переименовать в PasteExpensive.biz)
Пожалуйста, авторизуйтесь для просмотра ссылки.
я разобрался как же все таки получать эти данные, ведь статья больше обобщенная.У нас есть функция которая декриптит ответ от сервера посредством AES \uE2BC.\uE001, посмотрев как фукнция работает изнутри, можно заметить что она использует только static fields, и статические функции, так что класс в котором она вызывается можно не искать а просто в rcx запихать 0
![DecryptFunc.png DecryptFunc.png](https://yougame.biz/data/attachments/275/275683-e8cc9199fad49618e64e6ddca8731d2e.jpg)
Так же нам нужна декомпрессия, потому что зашифрованный запрос приходит закомпрессированный ZLIB, и в фукнции \uE2BC.\uE007 можно увидеть как в игре она декомпрессируется и выплевывает нашу расшифрованную строку.
![Decompress.png Decompress.png](https://yougame.biz/data/attachments/275/275685-c1bb3b6afcdfbc561ca7b8dc2f04641c.jpg)
Нам потребуется функция E001 и статик функция DecompressNonAlloc, а так же что бы наша E001 приняла наши данные, нужно сформировать mono_array.
C++:
unity_string get_decrypted_responce( char* data, int length )
{
auto mono_array_new = reinterpret_cast< __int64( * )( uintptr_t domain, uintptr_t byteclass, __int64 size ) >( mono_base + 0xB3E50 ); //B3E50
auto mono_domain = *( uintptr_t* ) ( mono_base + 0x499C78 );
auto mono_byte_class = *( uintptr_t* ) ( mono_base + 0x4A21B0 );
auto mono_array_addr_with_size = reinterpret_cast< uintptr_t ( * )( uintptr_t, int, __int64 ) > ( mono_base + 0xB39E0 );
auto decompress_no_alloc = reinterpret_cast< uintptr_t ( * )( uintptr_t array_address, int size, uintptr_t null ) >( decompress_zlib_address );
auto uE001 = reinterpret_cast< uintptr_t ( * )( uintptr_t cipherText, uintptr_t, unity_string* ) >( decrypt_address );
auto Crypted_array = mono_array_new ( mono_domain, mono_byte_class, length );//создаем array
LI_FN ( memcpy ).get ( )( ( void* ) mono_array_addr_with_size ( Crypted_array, sizeof ( uint8_t ), 0 ), data, length );
unity_string crypt = unity_string(xorstr_(L"aes"));
uintptr_t result = uE001 ( 0, Crypted_array, &crypt );
uintptr_t result_text = decompress_no_alloc ( result, data, 0 );
return (unity_string)result_text;
}
Заебись. С декриптом покончено, но что бы декриптить что то, это что то надо получить. А без правильно сформированного запроса мы не получим данные, которые надо декриптить.
запрос идет на ссылку
Пожалуйста, авторизуйтесь для просмотра ссылки.
Проанализировав хедеры запроса продебажив UnityWebRequests.SetRequestHeader я нашел 5 необходимых хедеров.
Код:
User-Agent: UnityPlayer/2019.4.39f1 (UnityWebRequest/1.0, libcurl/7.80.0-DEV)
Content-Type: application/json
App-Version: EFT Client 0.14.6.0.29862
GClient-RequestId: 24 (не особо важен но я без него иногда получал не валид ответ)
Cookie: PHPSESSID=вашphpsessid
JSON:
{"accountId":"айди"}
accountId можно получить из самого игрока, ObservedPlayerView + 0x50, это unity_string*
на этом все.
(Но всем будет похуй на статью потому что форум пора переименовать в PasteExpensive.biz)