Frage : Anwendungsprozess-Weg 2

Dieses war Aflarins Anmerkung Anwendungsprozess-Weg 1
http://www.experts-exchang e.com/Prog ramming/Languages/Pascal/Delphi/Q_26413438.html#33496630


I haben Forschung ein Code, „ZwOpenFile " zum
And zu betrachten, wie ich den Code betrachte, es scheint, die Weise zu erhalten, die ich möchte, den Anwendungsweg und -namen mit oder ohne Fragen eines Fensters oder ein console.

2 nur an answer.
a. gelangen. Ist dieses über der Code, den Aflarin in seiner Anmerkung der Nr. 3 spricht?  Ja oder NO
b. Und wo könnte ich NativeAPI.pas finden?
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:
6:
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;

Gebrauch
  Windows,
  sysUtils,
  NativeAPI; //I kann dieses nicht finden

Art
 OldCode = verpackte Aufzeichnung
  Ein: dword;
  zwei: Wort;
 Ende;


far_jmp = verpackte Aufzeichnung
  PuhsOp: Byte;
  PushArg: Zeiger;
  RetOp: Byte;
 Ende;

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

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

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

var
 Geschrieben: dword;
 anfangen
  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq,
                     @OldZwq, SizeOf (OldCode), geschrieben);

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

  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq,
                     @JmpZwq, SizeOf (far_jmp), geschrieben);
Ende;


Funktion NewZwOpenFile (HERAUS FileHandle: PHANDLE;
    const DesiredAccess: ACCESS_MASK;
    const ObjectAttributes: PObjectAttributes;
    HERAUS IoStatusBlock: PIO_STATUS_BLOCK;
    const ShareAccess,
          OpenOptions: ULONG): NTStatus;
    stdcall;
var
    s: Schnur;
anfangen
 s: =WideCharToString (ObjectAttributes^.ObjectName^.Buffer);


 wenn uppercase='\?? \ C:\XSB.TXT ' dann
 anfangen
  Resultat: =STATUS_ACCESS_DENIED;
  Ausgang;
 Ende


 sonst
 Resultat: =TrueZwOpenFile (FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions);
Ende;

Verfahren SetHook ();
var
 Bytes: dword;
anfangen
  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);
Ende;

Verfahren haken los ();
var
 Bytes: dword;
anfangen
  WriteProcessMemory (INVALID_HANDLE_VALUE, PtrZwq, @OldZwq, SizeOf (OldCode), Bytes);
Ende;

//??????
Funktion MessageProc (Code: ganze Zahl; wParam: Wort;
                    lParam: longint): longint; stdcall;
anfangen
 CallNextHookEx (0, Code, wParam, lparam);
 Resultat: = 0;
Ende;

Verfahren SetGlobalHookProc ();
anfangen
 SetWindowsHookEx (WH_GETMESSAGE, @MessageProc, HInstance, 0);
 Schlaf (ENDLOS);
Ende;
//

Verfahren SetGlobalHook ();
var
 hMutex: dword;
 TrId: dword;
anfangen
 hMutex: = CreateMutex (Null, falsches, „ScanerHook ");
 wenn GetLastError = 0 dann
 CreateThread (Null, 0, @SetGlobalHookProc, Null, 0, TrId) sonst
 CloseHandle (hMutex);
Ende;

Verfahren DLLEntryPoint (dwReason: DWord);
anfangen
  dwReason von umkleiden
    DLL_PROCESS_ATTACH: anfangen
                          SetGlobalHook ();
                          SetHook ();
                        Ende;
    DLL_PROCESS_DETACH: anfangen
                          Loshaken ();
                        Ende;
  Ende;
Ende;


anfangen
 DllProc: = @DLLEntryPoint;
 DLLEntryPoint (DLL_PROCESS_ATTACH);
Ende.

Antwort : Anwendungsprozess-Weg 2

>> ist dieses über der Code, den Aflarin in seiner Anmerkung der Nr. 3 spricht? Ist das Sie wünschen, Aflarin zu sagen?

Ich habe Angst, dass die Antwort Nr. ist. Ich sprach wirklich über das Anspannen von ZwOpenFile, aber es muss innerhalb des Kernmodusfahrers sein. Ihre Bibliothek x arbeitet im Benutzermodus. So kann sie die Benutzermodus Vollmacht von ZwOpenFile nur anspannen. Es bedeutet, dass Ihr Code die ZwOpenFile Anrufe abfängt, nur wenn sie von Benutzermodus APP/DLL kommen.
Ich schätze, wann APP CreateProcess benennt (oder etwas Ähnliches), es einsteige zu NtCreateProcess in Kernmodus und dann benannt ZwOpenFile von NtCreateProcess vom Kernmodus. So überschreitet dieser Anruf durch Ihren Haken.

Ich vorschlage Sie ge, um entsprechenden Artikel von meinem Pfosten zu lesen (und den Code des Artikels überprüfen). Z.B. können Sie finden, dass es etwas Gründe gibt, NtCreateSection anstelle von ZwOpenFile anzuspannen:)


Weitere Lösungen  
 
programming4us programming4us