




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. cntThread
2、s: DWORD; /线程数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. Priv
3、ate declarations 25. public26. Public declarations 27. end;28.129. var30. toDllFrm: TtoDllFrm;31.32. implementation33.34. $R *.DFM35.36. procedure FindAProcess (const AFilename: string; const PathMatch: Boolean; varProcessID: DWORD); /自定义一个查找 a 进程的过程 ,获得 pid37. var38. lppe: TProcessEntry32; / 该进程的结构
4、39. SsHandle: Thandle; / 该进程的句柄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. /在调用 Process32Fir
5、st API之前,需要初始化 lppe 记录的大小 ,48. 郁闷测试几个小时 ,没有初始白忙活 近一天 ,始终找不到错误49. FoundAProc := Process32First(Sshandle, lppe);50. /将进程列表的第一个进程信息读入 ppe 记录中 ,并判断是否读入成功 .51.52. while FoundAProc do /读入成功 ,进行下面处理53. begin54. if PathMatch then55.FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename) = 056. / AnsiStrico
6、mp 返回 2 字符串类型的比较结果相同时返回 057. else258.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 :
7、= Process32Next(SsHandle, 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
8、. a: DWORD;79. const80.SE_DEBUG_NAME = SeDebugPrivilege;/ 最高权限81. begin82. Result := False;83. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,hToken)84. /第一参数是要修改访问权限的进程句柄85. /第二个参数指定你要进行的操作类型 ,要修改令牌我们要指定第二个参数为TOKEN_ADJUST_PRIVILEGES386. /第三个参数就是返回的访问令牌指针87.88.89. then90. begin91.
9、 tp.PrivilegeCount := 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.P
10、rivileges0.Attributes := 0;100. a := 0;101. AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, a);102. /第一个参数是访问令牌的句柄;103. /第二个参数决定是进行权限修改还是除能( Disable)所有权限104. /第三个参数指明要修改的权限105. /第四个参数是结构 PreviousState的长度,如果 PreviousState为空,该参数应为NULL106. /第五参数也是一个指向 TOKEN_PRIVILEGES 结构的指针,存放修改前的访问权限的信息,可空10
11、7.108. Result := GetLastError = ERROR_SUCCESS;109. CloseHandle(hToken);110. end;111. end;112.113.4114. function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD =0): DWORD;/ 自定义注入函数115. var116. hRemoteProcess: THandle; /远程线程句秉117. dwRemoteProcessId: DWORD; /远程线程 pid118. cb: DWORD;
12、119. pszLibFileRemote: 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(Gue
13、stFile) * 2 + 1);128. /申请内存 内存的大小由 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_T
14、HREAD +允许远程创建线程 135.PROCESS_VM_OPERATION + 允许远程 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. /申请内存 ,并指向内寸地址 并付
15、值5141. TempVar := 0;142. iReturnCode := 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(pszLibAFil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红星乡上半年工作总结
- 公司设备设施管理制度
- 公司资本运营管理制度
- 河南省信阳市九师联盟2024-2025学年高一下学期6月月考语文试题(含答案)
- 2025年春江苏开放大学生活中的经济学060057综合作业1、2答案
- 2025企业合同化管理规定
- 2025企业石油买卖合同(月度、年度)
- 广东省佛山市禅城区2025届高三统一调研测试(二)数学试卷
- 福建省三明市2023−2024学年高一下册期末质量检测数学试卷附解析
- 2025年中考语文(长沙用)课件:复习任务群9 诗歌(诗、词、曲)鉴赏
- 绿化养护劳务服务投标方案(技术标)
- UNESCO-数据和AI驱动的智慧教学设计指南-2023.10
- 外脚手架施工技术交底(完整版)
- 杯弓蛇影儿童绘本故事演讲ppt课件(图文)
- 舞蹈培训机构公司章程范本
- 风景园林遗产保护与管理智慧树知到课后章节答案2023年下华南理工大学
- 旋转式过滤器旋转式过滤机设备工艺原理
- 厂房恒温工程施工方案
- 外研版四年级英语下册(一年级起点)全册完整课件
- 流体力学-大连理工大学中国大学mooc课后章节答案期末考试题库2023年
- 2023年度湖南省自然科学奖项目公示材料
评论
0/150
提交评论