首页
社区
课程
招聘
[求助]用什么方法能像CE那样高效地搜索进程内存?
发表于: 2016-1-11 16:20 5433

[求助]用什么方法能像CE那样高效地搜索进程内存?

2016-1-11 16:20
5433
我有一个函数特征需要在内存里搜索,但是这个函数是在临时申请的可执行内存地址中,并不固定,而且不附着在某个DLL空间里,所以我想要暴力搜索整个内存来寻找它,但是因为各个内存地址的可读写属性不同,有什么好办法能像CE那样高效地搜索呢?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 736
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以去下CE的代码看看嘛~~
2016-1-11 16:40
0
雪    币: 67
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
同问,Delphi代码看着累...
2016-1-11 19:42
0
雪    币: 995
活跃值: (674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
以前写的

void FindMemory(DWORD pid)
{
	MEMORY_BASIC_INFORMATION mbi;
	DWORD memoryAddress = 0;
	BYTE *dataBuffer = NULL;
	BOOL readReturn = 0;
	HANDLE pHandle=OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
	while (VirtualQueryEx(pHandle, (LPVOID)memoryAddress, &mbi, sizeof(mbi)))
	{
		if (mbi.Type == MEM_PRIVATE && mbi.Protect != PAGE_EXECUTE && mbi.Protect != PAGE_NOACCESS && mbi.Protect != 128)
		{
			dataBuffer = (BYTE*)malloc(mbi.RegionSize);
			readReturn=ReadProcessMemory(pHandle, (LPVOID)memoryAddress, dataBuffer, mbi.RegionSize, 0);
			if (readReturn != 0)
			{
				//在dataBuffer寻找字节集返回找到位置+memoryAddress=实际地址
				for (int i = 0; i < mbi.RegionSize; i++)
				{
					//寻找自定义字节自己写把
					if (dataBuffer[i] == 144 && dataBuffer[i+1] == 108)
					{
						cout <<"找到"<< hex << memoryAddress+i << endl;
					}
				}
			}
		}
		memoryAddress = memoryAddress + mbi.RegionSize;
	}
	CloseHandle(pHandle);
}
2016-1-11 20:56
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
你不是说了:1.可执行内存属性 2.非PE映像的内存。这两点 已经把可以搜索的范围缩得很小了,再配上 机器码特征
2016-1-11 21:56
0
雪    币: 324
活跃值: (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
赞一个思路
2016-1-12 08:14
0
游客
登录 | 注册 方可回帖
返回