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

Поделиться
HTML-код
  • Опубликовано: 2 окт 2024
  • В данном видео уроке мы напишем простую библеотеку для перехваты вызовов функций на C++. Рассмотрим два метода перехватов функций:
    1) Классический стандартный
    2) Трамплинный (усовершенствованный классический)
    Скачать дизассемблер: www.beaengine.o...
    Track: DJ TooZoFF - August Vibes

Комментарии • 29

  • @АлексейИванов-м5щ7р
    @АлексейИванов-м5щ7р 7 лет назад +2

    В этом коде есть небольшая ошибка. Когда мы вызываем ChangeProtection() нам нужно передать размер totalLen, а не totalLen + delta.

  • @romanbush5164
    @romanbush5164 3 года назад +1

    Круто, но можно ли перехватывать функции не меняя исходный код?

  • @sdfsdfgs
    @sdfsdfgs 9 лет назад +1

    По чем учил с++?(Какие книги читал?Какие уроки смотрел?)

  • @meefkifox9438
    @meefkifox9438 4 года назад

    Я так понимаю, что это можно использовать для перехвата функций других приложений?

  • @АлексейИванов-м5щ7р

    Хотел ещё добавить, что если используете Debug-сборку и функции имеют косвенный переход через ILT, то необходимо добавить след. код в начало функции HookFunctionWithTrampoline():
    if (origFuncPtr[0] == 0xE9)
    {
    // correct origFuncPtr because it's JMP
    origFuncPtr = *((unsigned int*)(origFuncPtr + 1)) + origFuncPtr + 5;
    }
    Он вычисляет "правильный" адрес функции и позволяет не перезаписать следующий элемент в ILT.

  • @diadyatrix2027
    @diadyatrix2027 8 лет назад

    Последний вариант никак не удается, то ли трамплин не возвращается, то ли еще что-то часа 4, наверное, за последним примером сидел, кошмар просто))
    Быть может сохранился исходник, ибо у меня уже глаза замылились

  • @bshtornado3036
    @bshtornado3036 6 лет назад

    Спасибо за видео, радует что можно найти хорошее обучающее видео на русском языке :) а можете подсказать что за музыка фоном играет? :-)

  • @igar-s
    @igar-s 10 лет назад

    Хорошее видео. А можете сбросить ссылку на исходник?

  • @DerebookSVK
    @DerebookSVK 8 лет назад

    Кодер сделай туториал по хукам функций виртуальных таблиц плиз ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

  • @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)

  • @Jakozdobanatorcie
    @Jakozdobanatorcie 10 лет назад

    Сегодня тоже самое делал )).

  • @se7dxs
    @se7dxs 9 лет назад +1

    @ 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 8 лет назад

      Не как не могу найти ничего дельного, может подкините чтонибудь дельное ?

    • @se7dxs
      @se7dxs 8 лет назад

      +Dmitry K. (Coder) Дмитрий - возможно ли узнать ваши контакты, я мог бы скинуть вам $ за ваше время.

  • @ДмитрийНовиков-у1б

    Спасибо за все твои уроки!Сейчас не много людей выпускают такие узкоспециализированные видео, а про некоторые темы даже статьей в интернете по-русски нет

    • @sergeys7771
      @sergeys7771 6 лет назад

      статьи на русском? Забудь про программирование тогда, если не знаешь англ. Жесть

  • @adskfksefn
    @adskfksefn 9 лет назад

    Даешь новые видио!!! Супер!!!

  • @jodarkma
    @jodarkma 10 лет назад

    Про первый способ даже и не слышал, вторым пользовался всегда. Вы не можете подсказать какой-нибудь ассемблер тип AsmJit только чтобы можно инструкции уже в работающем приложении из текстовой строки компилировать и выполнять, т.е. так же, как это сделано в Cheat Engine?

    • @DmitryKCoder
      @DmitryKCoder  10 лет назад +1

      Если мне не изменяет память, то там такого класса не существует (на всякий случай ознакомься с их API). Тебе нужно будет писать транслятор, который будет переводить текст в инструкции понятные самому asmjit. К пример тебе нужно будет строку mov eax,[edx+20] транслировать в asmjit.mov(eax, dword_ptr(edx, 0x20)); .

    • @jodarkma
      @jodarkma 10 лет назад

      ***** Ну это понятно, я думал, что может существующие есть уже библиотеки, чтобы не изобретать велосипед.

    • @DmitryKCoder
      @DmitryKCoder  10 лет назад

      DarkoreXOR думаю стоит загуглить, может есть что-нибудь и готовое.

  • @Poker-s_S.V.
    @Poker-s_S.V. 7 лет назад

    ссылка на дизассемблер не работает

  • @roysivargas7354
    @roysivargas7354 9 лет назад

    Почему ты так помешался на unsigned char?! Нифига не пойму.