Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Flaker
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
#1

Инъекция своего кода в функцию открытой программы - C++

29.08.2013, 17:18. Просмотров 743. Ответов 2
Метки нет (Все метки)

Пишу библиотеку, которая при ее присоединении к процессу подменяет функцию MessageBoxA на свою.

По сути, для подмены необходимо сделать jmp к адресу своей функции при вызове стандартной...

Так вот вопрос, как внедрить jmp в начало стандартной функции?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 17:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инъекция своего кода в функцию открытой программы (C++):

Интересная задача. (вывод своего кода на экран) - C++
Вот, сидели с другом на паре и возник вопрос: Можно ли в с\с++ написать программу , которая выведет сама свой код на экран? В голову...

Вставка своего кода в чужой процесс. *nix - C++
Добрый вечер :) Расскажите пожалуйста о инжектинге. На данный момент, я знаю только то, что можно внедрить свой код в адресное...

Вынести основную часть кода кода в отдельную функцию - C++
помогите пожалуйста переделать это на функцию... #include <locale.h> #include <conio.h> int main() { setlocale(0,""); float...

Вызвать функцию из внешнего (своего) процесса без окна - C++
Приветствую. Как вызвать функцию из своего другого процесса у которого нет окна?

Вылет программы с классом своего стека - C++
Здравствуйте. Вот начинаю изучать ООП и надо написать стек. Набросал чуток кода, написал push() и printStack(). Тестирую их, ошибок явных...

Нужно разработать функцию, которая выводит последние N строк из своего файла ввода - C++
Вообще не знаю как делать((. Нужно разработать функцию, которая выводит последние N строк из своего файла ввода. Значение N задано как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
29.08.2013, 17:33 #2
Flaker, а зачем внедрять в начало стандартной функции? Не проще ли заменить вызов MessageBoxA на jmp или поставить перед ним?
0
Flaker
2 / 2 / 0
Регистрация: 07.07.2012
Сообщений: 90
29.08.2013, 19:05  [ТС] #3
Вызовов может быть много же... Из разных мест...

Добавлено через 1 час 29 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void InterceptFunctions(void)
{
  DWORD op;
  //сначала получим абсолютный адрес функции для перехвата
  adr_MessageBoxA = (DWORD)GetProcAddress(GetModuleHandle( (LPCTSTR)"user32.dll" ),
                    "MessageBoxA");
  if(adr_MessageBoxA == 0)
  {
    MessageBox(NULL, (LPCTSTR)"Can`t get adr_MessageBoxA", (LPCTSTR)"Error!", 0);
    return;
  }
 
  // Зададим машинный код инструкции перехода, который затем впишем 
  // в начало полученного адреса:
  jump.instr_push = 0x68;
  jump.arg = (DWORD)&Intercept_MessageBoxA;
  jump.instr_ret = 0xC3;
 
  //Прочитаем и сохраним первые оригинальные 6 байт стандартной API функции
  ReadProcessMemory(GetCurrentProcess(),(void*) adr_MessageBoxA, 
                    (void*)&old, 6, &written);
 
    //Запишем команду перехода на нашу функцию поверх этих 6-ти байт
    WriteProcessMemory(GetCurrentProcess(), (void*)adr_MessageBoxA, 
    (void*)&jump, sizeof(jmp_far), &written);
}
Вот функция внедряет push и ret используя "машинный код инструкции перехода", но она не работает...

Может можно просто asm вставку внедрить?
Или например так, преобразовать asm вставку в машинный код, а затем этот машинный код внедрить, по тому же принципу, как здесь?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 19:05
Привет! Вот еще темы с ответами:

Использование своего объекта своего класса внутри другого - C++
Здравствуйте. Есть класс для работы с матрицами. Все работает. Теперь нужно создать другой класс, где полями будут являться переменные -...

Сюръекция, инъекция, биекция.Функции - C++
Есть пары чисел , надо написать YES/NO если они есть функцией , если да, вывести YES и определить есть ли сюръекция, инъекция, биекция ...

Из кода понять функцию - C++
http://vkontakte.ru/photo1346767_264351810 вот фото, препод дал сказал выяснить, что за формула или функция в этом коде, залил бы на...

Инъекция кода - Assembler
Есть Access файл с дополнительными надстройками наверное на vbs. Текущий код не проверяет дублирующие заявки, хотелось бы, чтобы при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru