[C++] Правильный перехват функций (x86)

  Рет қаралды 13,015

Dmitry K. (Coder)

Dmitry K. (Coder)

Күн бұрын

Пікірлер: 29
@ДмитрийНовиков-у1б
@ДмитрийНовиков-у1б 10 жыл бұрын
Спасибо за все твои уроки!Сейчас не много людей выпускают такие узкоспециализированные видео, а про некоторые темы даже статьей в интернете по-русски нет
@sergeys7771
@sergeys7771 7 жыл бұрын
статьи на русском? Забудь про программирование тогда, если не знаешь англ. Жесть
@АлексейИванов-м5щ7р
@АлексейИванов-м5щ7р 7 жыл бұрын
В этом коде есть небольшая ошибка. Когда мы вызываем ChangeProtection() нам нужно передать размер totalLen, а не totalLen + delta.
@romanbush5164
@romanbush5164 3 жыл бұрын
Круто, но можно ли перехватывать функции не меняя исходный код?
@adskfksefn
@adskfksefn 9 жыл бұрын
Даешь новые видио!!! Супер!!!
@se7dxs
@se7dxs 9 жыл бұрын
@ Dmitry K., вот только тут одна проблема - если в приложение которое хукаеться, имеется 2 MessageBox'a, то как разделить применение хука. Ибо если не разделять он будет заменять и первый и второй.
@DmitryKCoder
@DmitryKCoder 9 жыл бұрын
+se7dxs можешь дописать код, который будет определять откуда шел вызов, или по параметрам, которые передаются в MessageBox, либо подменяй сами вызовы MessageBox)
@se7dxs
@se7dxs 9 жыл бұрын
+Dmitry K. (Coder) Спасибо что ответил, я так понял код нужно дописывать в HookHelper, но я совсем не представляю что он из себя там должен представлять =), возможно ли где-то посмотреть примерную реализацию ? И еще 1 вопросик - как быть с классами которые представляют собой экспортируемую переменную, как обратиться по их виртуальнм классам что внутри, а точнее как указать что я хочу их перезаписать ? Т.е пример __declspec(dllimport) extern FManager* gManager; А FManager представляет собой класс с виртуальными функциями т.е class __declspec(dllimport) FManager { public: virtual FArchive* CreateFileReader( const TCHAR* Filename, DWORD ReadFlags=0, FOutputDevice* Error=GNull )=0; } FArchive Это кастомный класс. Как обратиться к CreateFileReader, точнее как его перехватывать?
@DmitryKCoder
@DmitryKCoder 9 жыл бұрын
se7dxs загугли "интерфейсы в библиотеках на C++"
@se7dxs
@se7dxs 9 жыл бұрын
Не как не могу найти ничего дельного, может подкините чтонибудь дельное ?
@se7dxs
@se7dxs 9 жыл бұрын
+Dmitry K. (Coder) Дмитрий - возможно ли узнать ваши контакты, я мог бы скинуть вам $ за ваше время.
@sdfsdfgs
@sdfsdfgs 10 жыл бұрын
По чем учил с++?(Какие книги читал?Какие уроки смотрел?)
@igar-s
@igar-s 10 жыл бұрын
Хорошее видео. А можете сбросить ссылку на исходник?
@АлексейИванов-м5щ7р
@АлексейИванов-м5щ7р 7 жыл бұрын
Хотел ещё добавить, что если используете Debug-сборку и функции имеют косвенный переход через ILT, то необходимо добавить след. код в начало функции HookFunctionWithTrampoline(): if (origFuncPtr[0] == 0xE9) { // correct origFuncPtr because it's JMP origFuncPtr = *((unsigned int*)(origFuncPtr + 1)) + origFuncPtr + 5; } Он вычисляет "правильный" адрес функции и позволяет не перезаписать следующий элемент в ILT.
@meefkifox9438
@meefkifox9438 4 жыл бұрын
Я так понимаю, что это можно использовать для перехвата функций других приложений?
@jodarkma
@jodarkma 10 жыл бұрын
Про первый способ даже и не слышал, вторым пользовался всегда. Вы не можете подсказать какой-нибудь ассемблер тип AsmJit только чтобы можно инструкции уже в работающем приложении из текстовой строки компилировать и выполнять, т.е. так же, как это сделано в Cheat Engine?
@DmitryKCoder
@DmitryKCoder 10 жыл бұрын
Если мне не изменяет память, то там такого класса не существует (на всякий случай ознакомься с их API). Тебе нужно будет писать транслятор, который будет переводить текст в инструкции понятные самому asmjit. К пример тебе нужно будет строку mov eax,[edx+20] транслировать в asmjit.mov(eax, dword_ptr(edx, 0x20)); .
@jodarkma
@jodarkma 10 жыл бұрын
***** Ну это понятно, я думал, что может существующие есть уже библиотеки, чтобы не изобретать велосипед.
@DmitryKCoder
@DmitryKCoder 10 жыл бұрын
DarkoreXOR думаю стоит загуглить, может есть что-нибудь и готовое.
@diadyatrix2027
@diadyatrix2027 8 жыл бұрын
Последний вариант никак не удается, то ли трамплин не возвращается, то ли еще что-то часа 4, наверное, за последним примером сидел, кошмар просто)) Быть может сохранился исходник, ибо у меня уже глаза замылились
@Jakozdobanatorcie
@Jakozdobanatorcie 10 жыл бұрын
Сегодня тоже самое делал )).
@DerebookSVK
@DerebookSVK 9 жыл бұрын
Кодер сделай туториал по хукам функций виртуальных таблиц плиз ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
@p45h3
@p45h3 7 жыл бұрын
>BeaEngine.lib(BeaEngine.obj) : error LNK2019: ссылка на неразрешенный внешний символ _sprintf в функции _CopyFormattedNumber@20
@АлексейИванов-м5щ7р
@АлексейИванов-м5щ7р 7 жыл бұрын
Попробуй собрать BeaEngine.lib из исходников. Поиграй с параметрами BEA_USE_STDCALL/ исключить crt.lib (/NODEFAULTLIB)
@bshtornado3036
@bshtornado3036 7 жыл бұрын
Спасибо за видео, радует что можно найти хорошее обучающее видео на русском языке :) а можете подсказать что за музыка фоном играет? :-)
@Poker-s_S.V.
@Poker-s_S.V. 7 жыл бұрын
ссылка на дизассемблер не работает
@АлексейИванов-м5щ7р
@АлексейИванов-м5щ7р 7 жыл бұрын
github.com/BeaEngine/beaengine
@roysivargas7354
@roysivargas7354 10 жыл бұрын
Почему ты так помешался на unsigned char?! Нифига не пойму.
Всё об указателях в C++ за 20 минут
20:00
Don’t Choose The Wrong Box 😱
00:41
Topper Guild
Рет қаралды 62 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41
How Strong Is Tape?
00:24
Stokes Twins
Рет қаралды 96 МЛН
Как устроен PYTHON
37:44
про АйТи | IT Pro
Рет қаралды 25 М.
[1] C++ - Сериализация (json)
12:58
Shkolnik Prahramist 寂
Рет қаралды 17 М.
"For $35,000 I'd Expect it to be Perfect"
42:13
Blacktail Studio
Рет қаралды 4,8 МЛН
Don’t Choose The Wrong Box 😱
00:41
Topper Guild
Рет қаралды 62 МЛН