-
Постов
1 635 -
Зарегистрирован
-
Посещение
-
Победитель дней
55
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент keng
-
Блин, может кто впрок по 20р купил? Подарите мне копию, а? Так жаба душит 2к непонятно за что отдавать.
-
ViewMatrix нужна для того, чтобы переводить координаты из 3D в 2D, то есть проекцировать игровое пространство на твой монитор. Эта самая видовая матрица обычно есть только у игрока, так как игрок в общем и целом - просто камера, которая передвигается по карте, со своим полем и углами обзора. Тебе же нужно сделать "вид сверху", то есть найти изображение карты, отобразить его на картинке и проецировать нужные тебе объекты так, как если бы камера смотрела на эту карту, то есть вдоль плоскости Y. Попробуй самостоятельно сделать окно, в нем - точки или кубики, а в углу - эту самую карту. Поймешь, как это работает - сможешь и в чужой игре сделать.
-
Все просто. У языков есть так называемый уровень - чем ниже этот уровень, тем больше кода приходится писать и тем "точнее" результат работы той или иной команды. Простой пример - команда "построить дом" и набор действий - от "заложить фундамент" до "положить крышу". Таким образом разные языки выбираются под разные задачи. Для микроконтроллеров (мини-компьютеры из одной-единственной микросхемы), где очень мало памяти и мощности, нужен максимально "точный", низкоуровневый язык - тут выбирают Ассемблер, C\C++. Когда ресурсов компьютера и мощности хватает, но нужно разработать приложение максимально быстро - нужен высокоуровневый язык - Java\C#. В разработке игр каноном считается C++, хотя сейчас компьютеры уже настолько мощные, что писать игры можно хоть на Basic. Соответственно, больше всего примеров и документации тоже для C++, а DirectX и OpenGL так вообще написаны на чистом C. Для разработки трейнеров и хаков достаточно доступа к WinAPI-фунциям, это сделать можно почти на любом языке - вопрос только в удобстве. На C\C++ это есть "из коробки" и удобно, а C# более высокоуровневый, то есть в нем это тоже возможно, но нужно будет приложить некоторые дополнительные усилия. Кто-то (вроде меня) до сих пор пишет подобные вещи на чистом ассемблере (по разным причинам).
-
Сидеть и ковырять чужие исходники хаков - достаточно бессмысленно, если ты не понимаешь, как работает сама игра. Изучи для начала DirectX\Direct3D, раз с ним работаешь. Посмотри, как делается окно, инициализируется Direct3D, как в нем рисуются хотя бы простейшие геометрические фигурки. После этого будет гораздо проще понять, зачем и почему в хаке перехватываются те или иные функции. Если не очень понятно - можешь у меня посмотреть серию видео на эту тему (ссылка в подписи).
-
Чувак, сначала определись с технологией, которой ты будешь рисовать (в окне игры или поверх него, в своем окне, то есть DirectX\OpenGL\WPF\WinForms\GDI+), почитай про каждый метод, сравни их. Выбери один и научись в нем рисовать точки. А потом линии. Как научишься - думай, как к этому прикручивается ESP или что бы то ни было еще. Нельзя просто так взять и "от и до" выполнить всю задачу. Делай постепенно и все.
-
Привет! В окне игры - обычно, средствами самой игры (DirectX, OpenGL), поверх - на свой вкус (WinForms, WPF, GDI+).
-
Судя по документации, есть lua-команда debug_setBreakpoint(address). Точнее ничего не могу сказать, т.к. не люблю этот язык. Думаю, подробности может знать MasterGH.
-
Дык BSOD - он и есть Blue Screen, только он Of Death. В чем разница? Лучше бы по теме написал что-нибудь.
-
Поток можно создавать в приостановленном (THREAD_CREATE_SUSPENDED, вроде бы) состоянии, а потом запускать вызовом другой функции.
-
Они у тебя передаются в CreateRemoteThread в 5-м аргументе, если смотреть твой код, то это pParams, указатель на участок памяти. До этого в функцию передается Params, это и есть аргументы.
-
Хукать WriteProcessMemory, например. Судя по всему, это не твоя DLL, так что в этом случае поможет только отладка.
-
Окей, минутка глупых вопросов - адрес ты искал, указывая его в 16-ричной системе счисления? И укажи тогда игру, может с ней не так что-нибудь.
-
Прочитай вот [это]. Тут проще статью дать, чем писать самому. Не уверен, что не работает из-за naked-соглашения, оно как раз необходимо в этом случае.
-
Ну и отлично. Код внутри потока можно отладить при помощи, например, Olly Debugger или того же Cheat Engine. При первом вызове VirtualAllocEx (на 4096 байт) выделяется кусок памяти, куда запишется код функции, который будет выполнять поток после создания. Первой командой можно поставить "INT 3" - это опкод брейкпоинта, так что если к процессу игры будет подключен отладчик, он прервется. Если не подключен - обычно процесс игры просто завершится с ошибкой. Варианта у тебя, в общем, два - или использовать адрес памяти, куда записалось тело функции и ставить на этот адрес брейкпоинт на исполнение (сработает, т.к. при создании потока управление передастся на этот адрес и код, по нему находящийся, будет выполнен, или же вручную, поставив "INT 3", тогда брейкпоинт ставить не нужно - он уже будет в коде.
-
Привет! Для начала, отключи галочку "Fast scan" в главном окне СЕ. Если не поможет, то поставь галочку "Writable" в серое (галочка на сером фоне) положение. Это означает, что СЕ будет включать в поисковую выдачу так же и те адреса, которые находятся в том числе в регионах памяти, доступных только для чтения.
- 3 ответа
-
- 1
-
-
Не совсем корректно ты выразился. Поток не создается в функциях. Адрес функции - это место, откуда начинается ее код, так? В момент ее вызова игра передает процессору управление по этому самому адресу. Процессор выполняет код функции и выходит обратно, туда, откуда управление передали. Обычно это через стек делается, но не суть. Сами exe-файлы работают схожим образом - у них есть так называемая точка входа - адрес, по которому передается управление, когда ехе-файл запускается. Обычно это функция main. Потом - это, можно сказать, мини-процесс, как бы отдельный. У него есть точка входа и (но не обязательно) параметры. Точка входа - это адрес памяти, по которому должен (логично же) находиться код. Поток создается, процессор (когда у него находится свободное время) передает управление на его "точку входа", а затем поток завершается. При этом для потока создается свой контекст - данные, с которыми он работает в процессе работы (звучит туповато, знаю). Собственно, что приведенный тобой код делает: 0. Ищем в запущенных процессах процесс игры, используя thelp32-api. 1. Если находим - получаем на него хэндл для записи\чтения, используя OpenProcess. 2. Выделяем, используя полученный хэндл, в адресном пространстве этого процесса два куска памяти - один для тела функции, другой для ее аргументов. Почему-то для тела всегда выделяется 4096 байт, а для параметров - 256. В приведенном примере тело функции куда меньше, а параметров нет вовсе, но это тоже пофиг. 3. Когда выделили память, при помощи WriteProcessMemory записываем тело и аргументы. Указатель на тело и на аргументы нам передались в функцию инжекта. 4. Сделав все приготовления, мы получаем два куска памяти в адресном пространстве процесса игры - тело функции и аргументы этой функции. Создаем в процессе игры поток, указываем ему в качестве точки входа записанное в память игры тело функции, а так же аргументы. 5. Поток отрабатывает и завершается. Ждем этого через WaitForSingleObject. 6. Чистим за собой мусор, закрывая открытые хэндлы и освобождая выделенную память. 7. Выходим. Я прикрепил к посту чуть подправленный мной код, он у меня корректно отработал на х32-процессе. В качестве инъекции я использовал опкод брейкпоинта (INT 3). Синтаксис inline-ассемблера - G++, компилятор тот же. test.zip
-
Привет! Пара хороших вопросов:0. Почему при выделении памяти под функцию не используется флаг EXECUTE? 1. Почему для функции не передаются аргументы (NULL вместо них), но они все равно пытаются записаться в память и скормиться потоку? 2. Почему нет проверки на то, можно ли писать в память (VirtualProtectEx)? 3. Точно ли ты понимаешь, что делает этот код? В общем, я передал вместо параметров ноль при создании потока и у меня инжект отработал корректно. Единственное НО - работает это только на х32-процессах.
-
В том вся и штука, что ты "об этом вообще не знаешь". Нужно или узнавать, или узнавать. Как? Два варианта - у меня тут, на форуме, или же самостоятельно. Второй вариант куда продуктивнее. Ты только начал, по сути, программировать, а уже руки чешутся обходить VAC и легким движением левой ноги писать экранные меню с анимацией. Это, мягко говоря, сложно. Точно так же, как если бы ты открыл для себя, что одноразовый пластиковый жетон в метро (были раньше такие) совпадает по размерам с 2-рублевой монетой и на этот жетон можно купить бутылку воды в автомате. Уязвимость? Еще какая. Тут мысль уходит далеко вперед, глаза загораются и резко хочется ПОХЕКАТЬ ПЕНТАГОН!!!11 Проблема в том, что ты не то, что не представляешь, как это сделать, а даже с чего начать. Поэтому начинать надо или с чего-то попроще, или же долго, медленно и основательно подходить к задаче, что в 99% случаев несоизмеримо по трудозатратам с первым вариантом.
-
Хм, и разочаруйся. У меня есть пункт для изменения имени, но это, видимо, потому что я модератор. Вообще, с начала регистрации у тебя ник был с одной буквой "m".
-
0. Получаем координаты для вывода объектов. 1. Получаем текущие размеры и координаты игрового окна. 2. Создаем окно такого размера и по таким же координатам. 3. Делаем окно прозрачным. 4. Рисуем на нем то, что получили в п. 0. 5. Если игровое окно изменило свои координаты и\или размер - меняем свое окно соответствующим образом. PS: - Как взломать Windows? - Найти и проэксплуатировать уязвимость, например, в ядре, которая позволит повысить свои права до администратора. - Ок, гугл, как это сделать?
-
Внимательно прочитай все пункты слева вот по [этой] ссылке.
-
Это может быть на несколько экранов выше, а может быть на несколько процедур вверх (т.е. когда из одной процедуры вызывается другая, тебе нужна вот эта первая, а ты находишься во второй. Выполняешь код до первого встреченного RET и поднимаешься на уровень выше - в первую функцию. И смотришь ее).
-
Что тебе не ясно в предложенном мной способе поиска?
-
Так ведь одно дело - "как сделать", а другое - "там защита". Попробуй в СЕ запустить "отладчик режима ядра". Сразу предупредлаю - сохрани все перед попыткой, можешь получить blue screen.