Перейти к содержанию

Лидеры

  1. roma912

    roma912

    Пользователи+


    • Баллы

      1

    • Постов

      223


  2. MasterGH

    MasterGH

    Ветераны


    • Баллы

      1

    • Постов

      2 999


Популярный контент

Показан контент с высокой репутацией 23.07.2019 во всех областях

  1. Вот и настало время для 2й части реверсинга данной игры Сегодня будет рассмотрен Packet Editing В качестве основной идеи выступает данное видео Ну что же, начнем... Для начала необходимо найти ф-ию отправки пакета на сервер игры Эта ф-ия существует во всех онлайн играх. На примере Perfect World, она выглядит вот так В ф-ию передается 2 аргумента 1й аргумент это указатель на массив байтов который передается серверу В качестве второго аргумента выступает размер пакета в байтах Выглядит все это примерно так byte data[] = { 0x0 , 0xfc, 0xbc }; int len = 3; SendPacket(data, 3); Таким образом можно отправлять серверу пакеты для выполнения каких-либо действий внутри игры Но для того чтобы что-то сделать в игре, надо знать какой пакет мы должны отправить заранее И для этого ниже будет представлен хук, который покажет какие пакеты отправляются от клиента на сервер Приступим к самому хуку для чтения пакетов Сам хук довольно прост, и ничем особым не выделяется, кроме того, что хук будет перед вызовом memmove //Main dll thread jmpBack = (DWORD)DetourFunction((BYTE*)(Module + 0x419ACF), (BYTE*)PacketHook); //Hook part __declspec(naked) void PacketHook() { __asm { mov hookedPacket, ecx mov hPacketSize, esi } memcpy(hpacket, (void*)hookedPacket, 256); i = 0; if (hpacket[0] == 0x0 && hpacket[1] == 0x0 && hPacketSize == 41) //Movement 41 len { printf("Movement Packet: "); printf("Y: %.3f X: %.3f Z: %.3f ", *(float*)(hpacket+2), *(float*)(hpacket + 6), *(float*)(hpacket + 10)); printf("Counter %02x \n", hpacket[16]); } else if (hpacket[0] == 0x07 && hpacket[1] == 0x00 && hPacketSize == 25) //Stop Move { printf("Stop Hero Packet: "); printf("Y: %.3f X: %.3f Z: %.3f \n", *(float*)(hpacket + 2), *(float*)(hpacket + 6), *(float*)(hpacket + 10)); } else if (hpacket[0] == 0x03 && hpacket[1] == 0x00 && hpacket[2] == 0x01 && hPacketSize == 3) //Attack Packet { printf("Standart Attack Packet\n"); } else if (hpacket[0] == 0x02 && hpacket[1] == 0x00 && hPacketSize == 6) //Select Target packet { printf("Select target: 0x%06x\n", *(int*)(hpacket+3)); } printf("Incoming Packet: "); for (i; i < hPacketSize; i++) { printf("%02x ", hpacket[i]); } printf("\n"); _asm jmp jmpBack } Собственно это весь хук который нужен для чтения Некоторые пакеты я уже расшифровал К примеру пакет движения У каждого пакета в игре есть некий ID - это ровно 2 байта Для перемещения это 00 00 Остановка персонажа 07 00 Обычная атака 03 00 и т.д. В пакете движения передаются координаты перемещения персонажа в данный момент Что касается чтения пакетов, с этим все, больше тут придумывать нечего Настало время сделать свою отправку пакета на сервер //SendPacket Prototype using Send_t = void(__thiscall*)(DWORD*,DWORD*, int); auto* fnc_Send = reinterpret_cast<Send_t>(Module + 0x419A40); if (GetAsyncKeyState(VK_NUMPAD8) & 0x1) { std::ifstream inFile("C:\\Users\\Administrator\\Documents\\Visual Studio 2017\\Projects\\PW\\Debug\\Send.txt"); std::vector<uint8_t> data; data.reserve(512); unsigned int temp; while (!inFile.eof()) { inFile >> std::hex >> temp; data.push_back(temp); } std::copy(data.begin(), data.end(), hSendPacket); printf("Sent: "); for (j; j < data.size(); j++) printf("%02x ", (int)data[j]); printf("\n"); DWORD* Packet = (DWORD*)&hSendPacket; DWORD BaseValue = *reinterpret_cast<DWORD *>(0x00E444A4); DWORD* Base = (DWORD*)(*reinterpret_cast<DWORD*>(BaseValue + 0x20)); int packsize = data.size(); fnc_Send(Base, Packet, packsize); } У ф-ии 3 аргумента, т.к в регистре ecx перед вызовом ф-ии должен быть еще 1 указатель Теперь и отправка пакета готова, можно начать эксперементировать Для примера возьму пакет использования 3ей ячейки в инвентаре, в которой лежит предмет 28 00 00 01 02 00 26 2c 00 00 28 00 - использование предмета 02 - ячейка в инвентаре 02 26 - ID предмета, которое можно посмотреть и свериться 11302 - 0x2C26 Ну а теперь когда найден пакет, можно попробовать отправить его на сервер с помощью написанного выше кода На этом данная статья заканчивается. Примерно такие же действия можно сделать и с другими онлайн играми и автоматизировать некоторые действия
    1 балл
  2. Версия 1.0 Beta

    20 раз скачали

    Cheat Engine 6.8.3 Cheat Engine Extensions "User actions logger 1.0 Beta" Repository: https://bitbucket.org/MasterGH/ce-lua-user-actions-logger/src/master/ Author: MasterGH Donations: paypal, mastergh.developer@gmail.com Site: https://gamehacklab.ru/ Youtube channel: https://www.youtube.com/gamehacklabru VK: https://vk.com/gamehacklab How to install: Put files in main directory to chate engine Version: Beta 1.0 (22.018.2019) + Add output base information about user actions + Add GHL panel Files: autorun->User actions logger.lua autorun->GHLLogo.lua autorun->forms->GHLLogo.frm На русском: "User actions logger 1.0 Beta" Репозиторий: https://bitbucket.org/MasterGH/ce-lua-user-actions-logger/src/master/ Автор: MasterGH Donations: paypal, mastergh.developer@gmail.com Сайт: https://gamehacklab.ru/ Youtube канал: https://www.youtube.com/gamehacklabru VK: https://vk.com/gamehacklab Как установить: Распаковать файлы в директория Cheat Engine Версия: Beta 1.0 (22.018.2019) + Добавлены базовые действия в логи + Добавлены ссылки на ресурс game hack lab Файлы: autorun->User actions logger.lua autorun->GHLLogo.lua autorun->forms->GHLLogo.frm
    1 балл
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.