Итак, те, кто были на pwlab уже знакомы с этой программой, другие же нет. Однако, думаю полезно будет её выложить сюда.
------------------------------- Краткое описание
Почти все ингейм программы используют иньекцию пакетов, тем самым заставляя игру выполнять нужные действия. Эти пакеты относятся к так называемому контейнеру С22, в котором передаются почти все действия игрока. Однако как же от отлавливать новые пакеты, которые так хочется использовать?
На помощь придет данная программа Она позволяет отловить все пакеты из контейнера С22, которая посылает игра. Причем ловля идет очень хитрым способом, что почти никак не сказывается на самой игре.
Принцип работы
1. Выделяем область в памяти клиента, куда пишем свой код, который и обеспечит перехват пакета.
2. Заменить первые байты функции отправки пакетов на джамп на нашу новую функцию. А в конце нашей новой функции есть джамп в оригинальное место в памяти.
3. Новая функция обеспечивает перехват пакета. (кому интересно, могу подробнее расписать как именно..).
Возможности программы
1) Отлавливать и показывать в нормальном виде все пакеты из контейнера С22.
2) Инжектировать свои пакеты в игру. А также инжектировать уже пойманные двумя кликами мышки.
3) Сохранять словленное в текстовый файл.
Особенности программы
1) Программа работает с памятью клиента, поэтому исполняемые файлы никак не изменяются.
2) Программа в интернет не лезет, ничего не передает.
Скриншоты
Отказ об ответственности
Я не несу ответственность за возможные вылеты игры и прочие напасти при использовании данной программы. Все делаете на свой страх и риск.
Опять же, огромное спасибо сообществу ныне почившего pwlab.ru, а также TBXin'у.
СКАЧАТЬ ТУТ
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
ВЕРСИЯ ПОД РУОФФ DESCENT 1.4.5
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
На вирустотале на архив ругнулся Symantec, с сообщением "WS.Reputation.1", хотя я лишь сменил захардкоденный асм-код в программе.
Кто не верит, что это ложное срабатывание - может не качать.
ВЕРСИЯ ПОД РУОФФ Imperial Fury 1.4.5 / другие сервера лежит тут
ПОСЛЕДНЯЯ ВЕРСИЯ от 2013.01.20
[Ссылки могут видеть только зарегистрированные пользователи. ] [Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Почти забросил раздел Pw скажем спасибо TBX1n и Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Цитата:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Сообщение от TBX1n
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Скука новый админ
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
на i.zhyk.ru и ложи превью пожалуйста, а не целый скриншот
1)
2)
3)
4)
________________
Помог? Поставь "Спасибо"
Меньше 10 постов? Нажми на весы. Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось jerr; 03.10.2011 в 15:14.
кому интересно, могу подробнее расписать как именно
Интересно. Очень даже интересно.
Распиши-ка, как правильно поставить джампы (там какая-то странная арифметика адресов, насколько я знаю. адрес нужно указывать не явно, а относительно текущего адреса, вроде). Если не жалко, то приведи ту часть кода, которая правит оригинальную функцию.
адрес нужно указывать не явно, а относительно текущего адреса, вроде
По идее да, но можно абсолютный адрес помещать в регистр и по нему делать джамп.
Принцип работы
Итак, описываю принцип работы. Он конечно может немного некорректный, но ничего умнее в тот момент мне в голову не пришло (ибо асм я знаю почти никак, только на уровне nop cmp и jmp)). Именно поэтому все захардкодено под руофф.
Открываем процесс и делаем так:
Код:
//Место для записи моей функции
offset_MyFunc = InjectHelper.AllocateMemory(processHandle, ListenFunction.Length);
//Место для хранения адреса пакета
offset_data_addr = InjectHelper.AllocateMemory(processHandle, 4);
//Место для хранения размера пакета
offset_data_size = InjectHelper.AllocateMemory(processHandle, 4);
//Место для хранения флага
offset_flag = InjectHelper.AllocateMemory(processHandle, 4);
Что это за четыре места, которые я выделил?
offset_MyFunc - место для моей функции перехвата (сюда будет идти джамп из оригинальной ф-ции)
offset_data_addr - сюда мы запишем адрес пакета (чтобы наша программа смогла его считать)
offset_data_size - ну и размер пакета нам тоже нужен
offset_flag - отвечает за состояния (0 - процесс ПВ может идти дальше, пакет был считан. 1 - пришел новый пакет, надо ждать,пока программа его считает)
Итак, открыв процесс ПВ в олли, я нашел функцию отправки пакетов и скопировал первые её байты:
Код:
//Первые строчки оригинальной команды
private byte[] OriginalBytes = new byte[] {
0x6A, 0xFF,
0x68, 0x88, 0x45, 0x8c, 0x00
};
Чтобы потом можно было вернуть все на место. На сколько я помню тут идет записаь чего-то в регистр.
Далее создаем новое начала функции отправки пакетов
Пишем в EAX адрес нашей новой функции (offset_MyFunc) и далаем на него джамп.
Ну и сам код новой функции:
Код:
private readonly byte[] _ListenFunction = new byte[]
{
0x8B, 0x44, 0x24, 0x04, // MOV EAX,DWORD PTR SS:[ESP+4]
0xA3, 0x00, 0x00, 0x00, 0x00, // MOV DWORD PTR DS:[packet_address],EAX
0x8B, 0x44, 0x24, 0x08, // MOV EAX,DWORD PTR SS:[ESP+8]
0xA3, 0x00, 0x00, 0x00, 0x00, // MOV DWORD PTR DS:[Packet_size],EAX
0xC7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // MOV DWORD PTR DS:[FLAG_ADR],1
////ждем пока программа прочитает значения и изменит флаг
0xA1, 0x00, 0x00, 0x00, 0x00, // MOV EAX,DWORD PTR DS:[FLAG_ADR]
0x83, 0xF8, 0x01, // CMP EAX,1
0x74, 0xF6, // JE на две строчки назад
//две строчки оригинальной команды
0x6A, 0xFF,
0x68, 0xE8, 0xCA, 0x94, 0x00,
//Джамп на продолжение оригинальной команды
0xB8, 0x17, 0xE3, 0x60, 0x00, // MOV EAX,
0xFF, 0xE0 // JUMP EAX
};
Сама функция простая:
пишем адрес пакета в нашу память, размер, и ставим флаг = 1 и ждем, пока он вновь не станет = 0.
А станет он 0, когда программа прочитает пакет и адрес.
А вообще мне повезло, что регистр EAX в начале этой функции не задействован и его можно использовать как угодно в своих целях)
Добавлено через 2 минуты
Перевод асм в машинные коды делал при помощи того же самого OllyDbg
Последний раз редактировалось N00bSa1b0t; 04.10.2011 в 00:14.
Причина: Добавлено сообщение
Как вижу, это C#? : D
А зачем переводить в машинные коды если можно использовать инжектор кода (но без освобождения памяти и без запуска функции)?
И как это ты перевёл? Инжектил код, получал его адрес в программе, затем смотрел в Olly, что там лежит по этому адресу?
А зачем переводить в машинные коды если можно использовать инжектор кода
Если б я еще знал о чем ты говоришь..
Мне надо было написать свою ф-цию на асме - это я сделал. надо было поместить её в память - перевел в код через олли - разместил. Работает? Работает.
Я ж не спорю, наверное есть способы лучше и проще, но я то их не знаю. Задача была - написать средство для перехвата пакетов, как можно проще понятнее и быстрее) Первая версия вообще была за 2-3 вечера написана и была консольная)
Цитата:
Сообщение от BritishColonist
И как это ты перевёл? Инжектил код, получал его адрес в программе, затем смотрел в Olly, что там лежит по этому адресу?
Нет))) Открыл левый процесс (блокнот вроде) в олли, пишешь ему код на асме - он тебе сразу его в машинные кода переводит. Потом код скопировал и в шарп запихнул.
Относительную адресацию я обошел, так что все прекрасно работает)