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

F.A.Q. по программированию трейнеров на C++


Рекомендуемые сообщения

В этом топике будут содержаться ответы на ваши вопросы.

1) A. Как мне просто занопить какую-либо инструкцию?

Для этого достаточно просто записать байты в память:


DWORD address = 0xABCDEF00;
BYTE orgiginal[6] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
VirtualProtect( (void*)address, sizeof(original), PAGE_EXECUTE_READWRITE, &old_prot);
memcpy( (void*)address, original, sizeof(original));
VirtualProtect( (void*)address, sizeof(original), old_prot, &old_prot);
DWORD old_prot = 0;

2) A. Как ты делаешь сигнатуры?

Я делаю сигнатуры при помощи olly dbg.

1) Открываем olly находим нужную инструкцию.

post-8127-0-40817600-1343657332_thumb.jp

2) Выделяем вместе с нашей инструкцией ещё пару (чтобы наша сигнатура была уникальной)

post-8127-0-24552200-1343657342_thumb.jp

3) Делаем правый клик мышью, выбираем Make Sig, а после Test Sig

post-8127-0-88230900-1343657350_thumb.jp

Должно получиться примерно это:

post-8127-0-60775400-1343657359_thumb.jp

4) Проверяем, одна ли наша сигнатура в своём роде, если нет, то возвращаемся к шагу 2.

post-8127-0-93410000-1343657685_thumb.jp

Моя olly dbg:

OllyDbg.zip

3) A. Как я могу получить адрес DLL в памяти без MODULEINFO?


char* module_name = "test.dll"; // здесь мы указываем имя модуля
DWORD dll_address = (DWORD)GetModuleHandle(module_name);

4) А. Как я могу вывести адрес чего-либо на экран?

Используя отладочную консоль, так:


printf("Address: 0x%X", MyFunction); // вывод адреса функции, с классами и массивами точно также
printf("Address: 0x%X", &address); // вывод адреса переменной

5). А. Почему эта инструкция не работает в твоём авто ассемблере на C++?

1) Проверьте на правильность написания ваш код.

2) Если ваша инструкция такого вида, mov dword ptr [0x1005194],esi (и студия ругается на недопустимый тип операнда), тот вам нужно сделать так:


push eax // тут можно писать любой удобный для вас регистр
mov eax,[0x1005194]
mov [eax],esi
//ваш код
pop eax

6. Как использовать d3d windower?

1) Запускаем саму программу

2) Кликаем на "+"

3) Выбираем нужное нам приложение

4) Тыкаем на кнопку, которая идёт после значка компьютера (она чуть правее)

5) Заходим в последнюю вкладку, и ставим две галочки.

post-8127-0-63515600-1344101051_thumb.jp

6) Перезапустить программу, и приложение можно запускать

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Суть сигнатуры в том, что она должна указывать на первый байт нужной команды. Переходишь в оле в окно кода, жмёшь ctrl+g, вбиваешь адрес инструкции и копируешь байты нужной инструкции и ниже (потому что определённая последовательность команд уникальна, в отличие от одной команды, которая может встречаться в коде много раз).

PS: "Я делаю сигнатуры при помощи оли" - не совсем корректно, потому что сигнатуры делает не сама оля, а плагин для неё.

Ссылка на комментарий
Поделиться на другие сайты

Суть сигнатуры в том, что она должна указывать на первый байт нужной команды. Переходишь в оле в окно кода, жмёшь ctrl+g, вбиваешь адрес инструкции и копируешь байты нужной инструкции и ниже (потому что определённая последовательность команд уникальна, в отличие от одной команды, которая может встречаться в коде много раз).

PS: "Я делаю сигнатуры при помощи оли" - не совсем корректно, потому что сигнатуры делает не сама оля, а плагин для неё.

ок спс буду пробовать )

Ссылка на комментарий
Поделиться на другие сайты

Сделал вручную в OllyDbg аналог иньекции кода в CE (нашёл место в файле, где много нулей, и заменил оригинальную инструкцию прыжком на мой код)

Попытался сохранить это дело, а оно не работает. В олли потрассировал его немного и стало ясно что я прыгал на виртуальную память, которая не существует в самом PE.

Можно ли как-то выделить физическую память под свой code injection?

Ссылка на комментарий
Поделиться на другие сайты

Сделал вручную в OllyDbg аналог иньекции кода в CE (нашёл место в файле, где много нулей, и заменил оригинальную инструкцию прыжком на мой код)

Попытался сохранить это дело, а оно не работает. В олли потрассировал его немного и стало ясно что я прыгал на виртуальную память, которая не существует в самом PE.

Можно ли как-то выделить физическую память под свой code injection?

Думаю это поможет - http://msdn.microsoft.com/en-us/library/windows/desktop/aa366890(v=vs.85).aspx

Ссылка на комментарий
Поделиться на другие сайты

Сделал вручную в OllyDbg аналог иньекции кода в CE (нашёл место в файле, где много нулей, и заменил оригинальную инструкцию прыжком на мой код)

Попытался сохранить это дело, а оно не работает. В олли потрассировал его немного и стало ясно что я прыгал на виртуальную память, которая не существует в самом PE.

Можно ли как-то выделить физическую память под свой code injection?

Воспользуйся любой тулзой аля "code cave finder" (она есть и встроенная в самом СЕ), пиши туда. Приобщись к 0ldsk00l! :D

Ссылка на комментарий
Поделиться на другие сайты

Воспользуйся любой тулзой аля "code cave finder" (она есть и встроенная в самом СЕ), пиши туда. Приобщись к 0ldsk00l! :D

Он спрашивал вообще-то про динамическое выделение памяти)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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