Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› InjectDLL v0.01
Посл.ответ Сообщение

Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 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?




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 14 октября 2007 14:15 · Поправил: Tim
· Личное сообщение · #2

Аттачи глючат... когда пофиксят?

slil.ru/24976877 - прога
slil.ru/24976878 - сама библиотека

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 14 октября 2007 15:55 · Поправил: tnt17
· Личное сообщение · #3

реализаций в инете навалом, нужно только гуглом научиться пользоваться.
2 неплохе реализации, на разных Length Disasm движках. Для новичков в самый раз.
slil.ru/24977232

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 14 октября 2007 21:46
· Личное сообщение · #4

Сам пользуюсь библиотекой MS-Rema - Advanced API Hook Libary, но решил переходить на С++, поэтому и возникает вопрос, можно ли (не вручную) преобразовать делфовские *.pas файлы в файлы для использования в Visual Studio 2005 (C++) ?




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 14 октября 2007 21:54
· Личное сообщение · #5

Tolkin
нет, нужно переписывать. либо скомпилить в делфях в .lib, а в студии добавить либу в проект. тебе, только декларацию нужно будет составить и впринципе все, можно юзать.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 14 октября 2007 22:33
· Личное сообщение · #6

никогда просто не проделывал такое, можно ли примерчик, что в делфи делать и дальше как?




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 14 октября 2007 23:54 · Поправил: tnt17
· Личное сообщение · #7

Вернее нужно добавлять обьектник. .obj файл в проект. см. пример. тут только все на Си, но принцип один и тот же
slil.ru/24979281

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 15 октября 2007 15:57
· Личное сообщение · #8

я недавно конвертил эту библу в VS. если нужно, то вот:
slil.ru/24981697

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 15 октября 2007 15:57
· Личное сообщение · #9

tnt17
у Borland и Microsoft разные форматы объектников - у первого OMF, у второго COFF

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 15 октября 2007 17:57
· Личное сообщение · #10

g COFF2OMF
g OMF2COFF

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 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
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати