鱼C论坛

 找回密码
 立即注册
查看: 4272|回复: 13

关于 什么打开进程 提高权限 获取线程句柄 写内存 读内存的 知识

[复制链接]
发表于 2016-1-16 13:12:25 | 显示全部楼层 |阅读模式
1鱼币
你好 大牛,很崇拜你,请问一下 @ryxcaixia  有哪本书介绍,能告诉我吗 谢谢 @ryxcaixia

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 14:10:06 | 显示全部楼层
帮你 @ryxcaixia
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-16 15:14:33 | 显示全部楼层
本帖最后由 y290176346 于 2016-1-16 15:15 编辑


@ryxcaixia @ryxcaixia   我@出来怎么没有下划线 ,我@的好用吗?
是不是我out了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 15:21:43 | 显示全部楼层
希望多分享下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-17 10:29:41 | 显示全部楼层
我目测你说的这些都是win32平台上的
打开进程 获取句柄 提高权限 读写内存 少年 打算搞WG么?
如果一定要推荐书 肯定是win32核心编程 这个书上 在看不到windows核心源码的情况下
最大可能的剖析了很多核心的东西
直接看后面的关于内存和动态库 hook等的内容就行了
不过 这些都需要你对内存有一定的理解 和 win32平台上一些高级API的使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-17 10:29:53 | 显示全部楼层
少年 我想说 一步一步来把 先打好基础 再弄其他的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-2 14:41:18 | 显示全部楼层
有相同的目的。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-2 19:52:12 | 显示全部楼层
从基础开始吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-17 11:45:25 | 显示全部楼层
看<<windows核心编程>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-29 19:27:40 | 显示全部楼层
学习学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-17 21:58:35 | 显示全部楼层
AdjustTokenPrivileges ,打开调试权限,就可以打开别的进程做操作了,但是要管理员权限
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-12 18:33:35 | 显示全部楼层
这是我写的一个游戏的WG读写类,包含了一些基本的读写内存,申请内存的方法,希望可以帮到你!
这是MemoryRW.h文件

  1. #pragma once
  2. #include <Windows.h>
  3. #include <iostream>
  4. #include <qvector.h>
  5. #include<math.h>
  6. #include<stdio.h>
  7. #include <stdarg.h>
  8. #define BIT(num, n, m)  ((num & (m << n * 4)) > 0)

  9. class MemoryRW
  10. {
  11. public:
  12.         MemoryRW(DWORD ProcessID, QString ProcessName);
  13.         ~MemoryRW();
  14.         bool read(int address, LPVOID temp, int count);
  15.         bool write(int address, LPVOID temp, int count);

  16.         int readInt(int address);
  17.         bool writeInt(int address, int temp);

  18.         float readDecimal(int address);
  19.         bool writeDecimal(int address, float value);

  20.         void readWchar(int address, LPVOID temp, int count);

  21.         void callFunc(LPVOID mFunc, DWORD mFuncSize, LPVOID Param, DWORD ParamSize);
  22.         LPVOID applyMemory(int count, DWORD protect = PAGE_EXECUTE_READWRITE, DWORD type = MEM_COMMIT);
  23.         bool freeMemory(LPVOID address, DWORD Size = 0, DWORD type = MEM_RELEASE);

  24.         std::vector<int> SearchConditioncode(std::vector<byte> Conditioncode);
  25. private:
  26.         HWND hWindows = NULL;
  27.         HANDLE hProcess = NULL;
  28.         DWORD ThreadID = NULL;
  29.         DWORD ProcessID = NULL;
  30.         unsigned long SearchBegin = 0x400000;
  31.         unsigned long SearchEnd = 0x7ffeffff;
  32. };
复制代码


这是.cpp文件
  1. #include "MemoryRW.h"

  2. MemoryRW::MemoryRW(DWORD ProcessID, QString ProcessName)
  3. {
  4.         char str[50];
  5.         QByteArray ba = ProcessName.toLatin1();
  6.         char * mm = ba.data();
  7.         hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
  8.         sprintf_s(str, "process %s---processid %d", mm, ProcessID);
  9.         MessageBoxA(NULL, str, "nice", MB_OK);
  10. }

  11. MemoryRW::~MemoryRW()
  12. {
  13. }

  14. std::vector<int> MemoryRW::SearchConditioncode(std::vector<byte> Conditioncode) {
  15.         BYTE * Conditioncode_array = new BYTE[Conditioncode.size()];
  16.         for (int i = 0; i < Conditioncode.size(); i++) {
  17.                 Conditioncode_array[i] = Conditioncode[i];
  18.         }
  19.         int Conditioncode_num = Conditioncode.size();
  20.         int i, j;
  21.         std::vector<int> temp;
  22.         MEMORY_BASIC_INFORMATION mbInfo = { 0 };
  23.         const SIZE_T BaseInfoLen = sizeof(MEMORY_BASIC_INFORMATION);
  24.         BYTE *lpBuf = new BYTE[1];
  25.         DWORD dwBufSize = 1;

  26.         for (i = SearchBegin; i < SearchEnd;) {
  27.                 VirtualQueryEx(hProcess, (LPCVOID)i, &mbInfo, BaseInfoLen);
  28.                 if (lpBuf != NULL) {
  29.                         delete[] lpBuf;
  30.                         lpBuf = NULL;
  31.                 }
  32.                 if (BIT(mbInfo.State, 3, 1) && (BIT(mbInfo.Protect, 1, 1) || BIT(mbInfo.Protect, 1, 2) || BIT(mbInfo.Protect, 1, 4))) {
  33.                         dwBufSize = mbInfo.RegionSize;
  34.                         lpBuf = new BYTE[dwBufSize];
  35.                         if (ReadProcessMemory(hProcess, (LPCVOID)i, lpBuf, dwBufSize, 0)) {
  36.                                 for (j = 0; j <= mbInfo.RegionSize - Conditioncode_num; j++) {
  37.                                         for (int k = 0; k < Conditioncode_num; k++) {
  38.                                                 if (lpBuf[j + k] != Conditioncode_array[k]) {
  39.                                                         goto s;
  40.                                                 }
  41.                                         }
  42.                                         temp.push_back(i + j);
  43.                                         if (lpBuf != NULL) {
  44.                                                 delete[] lpBuf;
  45.                                                 lpBuf = NULL;
  46.                                         }
  47.                                         //return temp;

  48.                                 s:;
  49.                                 }
  50.                         }
  51.                 }
  52.                 i = (int)mbInfo.BaseAddress + mbInfo.RegionSize;
  53.         }
  54.         if (lpBuf != NULL) {
  55.                 delete[] lpBuf;
  56.                 lpBuf = NULL;
  57.         }
  58.         delete[]Conditioncode_array;
  59.         return temp;
  60. }

  61. bool MemoryRW::read(int address, LPVOID temp, int count) {
  62.         if (ReadProcessMemory(hProcess, (LPCVOID)address, temp, count, 0)) {
  63.                 return true;
  64.         }
  65.         else {
  66.                 return false;
  67.         }
  68. }

  69. bool MemoryRW::write(int address, LPVOID temp, int count) {
  70.         if (WriteProcessMemory(hProcess, (LPVOID)address, temp, count, 0)) {
  71.                 return true;
  72.         }
  73.         else {
  74.                 return false;
  75.         }

  76. }

  77. int MemoryRW::readInt(int address) {
  78.         int temp = 0;
  79.         ReadProcessMemory(hProcess, (LPCVOID)address, &temp, 4, 0);
  80.         return temp;
  81. }

  82. bool MemoryRW::writeInt(int address, int temp) {
  83.         if (WriteProcessMemory(hProcess, (LPVOID)address, &temp, 4, 0)) {
  84.                 return true;
  85.         }
  86.         else {
  87.                 return false;
  88.         }
  89. }

  90. float MemoryRW::readDecimal(int address) {
  91.         float temp;
  92.         ReadProcessMemory(hProcess, (LPCVOID)address, &temp, 4, 0);
  93.         return temp;
  94. }

  95. bool MemoryRW::writeDecimal(int address, float value) {
  96.         if (WriteProcessMemory(hProcess, (LPVOID)address, &value, 4, 0)) {
  97.                 return true;
  98.         }
  99.         else {
  100.                 return false;
  101.         }
  102. }

  103. void MemoryRW::readWchar(int address, LPVOID temp, int count) {
  104.         int tempCount = 0;
  105.         wchar_t tempWchar = L'\0';
  106.         while (true)
  107.         {
  108.                 wchar_t tempWchar = WORD(readInt(address + tempCount * 2));
  109.                 *((WORD *)temp + tempCount) = tempWchar;
  110.                 tempCount++;
  111.                 if (tempWchar == L'\0' || tempCount == count - 1) {
  112.                         *((WORD *)temp + tempCount) = L'\0';
  113.                         break;
  114.                 }
  115.         }
  116. }

  117. LPVOID MemoryRW::applyMemory(int count, DWORD protect, DWORD type) {
  118.         return VirtualAllocEx(hProcess, NULL, count, type, protect);
  119. }

  120. bool MemoryRW::freeMemory(LPVOID address, DWORD Size, DWORD type) {
  121.         return VirtualFreeEx(hProcess, address, Size, type);
  122. }

  123. //**************************************************************************************   
  124. //函数名:InfusionFunc   
  125. //功能  :封装远程注入的函数   
  126. //参数 1:进程ID   
  127. //参数 2:被注入函数指针<函数名>   
  128. //参数 3:参数   
  129. //参数 4:参数长度   
  130. //**************************************************************************************   
  131. void MemoryRW::callFunc(LPVOID mFunc, DWORD mFuncSize,LPVOID Param, DWORD ParamSize)
  132. {
  133.         LPVOID mFuncAddr;//申请函数内存地址           
  134.         LPVOID ParamAddr;//申请参数内存地址   
  135.         HANDLE hThread;    //线程句柄   
  136.         DWORD NumberOfByte; //辅助返回值
  137.         //打开被注入的进程句柄      
  138.         //申请内存   
  139.         mFuncAddr = applyMemory(mFuncSize);
  140.         ParamAddr = applyMemory(ParamSize);
  141.         //写内存   
  142.         write((int)mFuncAddr, mFunc, mFuncSize);
  143.         write((int)ParamAddr, Param, ParamSize);
  144.         //创建远程线程   
  145.         hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)mFuncAddr,
  146.                 ParamAddr, 0, &NumberOfByte);
  147.         WaitForSingleObject(hThread, INFINITE); //等待线程结束   
  148.         //释放申请有内存   
  149.         freeMemory(mFuncAddr);
  150.         freeMemory(ParamAddr);
  151.         //释放远程句柄   
  152.         CloseHandle(hThread);
  153. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-12 18:35:27 | 显示全部楼层
sorry的是我没写 注释 不过代码不长,看懂应该没问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-12 18:37:09 | 显示全部楼层
还有一些东西是qt的,比如QByteArray !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 04:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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