Класс-инжектор на C++

Давеча наелся всяких плацебо"витаминчиков" и захотелось странного, а именно - выучить C++ за неделю. Начинание примечательно тем, что это первый раз, когда я изучаю что-то, связанное с программированием, по книге (обычно руководствовался примерами из гугла). Да и подобные языки мне до этого не приходилось изучать, в общем-то. Книжку выбрал первую попавшуюся на Amazon - Herbert Schildt "C++: The Complete Reference".
Результат своего непродолжительного изучения оформил в следующий класс, который позволяет грузить DLL или произвольный код в 32- и 64- разрядные процессы. Код, правда, написан не в соответствии с модным стандартом C++0x, и в нем не используется такая мощная вещь как шаблоны (хотя сомневаюсь, что они тут серьезно пригодились бы), но, тем не менее, базовые возможности языка я постарался задействовать.
Использовать класс довольно просто, например:

Доступные методы:

Для работы с 64-разрядными процессами достаточно просто скомпилировать класс под соответствующую архитектуру.

Скачать: cpp-injector-class
GitHub: cpp-injector-class

Класс-инжектор на C++: 27 комментариев

  1. Что, даже нормально работает со всякими необычными случаями, типа наличия релоков в .exe файлов, нестандартными выравниваниями и секциям нулевого размера? :) Вообще-то в данном случае вам даже класс не нужен - достаточно описать эксцепшен и объявить нужные функции в своем неймспейсе.

    1. Секций нулевого размера не бывает. Если у секции нулевой виртуальный и физический размер указан в заголовке PE, то он не загрузится. Нестандартных выравниваний тоже не существует. Невыровненный exe сделать очень муторно и я сомневаюсь, что он загрузится в новых системах. Но это да, это все неважно при инжекте.

  2. "выучить C++ за неделю" да еще и писать на таком уровне.
    мммм....
    если это правда, то респект тебе за это.

    я думал, что синтаксис, указатели на функцию, ПРАВИЛЬНОЕ УПРАВЛЕНИЯ ПАМЯТЬЮ, указателями и ссылками, библиотеку std:: , директивы условной компиляции, особенности реализации win32 от win64, объекты ядра и куча всего, что я даже не понимаю невозможно выучить за неделю.

    правда, респект тебе.

    1. видимо, тут суть в том, что у kaimi есть огромный опыт в других языках, и посему С++ пошел за неделю.

      Это как человеку, который 5 лет кодил на си, учить пхп. Ес-но что он его с лету выучит, в отличии от новичка.

  3. Уведомление: Аноним
  4. Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall injector::~injector(void)" (??1injector@@QAE@XZ) в функции __catch$_main$0

    1. 1>InitializeBuildStatus:
      1> Creating "Debug\1234567890.unsuccessfulbuild" because "AlwaysCreate" was specified.
      1>ClCompile:
      1> main.cpp
      1> injector.cpp
      1> Generating Code...
      1>Manifest:
      1> Deleting file "Debug\1234567890.exe.embed.manifest".
      1>LinkEmbedManifest:
      1> 1234567890.vcxproj -> D:\1234567890\Debug\1234567890.exe
      1>FinalizeBuildStatus:
      1> Deleting file "Debug\1234567890.unsuccessfulbuild".
      1> Touching "Debug\1234567890.lastbuildstate".
      1>
      1>Build succeeded.
      1>
      1>Time Elapsed 00:00:12.43
      ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

    1. Пример чего? Там есть метод, которому передается в качестве аргумента в том числе указатель на массив байт, который будет исполнен.

      1. @Kaimi, ну пожалуйста, я просто незнаю как) Как можна внедрить код например, ну там запись строки про автора)

        1. Все зависит от языка, от ОС, от того, что представляет из себя GUI программы и от прочих вещей...
          И это мало связано с внедрением кода.

      2. @Kaimi, а как тогда можна внедрить код с строкой об авторе? Припустим что у меня есть приложение, и я хочу записать в него строку, что нет универсального метода для всех приложений?

  5. injector& injector::operator=(const injector& inj); эта строчка вызывает ошибку не допустимое определения, я понял мне её разбить на атребуты?

    не подскажешь как могу разбить? ибо я пару дней сижу только за с++ до этого qt немного сидел .

    1. Думаю, что надо удалить фрагмент "injector::". Заменить "injector& injector::operator=(const injector& inj);" на "injector& operator=(const injector& inj);".

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *