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

roma912

Пользователи+
  • Публикаций

    195
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

roma912 стал победителем дня 29 июля

roma912 имел наиболее популярный контент!

Репутация

40 Rookie

3 Подписчика

Информация о roma912

  • Звание
    Спамер
  • День рождения 10/12/1999

Посетители профиля

2221 просмотр профиля
  1. Смотри 1. Тот урок, что от Кенга бородатых времен вполне подходит для css v34 Принцип вообще не поменялся никак 2. Без базы знаний c++ ты толком ничего и не напишешь без полного копипаста готового исходника Да хотя даже для копипаста кода надо знать как он работает, ну и соответственно знать синтаксис языка для исправления ошибок
  2. Вроде он меняется как request.addfield(Content-Type, value); Или же в самом запросе request.post(link, postdata, ValueofContentType); Какой-то из 2х методов, сейчас не помню
  3. Посмотри в сторону этой статьи
  4. *(int*)( ((DWORD)GetModuleHandleA(NULL)) + 0x116F3 + 1 ) = 1000; Вроде все что необходимо Что-то ты слишком много делаешь чтобы добиться такого простого результата
  5. if (password = MachineID) { UnzipFile(smth); OpenCheat(); }
  6. Ну если на плюсах, то gemodulehandlea("client.dll"); В СЕ есть отдельный пункт для регионов в контекстном меню
  7. Вот и настало время для 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 Ну а теперь когда найден пакет, можно попробовать отправить его на сервер с помощью написанного выше кода На этом данная статья заканчивается. Примерно такие же действия можно сделать и с другими онлайн играми и автоматизировать некоторые действия
  8. На днях решил с самого чистого нуля написать хук для Directx 9. Чтобы было хоть какое-нибудь отображение для пользователя внутри игры Собственно идея зародилась, осталось только воплотить Хук поддерживает Режим в окне / Полноэкранный Использование EndScene и библиотеки для рисования самого меню. Использованная версия игры: Metal Gear Rising - Revengeance v2, таблетка от Skidrow Пара скриншотов самого меню, все получилось довольно ярко На момент тестирования багов и вылетов не обнаружил. Для написания ф-ий и самого хука были использованы MS Detours. Вполне возможно что функционал я буду еще доделывать, постепенно Но это в том случае, если не переключусь на игру поинтересней Ну и конечно же видео
  9. roma912

    This War of Mine поиск адреса здоровья

    Долго же ты конечно работаешь Уже 11 вечера
  10. Насколько я видел, то ты применяешь cmp [reg+14], 1 Нужно строго указать какой размер сравнивать по типу cmp byte ptr [reg+14], (byte)1
  11. roma912

    Старая, но все еще актуальная ммо

    Так я и дал читателю отправную точку Эта точка - поиск указателя на игрока. Тут уже сам читатель должен подумать как его найти. А то получается так, что все разжевано, и пользователь пришел, сделал все по пунктам и спокойно ушел в туман. Никакой креативности, никаких раздумий, это неправильно. Практически никто и никогда не станет давать полной информации, как это делается от А до Я. Смысл как раз в том, чтобы человек к этому пришел сам. Куча статей про указатели читателю в помощь Прочтя статьи 2-3 уже можно попробовать что-то и поискать
  12. roma912

    Старая, но все еще актуальная ммо

    Ну если нуб захочет, то на форуме перед ним будет куча статей как выйти на указатель игрока Либо автоматическим поиском, либо ручным поиском, либо вырезанием указателя на игрока из какого-либо регистра в метку СЕ. Все эти способы уже разложены на форуме И не хочется расписывать все подробно, чтобы люди действовали по статье совершенно не думая. Так никакого смысла не будет, если люди начнут действовать как роботы без смекалки и пр. Цель статьи подать идею, как обойти проблему проверки положения персонажа с серверной стороны В данном случае обход 2мя способами 1. Наложением бафа, и последующем чтением его из программы на плюсах 2. Обход с помощью полёта или ездового животного (Тут я также не стал расписывать, для того чтобы статья окончательно не разбухла)
  13. roma912

    Старая, но все еще актуальная ммо

    Ну если расписывать полный процесс реверсинга, от А до Я, то статья получится огромной. Не думаю что обычный поиск 4х байтового значения надо разжевывать, а после разжевать еще и поиск указателя. Считаю что на форуме уже много статей отдельно на поиск, а тут так вообще никаких проблем с нахождением, все на поверхности
  14. roma912

    Старая, но все еще актуальная ммо

    Ну мне нравится вариант комбинированный Т.е руками нахожу оффсет допустим здоровья, смотрю в каком адресе оно лежит Потом делаю автоматический поиск с указанием последнего оффсета, которое было для здоровья Несколько перезапусков, а потом выбор из оставшихся нескольких указателей Получается комбинированный метод Часть руками, часть автоматически А координаты можно найти уже в том указателе, как правило они недалеко
×

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

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