Autor Beitrag
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: So 25.12.05 15:10 
bin dabei einen hook zu coden der dem benutzer meldet wenn eine exe versucht einen Registry eintrag zu machen!

Die MessageBox zeigt er noch an! aber dann, unabhängig von der entscheidung (yes | no), stürtzt das Programm ab!

Ich denke wieder irgend sonn dummer fehler der sich eingeschlichen hat!

plz help :?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
library hook;

uses
  windows,
  uallhook,
  dialogs,
  Controls;

var

  old_RegCreateKeyExA: function(hKey: HKEY; lpSubKey: LPCTSTR; Reserved: DWORD; lpClass: LPTSTR; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: SECURITY_ATTRIBUTES; phkResult: PHKEY; lpdwDisposition: LPDWORD): Integer; stdcall;
  next_RegCreateKeyExA: function(hKey: HKEY; lpSubKey: LPCTSTR; Reserved: DWORD; lpClass: LPTSTR; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: SECURITY_ATTRIBUTES; phkResult: PHKEY; lpdwDisposition: LPDWORD): Integer; stdcall;


function my_RegCreateKeyExA(hKey: HKEY; lpSubKey: LPCTSTR; Reserved: DWORD; lpClass: LPTSTR; dwOptions: DWORD; samDesired: REGSAM; lpSecurityAttributes: SECURITY_ATTRIBUTES; phkResult: PHKEY; lpdwDisposition: LPDWORD): Integer; stdcall;
begin
  if MessageDlg('[RegCreateKeyExA] '+ParamStr(0)+' versucht einen Eintrag in die Registry zu machen, soll dieser Eintrag erlaubt werden?',mtConfirmation, [mbYes, mbNo], 0) = mryes then begin
    Result := next_RegCreateKeyExA(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
  end
  else begin
    Result := 0;
  end;
end;

procedure injectmain;
var
  p4:pointer;
begin
  p4 := GetProcAddress(GetModuleHandle('advapi32.dll'),'RegCreateKeyExA');
  if p4 <> nil then begin
    @old_RegCreateKeyExA := p4;
    uallHook.HookCode(@old_RegCreateKeyExA,@my_RegCreateKeyExA,@next_RegCreateKeyExA);
  end;
end;

procedure uninjectmain;
begin
  uallHook.UnhookCode(@next_RegCreateKeyExA);
end;

procedure dllmain(dwReason: integer);
begin
  case dwreason of
    DLL_PROCESS_ATTACH:
      injectmain;
    DLL_PROCESS_DETACH:
      uninjectmain;
  end;
end;

begin
  DLLProc := @DLLMain;
  DLLMain(1);
end.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 25.12.05 15:14 
hasu du mal versuch nur den hook zu installieren ohne in der gehookten funktin irgendwas anderes zu machen ausser die original funktion wieder aufzurufen?

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: So 25.12.05 15:17 
user profile iconuall@ogc hat folgendes geschrieben:
hasu du mal versuch nur den hook zu installieren ohne in der gehookten funktin irgendwas anderes zu machen ausser die original funktion wieder aufzurufen?


huch O.o
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 25.12.05 21:52 
dann versuch mal anstatt der uallHook unit die uallTableHook unit

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 25.12.05 22:00 
zusätzlich sind ide richtigen parameter:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function RegCreateKeyExA(hKey: HKEY; lpSubKey: PAnsiChar;
  Reserved: DWORD; lpClass: PAnsiChar; dwOptions: DWORD; samDesired: REGSAM;
  lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY;
  lpdwDisposition: PDWORD): Longint; stdcall;



solltest besser das nehmen. hab mit jetzt nich das ansgesaucht wa sdu genimmen hast. und MSGDLG darf die funktion die du hookst NICHT benutzen.

ich kanns mir frühstens morgen anschaun

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: So 25.12.05 23:01 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
library hook;

uses
  windows,
  uallhook,
  dialogs,
  Controls;

var
  old_RegCreateKeyExA: function (hKey: HKEY; lpSubKey: PAnsiChar;
                                                Reserved: DWORD; lpClass: PAnsiChar; dwOptions: DWORD; samDesired: REGSAM;
                                                lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY;
                                                lpdwDisposition: PDWORD): Longint; stdcall;
  next_RegCreateKeyExA: function (hKey: HKEY; lpSubKey: PAnsiChar;
                                                Reserved: DWORD; lpClass: PAnsiChar; dwOptions: DWORD; samDesired: REGSAM;
                                                lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY;
                                                lpdwDisposition: PDWORD): Longint; stdcall;
                                                
function my_RegCreateKeyExA(hKey: HKEY; lpSubKey: PAnsiChar;
                                                Reserved: DWORD; lpClass: PAnsiChar; dwOptions: DWORD; samDesired: REGSAM;
                                                lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY;
                                                lpdwDisposition: PDWORD): Longint; stdcall;
begin
  if MessageDlg('[RegCreateKeyA] '+ParamStr(0)+' versucht einen Eintrag in die Registry zu machen, soll dieser Eintrag erlaubt werden?',mtConfirmation, [mbYes, mbNo], 0) = mryes then begin
    Result := next_RegCreateKeyExA(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
  end
  else begin
    Result := 0;
  end;
end;



procedure injectmain;
var
  p4:pointer;
begin


  p4 := GetProcAddress(GetModuleHandle('advapi32.dll'),'RegCreateKeyExA');
  if p4 <> nil then begin
    @old_RegCreateKeyExA := p4;
    uallHook.HookCode(@old_RegCreateKeyExA,@my_RegCreateKeyExA,@next_RegCreateKeyExA);
  end;

end;

procedure uninjectmain;
begin
  uallHook.UnhookCode(@next_RegCreateKeyExA);
end;

procedure dllmain(dwReason: integer);
begin
  case dwreason of
    DLL_PROCESS_ATTACH:
      injectmain;
    DLL_PROCESS_DETACH:
      uninjectmain;
  end;
end;

begin
  DLLProc := @DLLMain;
  DLLMain(1);
end.


so gehts, vielen Dank ;)!