看流星社区

 找回密码
 注册账号
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
查看: 260|回复: 1

C++ APC注入源码

[复制链接]
发表于 2019-7-29 16:52:21 | 显示全部楼层 |阅读模式


  1. #include "stdafx.h"

  2. #define _WIN32_WINNT 0x0400

  3. #include <windows.h>

  4. #include <TlHelp32.h>

  5. #include <iostream>

  6. #include <string>

  7. using namespace std;


  8. #define DEF_BUF_SIZE 1024


  9. // 用于存储注入模块DLL的路径全名

  10. char szDllPath[DEF_BUF_SIZE] = {0} ;


  11. // 使用APC机制向指定ID的进程注入模块

  12. BOOL InjectModuleToProcessById ( DWORD dwProcessId )

  13. {

  14. DWORDdwRet = 0 ;

  15. BOOLbStatus = FALSE ;

  16. LPVOIDlpData = NULL ;

  17. UINTuLen = strlen(szDllPath) + 1;

  18. // 打开目标进程

  19. HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, dwProcessId ) ;

  20. if ( hProcess )

  21. {

  22. // 分配空间

  23. lpData = VirtualAllocEx ( hProcess, NULL, uLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE ) ;

  24. if ( lpData )

  25. {

  26. // 写入需要注入的模块路径全名

  27. bStatus = WriteProcessMemory ( hProcess, lpData, szDllPath, uLen, &dwRet ) ;

  28. }

  29. CloseHandle ( hProcess ) ;

  30. }


  31. if ( bStatus == FALSE )

  32. return FALSE ;


  33. // 创建线程快照

  34. THREADENTRY32 te32 = { sizeof(THREADENTRY32) } ;

  35. HANDLE hThreadSnap = CreateToolhelp32Snapshot ( TH32CS_SNAPTHREAD, 0 ) ;

  36. if ( hThreadSnap == INVALID_HANDLE_VALUE )

  37. return FALSE ;


  38. bStatus = FALSE ;

  39. // 枚举所有线程

  40. if ( Thread32First ( hThreadSnap, &te32 ) )

  41. {

  42. do{

  43. // 判断是否目标进程中的线程

  44. if ( te32.th32OwnerProcessID == dwProcessId )

  45. {

  46. // 打开线程

  47. HANDLE hThread = OpenThread ( THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID ) ;

  48. if ( hThread )

  49. {

  50. // 向指定线程添加APC

  51. DWORD dwRet = QueueUserAPC ( (PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)lpData ) ;

  52. if ( dwRet > 0 )

  53. bStatus = TRUE ;

  54. CloseHandle ( hThread ) ;

  55. }

  56. }


  57. }while ( Thread32Next ( hThreadSnap, &te32 ) ) ;

  58. }


  59. CloseHandle ( hThreadSnap ) ;

  60. return bStatus;

  61. }


  62. int _tmain(int argc, _TCHAR* argv[])

  63. {

  64. // 取得当前工作目录路径

  65. GetCurrentDirectoryA ( DEF_BUF_SIZE, szDllPath ) ;


  66. // 生成注入模块DLL的路径全名

  67. strcat_s ( szDllPath, "\\fddll" ) ;


  68. DWORD dwProcessId = 0 ;

  69. // 接收用户输入的目标进程ID

  70. while ( cout << "请输入目标进程ID:" && cin >> dwProcessId && dwProcessId > 0 )

  71. {

  72. BOOL bRet = InjectModuleToProcessById ( dwProcessId ) ;

  73. cout << (bRet ? "注入成功!":"注入失败!") << endl ;

  74. }

  75. return 0;

  76. }
复制代码

发表于 2019-8-8 19:41:34 | 显示全部楼层
过来转转,我只是路过打酱油的。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2019-11-19 07:32

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表