delphi DLL注入完整源码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DLL注入完整源码
1.interface
2.
es
4.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
5.StdCtrls, tlhelp32;
6.{type
7.TProcessEntry32 = record
8.dwSize: DWORD; //大小
tUsage: DWORD;
10.th32ProcessID: DWORD; //线程的pid
11.th32DefaultHeapID: DWORD;
12.th32ModuleID: DWORD;
tThreads: DWORD; //线程数
14.th32ParentProcessID: DWORD; //父线程
15.pcPriClassBase: integer;
16.dwFlags: DWORD;
17.szExeFile: array[0..MAX_PATH - 1] of char; //进程名称
18.end; } ///说明某个进程TProcessEntry32 结构
19.type
20.TtoDllFrm = class(TForm)
21.Button1: TButton;
22.procedure Button1Click(Sender: TObject);
23.private
24.{ Private declarations }
25.public
26.{ Public declarations }
27.end;
28.
29.var
30.toDllFrm: TtoDllFrm;
31.
32.implementation
33.
34.{$R *.DFM}
35.
36.procedure FindAProcess (const AFilename: string; const PathMatch: Boolean; var
ProcessID: DWORD); //自定义一个查找a进程的过程,获得pid
37.var
38.lppe: TProcessEntry32; // 该进程的结构
39.SsHandle: Thandle; // 该进程的句柄
40.FoundAProc, FoundOK: boolean; //是否找到
41.begin
42.ProcessID :=0; //初始pid数值
43.SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);
44.//创建进程快照即进程的瞬时列表表单TH32CS_SnapProcess,0 表示进程列
表
45.//返回进程列表的句柄
46.lppe.dwSize := SizeOf(TProcessEntry32);
47.//在调用Process32First API之前,需要初始化lppe记录的大小,
48.郁闷测试几个小时,没有初始白忙活近一天,始终找不到错误
49.FoundAProc := Process32First(Sshandle, lppe);
50.//将进程列表的第一个进程信息读入ppe记录中,并判断是否读入成功.
51.
52.while FoundAProc do //读入成功,进行下面处理
53.begin
54.if PathMatch then
55.FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename)) = 0
56.// AnsiStricomp 返回2字符串类型的比较结果相同时返回0
57.else
58.FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile)),
PChar(ExtractFilename(AFilename))) = 0;
59.//比较获得的参数和返回的ExtractFilename(lppe.szExefile) 值看是否为0.
60.if FoundOK then
61.begin
62.ProcessID := lppe.th32ProcessID;
63.break; //找到后,退出循环
64.end;
65.FoundAProc := Process32Next(SsHandle, lppe);
66.///否则继续找直到找到
67.end;
68.CloseHandle(SsHandle); // 释放句柄
69.end;
70./
71.function EnabledDebugPrivilege(const bEnabled: Boolean): Boolean;
72.//关于提高线程访问权限的提权并不是什么进程都可以访问
73.//访问不了那是权限不够就提权吧
74.//这一部分我也没有弄懂,注释以后在++
75.var
76.hToken: THandle;
77.tp: TOKEN_PRIVILEGES;
78.a: DWORD;
79.const
80.SE_DEBUG_NAME = 'SeDebugPrivilege'; //最高权限
81.begin
82.Result := False;
83.if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
hToken))
84.//第一参数是要修改访问权限的进程句柄
85.//第二个参数指定你要进行的操作类型,要修改令牌我们要指定第二个参数为
TOKEN_ADJUST_PRIVILEGES