吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 4674|回复: 81

[C/C++] [C/C++]利用api实现对其他进程暴力枚举内存页修改内容(

  [复制链接]
oxygen1a1 发表于 2022-1-23 17:51 | 显示全部楼层 |阅读模式

运行环境:
windows 10
涉及工具:
vs2019
编程语言:
C
以下为主题内容:没太了解过Cheat engine,但是感觉写出来的这个估计也Ce的机理差不多
所用到的Api CreateProcess、ReadProcessMemory、WriteProcessMemory流程是先用CreateProcess()打开目标进程,以获取hProcess(进程句柄),然后ReadProcessMemory...找地址
WirteProcessMemory该地址的数据
里面还有很多细节 比如我只枚举了进程低2Gb的空间 因为高2Gb是内核。而且基质要是64kb以后,前64kb的物理页无法写入和读取。Windows系统的规定。
贴出Msdn给的这三个Api的解释,加上代码 估计能了解各个参数的含义。难懂的参数我都会注释。(其实也已经英文注释了 看不懂的可以自己去翻译)
这三个Api都是很基础的了,纯纯菜鸟做,目前刚学windows核心编程。大佬还请点击右上角
这是CreateProcess ApiCsdn的解释
[C++] 纯文本查看 复制代码
BOOL CreateProcess(
  LPCTSTR lpApplicationName,                 // name of executable module
  LPTSTR lpCommandLine,                      // command line string
  LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD 安全属性
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD 安全属性 无用 填Null
  BOOL bInheritHandles,                      // handle inheritance option
  DWORD dwCreationFlags,                     // creation flags
  LPVOID lpEnvironment,                      // new environment block
  LPCTSTR lpCurrentDirectory,                // current directory name
  LPSTARTUPINFO lpStartupInfo,               // startup information
  LPPROCESS_INFORMATION lpProcessInformation // process information);

下面是WriteProcessMemory和ReadProcessMemory;

[C++] 纯文本查看 复制代码
BOOL WriteProcessMemory(  HANDLE hProcess,               // handle to process
  LPVOID lpBaseAddress,          // base of memory area
  LPVOID lpBuffer,               // data buffer
  DWORD nSize,                   // number of bytes to write
  LPDWORD lpNumberOfBytesWritten // number of bytes written);

[C++] 纯文本查看 复制代码
BOOL ReadProcessMemory(  HANDLE hProcess,             // handle to the process
  LPCVOID lpBaseAddress,       // base of memory area
  LPVOID lpBuffer,             // data buffer
  DWORD nSize,                 // number of bytes to read
  LPDWORD lpNumberOfBytesRead  // number of bytes read);

效果图:
1.png
输入要找的值
2.png
可以看到
有很多 那我们next search
3.png

现在只有一个值了 修改吧
4.png
因为我修改的值太大了 所以只能(32-bit) 这个值就是int的最大值 应该是有符号的最大值
5.png

代码下面 只有一个cpp 没有什么别的
[C++] 纯文本查看 复制代码
/////////////////////By Oxygen1a1///////////////////////////
////////////通过暴力枚举实现修改进程内存////////////////
////////////作者邮箱[email]304914289@qq.com[/email] 欢迎反馈///////
#include <stdio.h>
#include <Windows.h>
BOOL FindFirst(DWORD dwVaule);//对目标进程空间进行查找
BOOL FindNext(DWORD dwValue);//对目标空间以后的查找
//把查找的东西放在列表里面
DWORD g_arList[1024];
int g_nListCnt;//有效的地址个数
HANDLE g_hProcess;//目标进程句柄
void ShowList();//用来显示查找到的地址

BOOL WriteMemory(DWORD dwAddr, DWORD dwVaule);//最后用来改东西的
int main() {
	//1.首先用CreateProcess 把目标进程Testor拉起来
	//获取句柄就可以了
	char szFileName[] = "Target.exe";//目标程序 注意工作路径
	STARTUPINFO si;
	memset(&si, 0, sizeof(si));
	PROCESS_INFORMATION pi;

	BOOL bRet = CreateProcess(
		NULL,
		szFileName,
		NULL,
		NULL,
		FALSE,
		CREATE_NEW_CONSOLE,
		NULL,
		NULL,
		&si,
		&pi
	);
	if (bRet) {
		g_hProcess = pi.hProcess;//获取进程句柄
	}
	//2.然后 我们需要将memchange接受一个目标值 并比对
	int iVal;
	printf("first search:");
	scanf_s("%d", &iVal);
	FindFirst(iVal);
	//交互显示
	ShowList();
	while (g_nListCnt > 1) {
		printf("next search:");
		scanf_s("%d", &iVal);
		FindNext(iVal);
		ShowList();
	}
	//得到唯一地址的值
	printf("new vaule:");
	scanf_s("%d", &iVal);
	if (WriteMemory(g_arList[0], iVal)) {
		printf("ok!!");
	}

}
BOOL ComPareAPage(DWORD dwBaseAddr, DWORD dwValue) {
	BYTE arBytes[4096];//4kb
	if (!ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL)) {
		return false;
	}
	DWORD* pdw;
	for (int i = 0; i < 4 * 1024 - 3; i++) {
		pdw = (DWORD*)&arBytes[i];
		if (*pdw == dwValue) {
			if (g_nListCnt >= 1024) return false;//太多了
			g_arList[g_nListCnt++] = dwBaseAddr + i;
		}
	}
	return TRUE;
}
BOOL FindFirst(DWORD dwVaule) {
	const DWORD dwOneGB = 1024 * 1024 * 1024;
	const DWORD dwOnePage = 4 * 1024;//4kb
	if (g_hProcess == nullptr) return false;
	DWORD dwBase = 640 * 1024;
	//BOOL bRet = FALSE;
	for (; dwBase < 2 * dwOneGB; dwBase += dwOnePage) {//在低2Gb的内核态进行查找
		ComPareAPage(dwBase, dwVaule);
	}
	return TRUE;
}
BOOL FindNext(DWORD dwVaule) {
	BOOL bRet = FALSE;
	//这个时候只需要在g_arList中查找即可,
	int nOrgCnt = g_nListCnt;
	g_nListCnt = 0;//清空上一次找到的地址 下面在慢慢加 也是节省变量
	DWORD dwReadVaule;
	for (int i = 0; i < nOrgCnt; i++) {
		if (ReadProcessMemory(g_hProcess, (LPVOID)g_arList[i]
			, &dwReadVaule, sizeof(DWORD), NULL)) {
			//读取成功后
			if (dwReadVaule == dwVaule) {
				//值还一样
				g_arList[g_nListCnt++] = g_arList[i];
				
			}
		}
		bRet = TRUE;
	}
	return bRet;
	
}
void ShowList() {
	printf("全部地址:\n");
	for (int i = 0; i < g_nListCnt; i++) {
		printf("%p    ", g_arList[i]);
	}
	printf("\n");//换行 美观
}
BOOL WriteMemory(DWORD dwAddr, DWORD dwVaule) {
	return WriteProcessMemory(g_hProcess, (LPVOID)dwAddr, &dwVaule
		, sizeof(DWORD), NULL);

}


FAKE CE.rar

284 Bytes, 下载次数: 3, 下载积分: HB -3

兑换该附件所需:5 HB  (若已兑换,再次点击即可下载)

源码

评分

参与人数 23HB +18 THX +10 收起 理由
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
七七八八 + 1
后学真 + 1
金少 + 1
风里去 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
飞刀梦想 + 1
我是一只凹凸曼 + 1
agan8888 + 1
空白001 + 1
wbxs2077 + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
耳旁密语 + 2 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
pmm018 + 1
土豆家的土豆 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
kll545012 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
淡灬看夏丶恋雨 + 1
瘪犊子 + 1 【违规行为】请查阅http://www.52hb.com/thread-116-1-1.html
temp + 1 + 1
zsr849408332 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
a8936084 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
河图 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
king51999 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
nNDtsS316 发表于 2022-1-23 17:51 | 显示全部楼层

谢谢分享

点评

oxygen1a1”点评说:
离谱 我刚发 你就回复了  发表于 2022-1-23 17:53

评分

参与人数 1HB +5 THX +1 收起 理由
oxygen1a1 + 5 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
cQHmsZNlTr 发表于 2022-1-23 17:52 | 显示全部楼层

可以多发一些这类内容吗?我很喜欢!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ChfZm7 发表于 2022-1-23 17:53 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
学姐95361 发表于 2022-1-23 17:54 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
DGY24736 发表于 2022-1-23 17:54 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
向日葵89142 发表于 2022-1-23 18:00 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LQpJlqFNXxE 发表于 2022-1-23 18:05 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
VXBlSUP138 发表于 2022-1-23 18:05 | 显示全部楼层

帮顶一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
iytwfx01 发表于 2022-1-23 18:10 | 显示全部楼层

来向大佬学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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