delphi DLL注入完整源码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档