Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Глобальные хуки, Win32API и DLL


Автор: Pathfider 28.12.2004, 15:52
Нашел на форуме вот такую DLL:
Код

library Project2;

uses
 SysUtils,
 Classes,
 Windows,
 Messages;

var
 SysHook: HHook=0;

function SysMsgProc(Code:Integer; WParam:LongInt; LParam:LongInt):LongInt; stdcall;
var Msg:TMessage;
begin
if Code=HC_ACTION then
 case TMsg(Pointer(LParam)^).message of WM_RBUTTONDOWN,WM_RBUTTONUP,WM_RBUTTONDBLCLK: TMsg(Pointer(LParam)^).message:=WM_NULL
  else Result:=CallNextHookEx(SysHook,Code,WParam,LParam);
 end;
end;

procedure Hook(Flag:Boolean); export; stdcall;
begin
if Flag then SysHook:=SetWindowsHookEx(WH_GETMESSAGE,@SysMsgProc,HInstance,0) else
 begin
  UnhookWindowsHookEx(SysHook);
  SysHook:=0;
 end;
end;

exports Hook;

{$R *.res}

begin
end.

А можно ли получить параметры перехваченного сообщения, ну скажем ReadFile(hFile, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead, lpOverlapped)? Я имею в виду то, что в скобках. Буду очень благодарен за пример.

Автор: p0s0l 29.12.2004, 00:31
Можно
Ищи что-нибудь типа "Перехват API", "Перехват функций" и т.д...

Автор: Pathfider 29.12.2004, 17:21
p0s0l Ты не поверишь, но кроме своих собственных топиков ничего путевого не нашел... smile smile smile smile
Добавлено @ 17:22
p0s0l Ты не поверишь, но кроме своих собственных топиков ничего путевого не нашел... smile smile smile smile

Автор: xAnejl 29.12.2004, 22:05
если пишеш не троян, то тогда madCodeHook

Автор: S.A.P. 29.12.2004, 23:16
http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=fa810a8a8ac3f7884e900fe8efa75f6f&search_in=posts&result_type=topics&highlite=%CF%E5%F0%E5%F5%E2%E0%F2+api

Автор: Pathfider 30.12.2004, 00:10
Цитата
если пишеш не троян, то тогда madCodeHook

Как раз НЕ троян, а что-то вроде FolderGuard'a

Автор: RA 5.1.2005, 20:06
Всё это реализованно по старой системе как в примере из арсенала.
тоесть, есть dll она перехватывает нужные api (с параметрами) и выдаёт мессагу
с названием функции и предложением разрешить или запретить исполнение данной функции.
тоесть тебе нужно сделать примерно следущее:

Код

пример:
function CopyFileHookProc(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall;
begin

 {Тут ты получаешь информацию о параметрах отловленной функции
 lpExistingFileName - Откуда скопировать
 lpNewFileName -      Куда вставить
 bFailIfExists -      Заменить имеющийся уже фаил}

Тут желательно организовать доступ к базе данных где будут проверятся параметры,
далее либо так:

   result := CopyFileNextHook(lpExistingFileName, lpNewFileName, bFailIfExists)
Либо так:
   result := FALSE;
end;


Думаю тут тебе и без меня всё ясно.


Про внедрение.

Так как dll перехватывает вызовы только тех процессов к каторым она приоттачена, то
нужно внедрить её в каждый процесс, пример внедрения есть в кладовке.
Далее можно расслабиться тк. начнётся массовая эпидемия самовнедрений, т.е.
в длл'ке стоит ловушка на запуск новых процессов => следовательно в каждый новый процесс она сама внедрица.


Вообщем проверь всё это, мож я где лажу выдал smile

Автор: Pathfider 6.1.2005, 10:32
RAdmin - ОФИГЕННОЕ СПАСИБО! Теперь буду разбираться пробовать написать что-то подобное.

Автор: Guest 7.1.2005, 14:21
Pathfider

то, что ты просил по телефону:

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
if OpenDialog1.Execute then
begin
s:=OpenDialog1.FileName;
Label1.Caption:=s;
SetFileAccess(ReadWrite,DenyAll);
FileOpen(s,FileMode);
end;
end;

то, что регистрирует Silence

1- Нормальный вход
2- Попытка обхода
3- Завершение программы
4- Не найдены БД
5- Завершение администратором
6- Удаление из реестра
7- Подбор пароля
8 - Вход администратора
91-БД сохранены удачно
92- Неудачное сохранение БД
10- Добавлено задание на печать
11-Обнаружен отладчик
12-Изменение системного времени

есть ещё, но лень лезть в исходник...

Автор: Albinos_x 7.1.2005, 14:27
Выше - это я

Автор: p0s0l 8.1.2005, 15:27
М
 
Albinos_x, какое отношение твой пост имеет к теме ?
Личные переписки - пожалуйста, через PM...

В следующий раз публично-личные переписки будут удаляться...

Автор: Bog d`An 3.11.2005, 14:58
Perchilla почему-то ничего не находит smile

Автор: _hunter 3.11.2005, 15:38
это ты к чему?..

Автор: S.A.P. 3.11.2005, 15:43
Цитата(Bog @ 3.11.2005, 14:58)
Perchilla почему-то ничего не находит
блин, тема столетней давности, я уже и не помню, что за линк там давал smile .

Автор: Pathfider 22.11.2006, 19:14
Я тут нарыл еще вариант перехвата на уровне NativeAPI. И опять же одно "НО": секунды 3 работает нормалоьно, а потом при попытке внедриться в другой процесс - "память по адресу ... не может быть "written"". Уперся пока только в это.
Вот собственно исходник:
http://www.pathfinder.nm.ru/files/1%20DLL.zip
Собрано по материалам товарища MsRem'а с сайта http://www.wasm.ru

Автор: bems 23.11.2006, 01:53
архив MsRemа с wasm.ru каспер при расширеных базах детектит как троян. 

Автор: Pathfider 29.11.2006, 17:29
Цитата(bems @ 23.11.2006,  01:53)
архив MsRemа с wasm.ru каспер при расширеных базах детектит как троян.

Совершенно верно, но я на это забил.

Автор: Pathfider 16.1.2007, 22:05
bems, так что с ошибкой-то делать? Как исправить?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)