龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 1956|回复: 0

APC注入C++源码

[复制链接]

15

主题

7

回帖

27

积分

编程入门

Rank: 1

龙马币
48
百鬼夜行天 | 显示全部楼层 |阅读模式
  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. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表