下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DLL注入完整源码1. interface2.3. uses4. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,5.StdCtrls, tlhelp32;6. type7.TProcessEntry32 = record8.dwSize: DWORD; / 大小9.cntUsage: DWORD;10.th32ProcessID: DWORD; /线程的 pid11.th32DefaultHeapID: DWORD;12.th32ModuleID: DWORD;13.cntThreads: DWO
2、RD; /线程数14.th32ParentProcessID: DWORD; /父线程15.pcPriClassBase: integer;16.dwFlags: DWORD;17.szExeFile: array0.MAX_PATH - 1 of char; / 进程名称18.end; /说明某个 进程 TProcessEntry32 结构19. type20.TtoDllFrm = class(TForm)21.Button1: TButton;22.procedure Button1Click(Sender: TObject);23.private24. Private declarat
3、ions 25.public26. Public declarations 27.end;29. var30. toDllFrm: TtoDllFrm;31.32. implementation33.34. $R *.DFM35.36. procedure FindAProcess (const AFilename: string; const PathMatch: Boolean; var ProcessID: DWORD); /自定义一个查找 a 进程的过程 ,获得 pid37. var38. lppe: TProcessEntry32; / 该进程的结构39. SsHandle: Tha
4、ndle; / 该进程的句柄40. FoundAProc, FoundOK: boolean; / 是否找到41. begin42. ProcessID :=0; /初始 pid 数值43. SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);44. /创建进程快照 即进程的瞬时列表表单 TH32CS_SnapProcess,0 表示进程列 表45. /返回 进程列表的句柄46. lppe.dwSize := SizeOf(TProcessEntry32);47. /在调用Process32First API之前,需要初始化I
5、ppe记录的大小,48. 郁闷测试几个小时 ,没有初始白忙活 近一天 ,始终找不到错误49. FoundAProc := Process32First(SshandIe, Ippe);50. /将进程列表的第一个进程信息读入ppe记录中,并判断是否读入成功.51.51. whiIe FoundAProc do /读入成功 ,进行下面处理52. begin53. if PathMatch then54. FoundOK := AnsiStricomp(Ippe.szExefiIe, PChar(AFiIename) = 0相同时返回 055. / AnsiStricomp 返回 2 字符串类型的
6、比较结果57.eIse58.FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile),PChar(ExtractFilename(AFilename) = 0;59. /比较获得的参数和返回的 ExtractFilename(lppe.szExefile) 值 看是否为 0.60. if FoundOK then61. begin62. ProcessID := lppe.th32ProcessID;63. break; /找到后 ,退出循环64. end;65. FoundAProc := Process32Next(SsHa
7、ndle, lppe);66. /否则 继续找 直到找到67. end;68. CloseHandle(SsHandle); / 释放句柄69. end;70. /71. function EnabledDebugPrivilege(const bEnabled: Boolean): Boolean;72. /关于提高线程访问权限的提权 并不是什么进程都可以访问73. /访问不了 那是权限不够 就提权吧74. /这一部分 我也没有弄懂 ,注释以后在 +75. var76. hToken: THandle;77. tp: TOKEN_PRIVILEGES;78. a: DWORD;79. con
8、st80. SE_DEBUG_NAME = SeDebugPrivilege; / 最高权限81. begin82. Result := False;83. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,hToken)84. /第一参数是要修改访问权限的进程句柄85. /第二个参数指定你要进行的操作类型 ,要修改令牌我们要指定第二个参数为 TOKEN_ADJUST_PRIVILEGES86. /第三个参数就是返回的访问令牌指针87.88.89. then90. begin91. tp.PrivilegeCou
9、nt := 1;92. LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges0.Luid);93. /返回特权名 LUID /修改进程的权限,在此处为修改本进程成为具有退出系统的权限94. /第一个参数是系统的名称,如果是本地系统只要指明为NULL 就可以了,95. /第三个参数就是返回 LUID 的指针,第二个参数就是指明了权限的名称,96. if bEnabled then97. tp.Privileges0.Attributes := SE_PRIVILEGE_ENABLED98. else99. tp.Privileges0.At
10、tributes := 0;100. a := 0;101. AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, a);102. /第一个参数是访问令牌的句柄;103. /第二个参数决定是进行权限修改还是除能(Disable)所有权限104. /第三个参数指明要修改的权限105. /第四个参数是结构 PreviousState的长度,如果PreviousState为空,该参数应为 NULL1 06. /第五参数也是一个指向 TOKEN_PRIVILEGES 结构的指针,存放修改前的访问 权限的信息,可空107.108. Resul
11、t := GetLastError = ERROR_SUCCESS;109. CloseHandle(hToken);110. end;111. end;112.114. function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD =0): DWORD; / 自定义注入函数 115. var116.hRemoteProcess: THandle; /远程线程句秉117.dwRemoteProcessId: DWORD; /远程线程 pid118.cb: DWORD;119.pszLibFileRemo
12、te: Pointer; /一个指针 指向远程 dll 的地址120.iReturnCode: Boolean; /返回值作判断用121.TempVar: DWORD;122.pfnStartAddr: TFNThreadStartRoutine; /lib 函数地址123.pszLibAFilename: PwideChar; /一个指向文件名124. begin125.Result := 0;126.EnabledDebugPrivilege(True); /提权127.Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);128./申请内存
13、 内存的大小由 Length(GuestFile) * 2 + 1 决定129.StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 +1);130.if PID 0 then131.dwRemoteProcessID := PID132.else133.FindAProcess(HostFile, False, dwRemoteProcessID);134.hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD +允 许远程创建线程 135.PROCESS_VM_O
14、PERATION + 允许远程 VM 操作 136.PROCESS_VM_WRITE, 允许远程 VM 写137.FALSE, dwRemoteProcessId);138.cb := (1 + lstrlenW(pszLibAFilename) * sizeof(WCHAR);139.pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb,MEM_COMMIT, PAGE_READWRITE);140. /申请内存 ,并指向内寸地址 并付值141. TempVar := 0;142. iReturnCode
15、 := WriteProcessMemory(hRemoteProcess, pszLibFileRemote,pszLibAFilename, cb, TempVar);143. /写入成功 ,将返回一个不为 0-de 值144. if iReturnCode then145. begin146. pfnStartAddr := GetProcAddress(GetModuleHandle(Kernel32), LoadLibraryW);147. /GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址148. /GetModuleHandle 函数可以返回此句柄149. TempVar := 0;150. Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);151. /新生成的线程分配的线程 Id 即 TempVar152. end;153. Freemem(pszLibA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新能源氢能基础设施安全运维
- 2026年度全周期风险投资合同
- 2026年APP开发销售合同书
- 钢结构验收评估方案
- 中药执业药师资格考试复习资料试题及答案
- 植物纤维模塑环保餐具项目运营管理方案
- 深静脉血栓相关模拟考试试题及答案
- 小学二年级下册科学动植物认知教学设计
- 成教药学入学考试试题及答案
- 2026年广东省普宁市高一数学下册期末考试模拟卷附答案(典型题)
- 煤矿安全生产标准化管理体系2024版与2026版对比分析报告
- 2025-2026学年第二学期统编版四年级语文期末学业水平检测卷
- 骨科关节置换手术诊疗指南及操作规范(2025版)
- 【Y小区燃气管网的庭院管网的水力计算案例3100字】
- 2026中期展望·宏观篇:上半场的预期差下半场的破局点
- 2025-2026学年人教版地理七年级下册期末考点热点以及答题模板总结
- 2026年辽宁现代服务职业技术学院单招职业技能测试题库及答案详解1套
- 2026年版初中历史八年级下册复习提纲(表格型)
- 二级公共营养师《专业技能》试卷真题及解析(2026年)
- 中级统计师《统计基础理论及相关知识》真题及解析(2026年)
- 焊工考试题库及焊工证模拟考试(及答案)
评论
0/150
提交评论