当前位置:   article > 正文

ce变速注入dll失败_[LAB]一种无痕Dll模块注入方式

ce显示dll注入失败

0x00 前言

  • 方式:CreateRemoteThread
  • 需要:visual studio 2015
  • 需要:进程模块查看器,如【PCHunter】【ProcessHacker】等。
  • 需要:创建一个用于实验注入的【MFC项目】窗体。
  • 需要:创建一个用于有痕注入的【Dll项目】模块。
  • 需要:创建一个用于无痕注入的【Dll项目】模块。

0x01 实验窗体

  • 在【VS2015】中,创建一个名为【MFC】的【MFC项目】,打开【MFC.rc】的【IDD_MFC_DIALOG】:

9ded20408df169d88b9134f6d617f3fb.png
  • 然后在【IDD_MFC_DIALOG】放入以下三个【Button】:

5378b4f62fe1543aff396dc729e063b1.png
  • 弹窗的ID设置为【IDOK】,无痕注入的ID设置为【IDC_BUTTON1】,有痕注入的ID设置为【IDC_BUTTON2】:

979d849b6bbeed9f7fb41ac2fbfc07e3.png
  • 在【MFCDlg.cpp】贴入以下代码:
  1. #include "stdafx.h"
  2. #include "MFC.h"
  3. #include "MFCDlg.h"
  4. #include "afxdialogex.h"
  5. #include <windows.h>
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. //1.获取进程句柄
  10. HANDLE GetThePidOfTargetProcess(HWND hwnd)
  11. {
  12. DWORD pid;
  13. GetWindowThreadProcessId(hwnd, &pid);
  14. HANDLE hProcee = ::OpenProcess(PROCESS_ALL_ACCESS | PROCESS_CREATE_THREAD, 0, pid);
  15. return hProcee;
  16. }
  17. //2.提升权限
  18. void Up()
  19. {
  20. HANDLE hToken;
  21. LUID luid;
  22. TOKEN_PRIVILEGES tp;
  23. OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
  24. LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
  25. tp.PrivilegeCount = 1;
  26. tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  27. tp.Privileges[0].Luid = luid;
  28. AdjustTokenPrivileges(hToken, 0, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
  29. }
  30. //3.进程注入
  31. BOOL DoInjection(char *DllPath, HANDLE hProcess)
  32. {
  33. DWORD BufSize = strlen(DllPath) + 1;
  34. LPVOID AllocAddr = VirtualAllocEx(hProcess, NULL, BufSize, MEM_COMMIT, PAGE_READWRITE);
  35. WriteProcessMemory(hProcess, AllocAddr, DllPath, BufSize, NULL);
  36. PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
  37. HANDLE hRemoteThread;
  38. hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, pfnStartAddr, AllocAddr, 0, NULL);
  39. if (hRemoteThread)
  40. {
  41. MessageBox(NULL, TEXT("注入成功"), TEXT("提示"), MB_OK);
  42. return true;
  43. }
  44. else
  45. {
  46. MessageBox(NULL, TEXT("注入失败"), TEXT("提示"), MB_OK);
  47. return false;
  48. }
  49. }
  50. class CAboutDlg : public CDialogEx
  51. {
  52. public:
  53. CAboutDlg();
  54. // 对话框数据
  55. #ifdef AFX_DESIGN_TIME
  56. enum {
  57. IDD = IDD_ABOUTBOX };
  58. #endif
  59. protected:
  60. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  61. // 实现
  62. protected:
  63. DECLARE_MESSAGE_MAP()
  64. };
  65. CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
  66. {
  67. }
  68. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  69. {
  70. CDialogEx::DoDataExchange(pDX);
  71. }
  72. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  73. END_MESSAGE_MAP()
  74. CMFCDlg::CMFCDlg(CWnd* pParent /*=NULL*/)
  75. : CDialogEx(IDD_MFC_DIALOG, pParent)
  76. {
  77. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  78. }
  79. void CMFCDlg::DoDataExchange(CDataExchange* pDX)
  80. {
  81. CDialogEx::DoDataExchange(pDX);
  82. }
  83. BEGIN_MESSAGE_MAP(CMFCDlg, CDialogEx)
  84. ON_WM_SYSCOMMAND()
  85. ON_WM_PAINT()
  86. ON_WM_QUERYDRAGICON()
  87. ON_BN_CLICKED(IDOK, &CMFCDlg::OnBnClickedOk)
  88. ON_BN_CLICKED(IDC_BUTTON1, &
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/51967
推荐阅读
相关标签
  

闽ICP备14008679号