Давеча наелся всяких плацебо"витаминчиков" и захотелось странного, а именно - выучить C++ за неделю. Начинание примечательно тем, что это первый раз, когда я изучаю что-то, связанное с программированием, по книге (обычно руководствовался примерами из гугла). Да и подобные языки мне до этого не приходилось изучать, в общем-то. Книжку выбрал первую попавшуюся на Amazon - Herbert Schildt "C++: The Complete Reference".
Результат своего непродолжительного изучения оформил в следующий класс, который позволяет грузить DLL или произвольный код в 32- и 64- разрядные процессы. Код, правда, написан не в соответствии с модным стандартом C++0x, и в нем не используется такая мощная вещь как шаблоны (хотя сомневаюсь, что они тут серьезно пригодились бы), но, тем не менее, базовые возможности языка я постарался задействовать.
Использовать класс довольно просто, например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#include "injector.hpp" int main() { injector a; a.set_blocking(false); try { a.inject(L"CFF Explorer.exe", L"x64.dll"); } catch(const injector_exception& e) { e.show_error(); } return 0; } |
Доступные методы:
|
//Инжект DLL в процесс с указанным именем void inject(const std::wstring& proc_name, const std::wstring& dll_name); //Инжект кода в процесс с указанным именем void inject(const std::wstring& proc_name, const BYTE * code, unsigned long int code_size); //Инжект DLL в процесс с указанным PID void inject(unsigned int pid, const std::wstring& dll_name); //Инжект кода в процесс с указанным PID void inject(unsigned int pid, const BYTE * code, unsigned long int code_size); //Снятие/Установка блокирующего режима (вызывать ли WaitForSingleObject и VirtualFreeEx после создания удаленного потока или нет) void set_blocking(bool active); |
Для работы с 64-разрядными процессами достаточно просто скомпилировать класс под соответствующую архитектуру.
Скачать: cpp-injector-class
GitHub: cpp-injector-class