Vraag : Weg 2 van het Proces van de toepassing

Dit was de commentaar van Aflarin op de Weg 1
http://www.experts-exchang e.com/Prog ramming/Languages/Pascal/Delphi/Q_26413438.html#33496630


I heeft onderzoek schijnt een code die aan „ZwOpenFile "
And beschouwen, aangezien ik de code bekijk, het om de manier te krijgen die ik, heb willen om de de toepassingsweg en naam met of zonder een venster of een/>2 vragen console.

a. krijgen. Is dit de code Aflarin waarover in zijn nummer 3 commentaar spreekt?  Ja of NO
b. En waar ik kon NativeAPI.pas vinden?
" codeBody "
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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
library x;

gebruik
  Vensters,
  sysUtils,
  NativeAPI; //I kan niet dit vinden

type
 OldCode = pakte verslag in
  : dword;
  twee: woord;
 eind;


far_jmp = pakte verslag in
  PuhsOp: byte;
  PushArg: wijzer;
  RetOp: byte;
 eind;

var
 JmpZwq: far_jmp;
 OldZwq: OldCode;
 PtrZwq: wijzer;

functie ZwOpenFile (UIT FileHandle: PHANDLE;
    const DesiredAccess: ACCESS_MASK;
    const ObjectAttributes: PObjectAttributes;
    UIT IoStatusBlock: PIO_STATUS_BLOCK;
    const ShareAccess,
          OpenOptions: ULONG): NTStatus;
    stdcall; externe „ntdll.dll“;

functie TrueZwOpenFile (UIT FileHandle: PHANDLE;
    const DesiredAccess: ACCESS_MASK;
    const ObjectAttributes: PObjectAttributes;
    UIT IoStatusBlock: PIO_STATUS_BLOCK;
    const ShareAccess,
          OpenOptions: ULONG): NTStatus;
    stdcall;

var
 Geschreven: dword;
 begin
  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq,
                     @OldZwq, SizeOf (Geschreven OldCode),);

  Resultaat: = ZwOpenFile (FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions);

  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq,
                     @JmpZwq, SizeOf (far_jmp), Geschreven);
eind;


functie NewZwOpenFile (UIT FileHandle: PHANDLE;
    const DesiredAccess: ACCESS_MASK;
    const ObjectAttributes: PObjectAttributes;
    UIT IoStatusBlock: PIO_STATUS_BLOCK;
    const ShareAccess,
          OpenOptions: ULONG): NTStatus;
    stdcall;
var
    s: koord;
begin
 s: Het =WideCharToString (ObjectAttributes^.ObjectName^.Buffer);


 als uppercase='\?? \ C:\XSB.TXT ' toen
 begin
  resultaat: =STATUS_ACCESS_DENIED;
  uitgang;
 eind


 anders
 resultaat: =TrueZwOpenFile (FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions);
eind;

Procedure SetHook ();
var
 Bytes: dword;
begin
  PtrZwq: = GetProcAddress (GetModuleHandle („ntdll.dll“), „ZwOpenFile“);
  ReadProcessMemory (INVALID_HANDLE_VALUE, PtrZwq, @OldZwq, SizeOf (OldCode), Bytes);
  JmpZwq.PuhsOp: = $68;
  JmpZwq.PushArg: = @NewZwOpenFile;
  JmpZwq.RetOp: = C3;
  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq, @JmpZwq, SizeOf (far_jmp), Bytes);
eind;

De procedure haakt los ();
var
 Bytes: dword;
begin
  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq, @OldZwq, SizeOf (OldCode), Bytes);
eind;

//??????
Functie MessageProc (code: geheel; wParam: woord;
                    lParam: longint): longint; stdcall;
begin
 CallNextHookEx (0, Code, wParam, lparam);
 Resultaat: = 0;
eind;

Procedure SetGlobalHookProc ();
begin
 SetWindowsHookEx (WH_GETMESSAGE, @MessageProc, HInstance, 0);
 (ONEINDIGE) slaap;
eind;
//

Procedure SetGlobalHook ();
var
 hMutex: dword;
 TrId: dword;
begin
 hMutex: = CreateMutex (nul, vals, „ScanerHook“);
 als GetLastError = 0 toen
 CreateThread (nul, 0, @SetGlobalHookProc, nul, 0, TrId) anders
 CloseHandle (hMutex);
eind;

procedure DLLEntryPoint (dwReason: DWord);
begin
  geval dwReason van
    DLL_PROCESS_ATTACH: begin
                          SetGlobalHook ();
                          SetHook ();
                        eind;
    DLL_PROCESS_DETACH: begin
                          Haak los ();
                        eind;
  eind;
eind;


begin
 DllProc: = @DLLEntryPoint;
 DLLEntryPoint (DLL_PROCESS_ATTACH);
eind.

Antwoord : Weg 2 van het Proces van de toepassing

>> dit de code Aflarin is waarover in zijn nummer 3 commentaar spreekt? Dat bent u behoefte om Aflarin te zeggen?

Ik ben bang het antwoord ik werkelijk sprak over het vasthaken ZwOpenFile geen is, maar het moet binnen de bestuurder van de pitwijze zijn. Uw bibliotheek x werkt op gebruikerswijze. Zo, kan het de gebruiker-wijze volmacht van ZwOpenFile slechts vasthaken. Het betekent uw code de vraag zal onderscheppen ZwOpenFile slechts als zij uit gebruiker-wijze app/dll komen.
Ik veronderstel wanneer app CreateProcess roept (of iets in die aard), gaat het naar NtCreateProcess in pitwijze en dan wordt ZwOpenFile geroepen door NtCreateProcess van de pitwijze. Zo zal deze vraag door uw haak overgaan.

Ik stel u voor om overeenkomstig artikel van mijn post (en de code van het artikel onderzoeken) te lezen. Bijvoorbeeld, kunt u vinden dat er sommige redenen zijn om NtCreateSection in plaats van ZwOpenFile vast te haken:)


Andere oplossingen  
 
programming4us programming4us