郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香终身VIP管理员QQ150330575项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 252|回复: 0

32/64 遍历模块 c++ 代码

[复制链接]
发表于 2019-10-27 20:55:54 | 显示全部楼层 |阅读模式
  1. // ConsoleApplication6.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //

  3. #include "pch.h"
  4. #include <stdio.h>
  5. #include "windows.h"

  6. #define NT_SUCCESS(x) ((x) >= 0)
  7. #define ProcessBasicInformation 0

  8. typedef NTSTATUS(NTAPI *pfnNtWow64QueryInformationProcess64)(
  9.     IN HANDLE ProcessHandle,
  10.     IN ULONG ProcessInformationClass,
  11.     OUT PVOID ProcessInformation,
  12.     IN ULONG ProcessInformationLength,
  13.     OUT PULONG ReturnLength OPTIONAL
  14.     );


  15. typedef NTSTATUS(NTAPI *pfnNtWow64ReadVirtualMemory64)(
  16.     IN HANDLE ProcessHandle,
  17.     IN PVOID64 BaseAddress,
  18.     OUT PVOID Buffer,
  19.     IN ULONG64 Size,
  20.     OUT PULONG64 NumberOfBytesRead
  21.     );

  22. typedef
  23. NTSTATUS(WINAPI *pfnNtQueryInformationProcess)
  24. (HANDLE ProcessHandle, ULONG ProcessInformationClass,
  25.     PVOID ProcessInformation, UINT32 ProcessInformationLength,
  26.     UINT32* ReturnLength);

  27. typedef struct _PROCESS_BASIC_INFORMATION32 {
  28.     NTSTATUS ExitStatus;
  29.     UINT32 PebBaseAddress;
  30.     UINT32 AffinityMask;
  31.     UINT32 BasePriority;
  32.     UINT32 UniqueProcessId;
  33.     UINT32 InheritedFromUniqueProcessId;
  34. } PROCESS_BASIC_INFORMATION32;

  35. typedef struct _UNICODE_STRING32
  36. {
  37.     USHORT Length;
  38.     USHORT MaximumLength;
  39.     PWSTR Buffer;
  40. } UNICODE_STRING32, *PUNICODE_STRING32;

  41. typedef struct _PEB32
  42. {
  43.     UCHAR InheritedAddressSpace;
  44.     UCHAR ReadImageFileExecOptions;
  45.     UCHAR BeingDebugged;
  46.     UCHAR BitField;
  47.     ULONG Mutant;
  48.     ULONG ImageBaseAddress;
  49.     ULONG Ldr;
  50.     ULONG ProcessParameters;
  51.     ULONG SubSystemData;
  52.     ULONG ProcessHeap;
  53.     ULONG FastPebLock;
  54.     ULONG AtlThunkSListPtr;
  55.     ULONG IFEOKey;
  56.     ULONG CrossProcessFlags;
  57.     ULONG UserSharedInfoPtr;
  58.     ULONG SystemReserved;
  59.     ULONG AtlThunkSListPtr32;
  60.     ULONG ApiSetMap;
  61. } PEB32, *PPEB32;

  62. typedef struct _PEB_LDR_DATA32
  63. {
  64.     ULONG Length;
  65.     BOOLEAN Initialized;
  66.     ULONG SsHandle;
  67.     LIST_ENTRY32 InLoadOrderModuleList;
  68.     LIST_ENTRY32 InMemoryOrderModuleList;
  69.     LIST_ENTRY32 InInitializationOrderModuleList;
  70.     ULONG EntryInProgress;
  71. } PEB_LDR_DATA32, *PPEB_LDR_DATA32;

  72. typedef struct _LDR_DATA_TABLE_ENTRY32
  73. {
  74.     LIST_ENTRY32 InLoadOrderLinks;
  75.     LIST_ENTRY32 InMemoryOrderModuleList;
  76.     LIST_ENTRY32 InInitializationOrderModuleList;
  77.     ULONG DllBase;
  78.     ULONG EntryPoint;
  79.     ULONG SizeOfImage;
  80.     UNICODE_STRING32 FullDllName;
  81.     UNICODE_STRING32 BaseDllName;
  82.     ULONG Flags;
  83.     USHORT LoadCount;
  84.     USHORT TlsIndex;
  85.     union
  86.     {
  87.         LIST_ENTRY32 HashLinks;
  88.         ULONG SectionPointer;
  89.     };
  90.     ULONG CheckSum;
  91.     union
  92.     {
  93.         ULONG TimeDateStamp;
  94.         ULONG LoadedImports;
  95.     };
  96.     ULONG EntryPointActivationContext;
  97.     ULONG PatchInformation;
  98. } LDR_DATA_TABLE_ENTRY32, *PLDR_DATA_TABLE_ENTRY32;

  99. typedef struct _PROCESS_BASIC_INFORMATION64 {
  100.     NTSTATUS ExitStatus;
  101.     UINT32 Reserved0;
  102.     UINT64 PebBaseAddress;
  103.     UINT64 AffinityMask;
  104.     UINT32 BasePriority;
  105.     UINT32 Reserved1;
  106.     UINT64 UniqueProcessId;
  107.     UINT64 InheritedFromUniqueProcessId;
  108. } PROCESS_BASIC_INFORMATION64;
  109. typedef struct _PEB64
  110. {
  111.     UCHAR InheritedAddressSpace;
  112.     UCHAR ReadImageFileExecOptions;
  113.     UCHAR BeingDebugged;
  114.     UCHAR BitField;
  115.     ULONG64 Mutant;
  116.     ULONG64 ImageBaseAddress;
  117.     ULONG64 Ldr;
  118.     ULONG64 ProcessParameters;
  119.     ULONG64 SubSystemData;
  120.     ULONG64 ProcessHeap;
  121.     ULONG64 FastPebLock;
  122.     ULONG64 AtlThunkSListPtr;
  123.     ULONG64 IFEOKey;
  124.     ULONG64 CrossProcessFlags;
  125.     ULONG64 UserSharedInfoPtr;
  126.     ULONG SystemReserved;
  127.     ULONG AtlThunkSListPtr32;
  128.     ULONG64 ApiSetMap;
  129. } PEB64, *PPEB64;

  130. typedef struct _PEB_LDR_DATA64
  131. {
  132.     ULONG Length;
  133.     BOOLEAN Initialized;
  134.     ULONG64 SsHandle;
  135.     LIST_ENTRY64 InLoadOrderModuleList;
  136.     LIST_ENTRY64 InMemoryOrderModuleList;
  137.     LIST_ENTRY64 InInitializationOrderModuleList;
  138.     ULONG64 EntryInProgress;
  139. } PEB_LDR_DATA64, *PPEB_LDR_DATA64;

  140. typedef struct _UNICODE_STRING64
  141. {
  142.     USHORT Length;
  143.     USHORT MaximumLength;
  144.     ULONG64 Buffer;
  145. } UNICODE_STRING64, *PUNICODE_STRING64;

  146. typedef struct _LDR_DATA_TABLE_ENTRY64
  147. {
  148.     LIST_ENTRY64 InLoadOrderLinks;
  149.     LIST_ENTRY64 InMemoryOrderModuleList;
  150.     LIST_ENTRY64 InInitializationOrderModuleList;
  151.     ULONG64 DllBase;
  152.     ULONG64 EntryPoint;
  153.     ULONG SizeOfImage;
  154.     UNICODE_STRING64 FullDllName;
  155.     UNICODE_STRING64 BaseDllName;
  156.     ULONG Flags;
  157.     USHORT LoadCount;
  158.     USHORT TlsIndex;
  159.     union
  160.     {
  161.         LIST_ENTRY64 HashLinks;
  162.         ULONG64 SectionPointer;
  163.     };
  164.     ULONG CheckSum;
  165.     union
  166.     {
  167.         ULONG TimeDateStamp;
  168.         ULONG64 LoadedImports;
  169.     };
  170.     ULONG64 EntryPointActivationContext;
  171.     ULONG64 PatchInformation;
  172. } LDR_DATA_TABLE_ENTRY64, *PLDR_DATA_TABLE_ENTRY64;

  173. int main()
  174. {
  175.     DWORD dwPid = 4480;
  176.     HANDLE m_ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
  177.     BOOL bTarget = FALSE;
  178.     BOOL bSource = FALSE;

  179.     IsWow64Process(GetCurrentProcess(), &bSource);
  180.     IsWow64Process(m_ProcessHandle, &bTarget);

  181.     SYSTEM_INFO si;
  182.     GetSystemInfo(&si);

  183.     if (bTarget == FALSE && bSource == TRUE)
  184.     {
  185.         HMODULE NtdllModule = GetModuleHandle(L"ntdll.dll");
  186.         pfnNtWow64QueryInformationProcess64 NtWow64QueryInformationProcess64 = (pfnNtWow64QueryInformationProcess64)GetProcAddress(NtdllModule, "NtWow64QueryInformationProcess64");
  187.         pfnNtWow64ReadVirtualMemory64 NtWow64ReadVirtualMemory64 = (pfnNtWow64ReadVirtualMemory64)GetProcAddress(NtdllModule, "NtWow64ReadVirtualMemory64");
  188.         PROCESS_BASIC_INFORMATION64 pbi64 = { 0 };
  189.         if (NT_SUCCESS(NtWow64QueryInformationProcess64(m_ProcessHandle, ProcessBasicInformation, &pbi64, sizeof(pbi64), NULL)))
  190.         {
  191.             DWORD64 Ldr64 = 0;
  192.             LIST_ENTRY64 ListEntry64 = { 0 };
  193.             LDR_DATA_TABLE_ENTRY64 LDTE64 = { 0 };
  194.             wchar_t ProPath64[256];
  195.             if (NT_SUCCESS(NtWow64ReadVirtualMemory64(m_ProcessHandle, (PVOID64)(pbi64.PebBaseAddress + offsetof(PEB64, Ldr)), &Ldr64, sizeof(Ldr64), NULL)))
  196.             {
  197.                 if (NT_SUCCESS(NtWow64ReadVirtualMemory64(m_ProcessHandle, (PVOID64)(Ldr64 + offsetof(PEB_LDR_DATA64, InLoadOrderModuleList)), &ListEntry64, sizeof(LIST_ENTRY64), NULL)))
  198.                 {
  199.                     if (NT_SUCCESS(NtWow64ReadVirtualMemory64(m_ProcessHandle, (PVOID64)(ListEntry64.Flink), &LDTE64, sizeof(_LDR_DATA_TABLE_ENTRY64), NULL)))
  200.                     {
  201.                         while (1)
  202.                         {
  203.                             if (LDTE64.InLoadOrderLinks.Flink == ListEntry64.Flink) break;
  204.                             if (NT_SUCCESS(NtWow64ReadVirtualMemory64(m_ProcessHandle, (PVOID64)LDTE64.FullDllName.Buffer, ProPath64, sizeof(ProPath64), NULL)))
  205.                             {
  206.                                 printf("模块基址:0x%llX\n模块大小:0x%X\n模块路径:%ls\n", LDTE64.DllBase, LDTE64.SizeOfImage, ProPath64);
  207.                             }
  208.                             if (!NT_SUCCESS(NtWow64ReadVirtualMemory64(m_ProcessHandle, (PVOID64)LDTE64.InLoadOrderLinks.Flink, &LDTE64, sizeof(_LDR_DATA_TABLE_ENTRY64), NULL))) break;
  209.                         }
  210.                     }
  211.                 }
  212.             }
  213.         }

  214.     }
  215.     else if (bTarget == TRUE && bSource == TRUE || si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_AMD64 ||
  216.         si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64)
  217.     {
  218.         HMODULE NtdllModule = GetModuleHandle(L"ntdll.dll");
  219.         pfnNtQueryInformationProcess NtQueryInformationProcess = (pfnNtQueryInformationProcess)GetProcAddress(NtdllModule, "NtQueryInformationProcess");
  220.         PROCESS_BASIC_INFORMATION32 pbi32 = { 0 };
  221.         if (NT_SUCCESS(NtQueryInformationProcess(m_ProcessHandle, ProcessBasicInformation, &pbi32, sizeof(pbi32), NULL)))
  222.         {
  223.             DWORD Ldr32 = 0;
  224.             LIST_ENTRY32 ListEntry32 = { 0 };
  225.             LDR_DATA_TABLE_ENTRY32 LDTE32 = { 0 };
  226.             wchar_t ProPath32[256];
  227.             if (ReadProcessMemory(m_ProcessHandle, (PVOID)(pbi32.PebBaseAddress + offsetof(PEB32, Ldr)), &Ldr32, sizeof(Ldr32), NULL))
  228.             {
  229.                 if (ReadProcessMemory(m_ProcessHandle, (PVOID)(Ldr32 + offsetof(PEB_LDR_DATA32, InLoadOrderModuleList)), &ListEntry32, sizeof(LIST_ENTRY32), NULL))
  230.                 {
  231.                     if (ReadProcessMemory(m_ProcessHandle, (PVOID)(ListEntry32.Flink), &LDTE32, sizeof(_LDR_DATA_TABLE_ENTRY32), NULL))
  232.                     {
  233.                         while (1)
  234.                         {
  235.                             if (LDTE32.InLoadOrderLinks.Flink == ListEntry32.Flink) break;
  236.                             if (ReadProcessMemory(m_ProcessHandle, (PVOID)LDTE32.FullDllName.Buffer, ProPath32, sizeof(ProPath32), NULL))
  237.                             {
  238.                                 printf("模块基址:0x%X\n模块大小:0x%X\n模块路径:%ls\n",LDTE32.DllBase,LDTE32.SizeOfImage,ProPath32);
  239.                             }
  240.                             if (!ReadProcessMemory(m_ProcessHandle, (PVOID)LDTE32.InLoadOrderLinks.Flink, &LDTE32, sizeof(_LDR_DATA_TABLE_ENTRY32), NULL)) break;
  241.                         }
  242.                     }
  243.                 }
  244.             }
  245.         }
  246.     }
  247.     CloseHandle(m_ProcessHandle);
  248.     getchar();
  249. }

  250. // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
  251. // 调试程序: F5 或调试 >“开始调试”菜单

  252. // 入门提示:
  253. //   1. 使用解决方案资源管理器窗口添加/管理文件
  254. //   2. 使用团队资源管理器窗口连接到源代码管理
  255. //   3. 使用输出窗口查看生成输出和其他消息
  256. //   4. 使用错误列表窗口查看错误
  257. //   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
  258. //   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
复制代码


郁金香外挂教程,学习中...
回复

使用道具 举报

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

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2019-11-21 19:23 , Processed in 0.049749 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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