![]() |
eXeL@B —› Вопросы новичков —› InjectDLL v0.01 |
Посл.ответ | Сообщение |
|
Создано: 14 октября 2007 14:12 · Личное сообщение · #1 Привет! Часто на форуме возникают вопросы об инжекте DLL в какой-либо процесс. Кстати, Ms-Rem сделал отличную библиотеку - Advanced API Hook Libary. Библиотека довольно проста в использовании, а уж если вы пишете на Delphi, то для вас вообще нет никаких препятствий для ее использования. Вот небольшой пример ее использования, с исходниками на C++Builder 6. =) Программа инжектит указанную DLL в процесс по его идентификатору (PID, его можно узнать в любом дампере, в FAR'е, либо в стандартном диспетчере процессов, добавив соотв. колонку). ----- MicroSoft? Is it some kind of a toilet paper? ![]() |
|
Создано: 14 октября 2007 14:15 · Поправил: Tim · Личное сообщение · #2 |
|
Создано: 14 октября 2007 15:55 · Поправил: tnt17 · Личное сообщение · #3 |
|
Создано: 14 октября 2007 21:46 · Личное сообщение · #4 |
|
Создано: 14 октября 2007 21:54 · Личное сообщение · #5 |
|
Создано: 14 октября 2007 22:33 · Личное сообщение · #6 |
|
Создано: 14 октября 2007 23:54 · Поправил: tnt17 · Личное сообщение · #7 |
|
Создано: 15 октября 2007 15:57 · Личное сообщение · #8 |
|
Создано: 15 октября 2007 15:57 · Личное сообщение · #9 |
|
Создано: 15 октября 2007 17:57 · Личное сообщение · #10 |
|
Создано: 15 октября 2007 19:23 · Личное сообщение · #11 Вот из статьи Ms-Rem: Наверняка минимальный размер экзешника в 3.5кб удовлетворит не всех, но если постараться, то можно добиться еще большего уменьшения размера. Для этого нужно отказаться от удобств работы с борландовским линкером и собирать исполнимые файлы линкером от Microsoft. Но к сожалению, здесь нас ждет одна загвоздка. Проблема в том, что основным рабочим форматом мелкософтовского линкера является COFF, но он может понимать и интеловский OMF. Но программисты борланда (видать с целью создать несовместимость с микрософт) в версиях Delphi выше третьей изменили генерируемый формат obj файлов так, что теперь он несовместим с Intel OMF. Тоесть теперь существуют два вида OMF: Intel OMF и Borland OMF. Программы способной конвертировать объектные файлы из формата Brland OMF в COFF или Intel OMF я не нашел. Поэтому придется использовать компилятор от Delphi 3, который генерирует стандартный Intel OMF объектный файл. Импорт используемых API нам тоже придется описывать вручную, но его описание несколько отличается. Для начала возьмем библиотеку импорта user32.lib из состава Visual C++ и откроем ее в HEX редакторе. Имена функций библиотеки имеют такой вид: "_MessageBoxA@16", где после @ идет размер передаваемых параметров. Следовательно объявлять функции мы будем таким образом: function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; stdcall; external 'user32.dll' name '_MessageBoxA@16'; Попробуем теперь написать HelloWorld как можно меньшего размера. Для этого создаем проект такого типа: unit HelloWorld; interface Procedure Start; implementation function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; stdcall; external 'user32.dll' name '_MessageBoxA@16'; Procedure Start; begin MessageBoxA(0, 'Hello world!', nil, 0); end; end. Тип модуля UNIT нужен для того, чтобы компилятор генерировал в объектном файле символьные имена объявленных процедур. В нашем случае это будет процедура Start, которая будет являться точкой входа в программу. Теперь компилируем проект следующей строкой: dcc32.exe -JP -$A-,B-,C-,D-,G-,H-,I-,J-,L-,M-,O+,P-,Q-,R-,T-,U-,V-,W+,X+,Y- HelloWorld.pas После компиляции получим файл HelloWorld.obj, который откроем в HEX редакторе и посмотрим во что превратилась наша точка входа. У меня получилось Start$qqrv. Это имя нужно указать как точку входа при сборке исполнимого файла. И наконец выполним сборку: link.exe /ALIGN:32 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /ENTRY:Start$qqrv HelloWorld.obj user32.lib /out:Hello.exe Если таким способом получить *.obj файл, то можно ли его использовать в проекте VS2005 C++, ктото пробовал? Или если выполнять сборку как в примере выше, можно ли использовать link.exe из VS2005 ? просто нет времени пока проверить. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› InjectDLL v0.01 |