Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
20 / 20 / 12
Регистрация: 15.05.2012
Сообщений: 169

Hook с перехватом регистра

17.11.2019, 12:08. Показов 1262. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня дорогие форумчане, подскажите пожалуйста, есть такая простая задача: "Необходимо вытаскивать текст с адреса, который попадает в реестр. В моем случае это регистр ECX".
Модификация памяти происходит следующим образом:
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
27
28
29
30
31
32
33
34
35
void* Create_Hook(
    BYTE* src,       //Адресс по которому будет установлен хук
    const BYTE* dst, //Адресс блока с дубликатом
    const int len)   //Размер нашего хука
{
    BYTE* jmp;
    DWORD dwback;
    DWORD jumpto, newjump;
    VirtualProtect(src, len, PAGE_READWRITE, &dwback);
    if (src[0] == 0xE9)
    {
        jmp = (BYTE*)malloc(10);
        jumpto = (*(DWORD*)(src + 1)) + ((DWORD)src) + 5;
        newjump = (jumpto - (DWORD)(jmp + 5));
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = newjump;
        jmp += 5;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src - jmp);
    }
    else
    {
        jmp = (BYTE*)malloc(5 + len);
        memcpy(jmp, src, len);
        jmp += len;
        jmp[0] = 0xE9;
        *(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;
    }
    src[0] = 0xE9;
    *(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;
    for (int i = 5; i < len; i++)
        src[i] = 0x90;
    VirtualProtect(src, len, dwback, &dwback);
    return (jmp - len);
}
Затем сама простая функция, которую инжекчу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DWORD dwAddress = 0x0046239E;
DWORD dwReturn = dwAddress + 0xA;
 
_declspec(naked)int My_hook(void)
{   
    char* mystring;
    _asm mov mystring, ecx
    _asm mov edx, eax
    _asm mov byte ptr[esp + 0x52C], 0x11
    _asm jmp dword ptr[dwReturn]
}
 
//И собственно вызов
Create_Hook((BYTE*)dwAddress, (BYTE*)My_hook, 10);
Вот я хотел в "mystring" сохранять значение и дальше уже сохранять его в документ. Но приложение крашится каждый раз когда доходит до этого места, как правильно реализовать перехват и чтение данных не подскажете ?
Спасибо большое
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2019, 12:08
Ответы с готовыми решениями:

В чем преимущество trampoline hook над обычным hook?
Объясните пожалуйста в чем преимущество trampoline hook и hook? Никак не могу понять

Подскажите с перехватом траффика
Доброго времени суток. Сначала опишу что нужно. Есть программка, она отправляет не зашифрованные TCP пакеты. Мне нужно их перехватить и...

Проблема с перехватом оконных сообщений
#include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;111.h&quot; #define MAX_LOADSTRING 100 // Глобальные переменные: int i = 100; ...

3
 Аватар для Alikberov
131 / 116 / 25
Регистрация: 03.05.2017
Сообщений: 337
Записей в блоге: 1
17.11.2019, 20:25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DWORD dwAddress = 0x0046239E;
DWORD dwReturn = dwAddress + 0xF;
 
_declspec(naked)int My_hook(void)
{   
    char* mystring;
    _asm mov mystring, ecx
    _asm mov edx, eax
    _asm mov byte ptr[esp + 0x52C], 0x11
    _asm jmp dword ptr[dwReturn]
}
 
//И собственно вызов
Create_Hook((BYTE*)dwAddress, (BYTE*)My_hook, 15);
A так?
0
20 / 20 / 12
Регистрация: 15.05.2012
Сообщений: 169
17.11.2019, 23:09  [ТС]
Alikberov, Тоже краш. А как можно в функции naked поставить вызов того же MessageBoxA ?
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
18.11.2019, 11:34
а чем GetThreadContext не устраивает?
по моему простейший отладочный цикл куда эффективнее, чем писать 32 битную вставку ассемблера.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2019, 11:34
Помогаю со студенческими работами здесь

Отрисовка ListView перехватом WM_ERASEBKGND
Уважаемые форумчане, подскажите как сделать отрисовку ListView через WM_ERASEBKGND по человечески. При настоящем коде фон рисунка...

Не разобраться с перехватом нажатия клавиш. Разбалансировал стек и не только
Всем привет. Крч большой код. Вот сокращенная часть, что не работает. Выдает разбалансировал стек и не отслеживается нажатие, а когда...

Не разобраться с перехватом нажатия клавиш. Разбалансировал стек и не только
Всем привет. Работаю с Visual Studio 2013 Крч большой код. Вот сокращенная часть, что не работает. Выдает разбалансировал стек и не...

Как реализовать в LPT взаимосвязь статус регистра и регистра данных
Как реализовать в LPT взаимосвязь статус регистра и регистра данных. Чтобы при изменении сигнала в статус регистре на одном из регистров...

Как записать информацию из 16 битного регистра в два регистра по 8 бит
Как записать информацию из 16 битного регистра в два регистра по 8 бит. (То есть каждый раз может быть разное число в регистре 16 бит) ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru