`
ccjsjymg
  • 浏览: 62237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修改内存地址内容,可以修改游戏金币值

阅读更多
实现修改内存内容核心代码:
//进程列表信息
void CMemRepairDlg::InitProcessList()
{
	PROCESSENTRY32 pe32;
	ZeroMemory(&pe32, 0);
	pe32.dwSize = sizeof(PROCESSENTRY32);
	//对系统进程进行拍照
	HANDLE handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if ( INVALID_HANDLE_VALUE == handle  )
	{
		MessageBox("调用CreateToolhelp32Snapshot函数失败!");
		return;
	}
	
	BOOL bRect = ::Process32First(handle, &pe32);

	if ( m_map.size() > 0)
		m_map.clear();//清除
	CString cs;

	while( bRect )
	{
		((CComboBox*)GetDlgItem(IDC_PROCESSLIST_COBOX))->AddString(pe32.szExeFile);
		m_map.insert(std::pair<DWORD, CString>(pe32.th32ProcessID, pe32.szExeFile));
		
		bRect = ::Process32Next(handle, &pe32);
	}
	((CComboBox*)GetDlgItem(IDC_PROCESSLIST_COBOX))->SetCurSel(3);

	//GetModuleFileNameEX::检索当前进程路径
	UpdateData(FALSE);
	CloseHandle(handle);
}

//获取当前进程句柄
void CMemRepairDlg::GetCurrentProcessHandle()
{
	int nIndex = ((CComboBox*)GetDlgItem(IDC_PROCESSLIST_COBOX))->GetCurSel();
	CString processStr = "";
	((CComboBox*)GetDlgItem(IDC_PROCESSLIST_COBOX))->GetLBText(nIndex, processStr);
	
	DWORD processId = 0;

	if ( m_map.size() > 0 )
	{
		std::map<DWORD, CString>::iterator iterator;
		for( iterator=m_map.begin();iterator != m_map.end();++iterator )
		{
			if ( !processStr.Compare(iterator->second) )
			{
				processId = iterator->first;
				break;
			}
		}
	}
	if ( processId == 0 ) return;
	m_handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);

	if ( m_handle == NULL )
	{
		CString errorInfo;
		errorInfo.Format("error code:%d 调用函数失败!", GetLastError);
		MessageBox(errorInfo);
		return;
	}
	
}
//读取一页内存
void CMemRepairDlg::ReadOnePageMem(DWORD baseptr, const char* pStr)
{
	BYTE byte[4096] = {0};
	//lpBaseptr:起始地址
	BOOL bRect = ::ReadProcessMemory(m_handle, (LPCVOID)baseptr, byte, 4096, NULL);

	LPDWORD ptr = NULL;
	if ( bRect )
	{
		for( int i = 0;i < 4*1024-3;++i )
		{
			ptr = (DWORD*)&byte[i];
			if ( *ptr == atoi(pStr) )
			{
				m_vector.push_back(baseptr+i);
			}
		}
	}
	
}

//获取操作系统用于存储数据的地址
void CMemRepairDlg::GetBasePtr(const char* pStr)
{
	OSVERSIONINFO osInfo;
	ZeroMemory(&osInfo, sizeof(OSVERSIONINFO));
	osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	::GetVersionEx(&osInfo);
	DWORD baseAddr = 0;
	if ( osInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )//98
	{
		baseAddr = 4*1024*1024;//98系统是采用的是4M
	}
	else
	{
		baseAddr = 64*1024;
	}

	if ( m_vector.size() > 0)
		m_vector.clear();
	//在开始地址到2G内存空间进行查找
	for( ;baseAddr < 2*1024*1024*1024;baseAddr+=4*1024 )
	{
		ReadOnePageMem(baseAddr, pStr);
	}
}

//通过输入值找到当前进程中内存地址
void CMemRepairDlg::OnSearchBtn() 
{
	// TODO: Add your control notification handler code here
	GetCurrentProcessHandle();
	((CEdit*)GetDlgItem(IDC_VALUE_EDIT))->GetWindowText(m_value);
	GetBasePtr(m_value.GetBuffer(m_value.GetLength()));
	OperatorListBox();

}

//地址列表控件操作
void CMemRepairDlg::OperatorListBox()
{
	CListBox* listBox = (CListBox*)GetDlgItem(IDC_PROCESS_LIST);
	std::vector<DWORD>::iterator itrator;
	
	listBox->ResetContent();
	CString str;
	for( itrator = m_vector.begin();itrator != m_vector.end();++itrator )
	{
		str.Format("%p", *itrator);
		listBox->AddString(str);
	}

	UpdateData(FALSE);
}

void CMemRepairDlg::OnSelchangeProcessList() 
{
	// TODO: Add your control notification handler code here
	CListBox* listBox = (CListBox*)GetDlgItem(IDC_PROCESS_LIST);
	int nIndex = ((CListBox*)GetDlgItem(IDC_PROCESS_LIST))->GetCurSel();
	CString strItem;
	listBox->GetText(nIndex, strItem);
	((CEdit*)GetDlgItem(IDC_ADDR_EDIT))->SetWindowText(strItem);
	UpdateData(FALSE);
}

//从指定的内存范围内进行搜索
void CMemRepairDlg::OnStartBtn() 
{
	// TODO: Add your control notification handler code here
	int nSize = m_vector.size();

	DWORD dwValue;
	if ( m_nextVector.size() > 0 )
		m_nextVector.clear();
	std::vector<DWORD>::iterator iterator;
	for( iterator = m_vector.begin(); iterator != m_vector.end();++iterator )
	{
		BOOL bRect = ::ReadProcessMemory(m_handle, (LPCVOID)*iterator, &dwValue, sizeof(DWORD), NULL);
		if (bRect)
		{
			if ( dwValue == atoi(m_value.GetBuffer(m_value.GetLength())) )//内存的内容与输入的值相等
			{
				m_nextVector.push_back(*iterator);
			}
		}
	}

	m_vector.clear();
	m_vector = m_nextVector;

	OperatorListBox();

}

//修改内存内容
void CMemRepairDlg::OnModifyBtn() 
{
	// TODO: Add your control notification handler code here
	CString addrStr = "";
	CString modifyStr = "";

	((CEdit*)GetDlgItem(IDC_ADDR_EDIT))->GetWindowText(addrStr);//需要修改的地址
	((CEdit*)GetDlgItem(IDC_MODIFY_EDIT))->GetWindowText(modifyStr);
		MessageBox(addrStr);
	
	DWORD dwValue = atoi(modifyStr.GetBuffer(modifyStr.GetLength()));
	DWORD addr = HexToNum(addrStr);;
	
	BOOL bRect = ::WriteProcessMemory(m_handle,(LPVOID)addr, &dwValue, sizeof(DWORD), NULL);
	if ( bRect )
		MessageBox("修改成功!");
	else
	{
		int nCode = GetLastError();
		CString errorInfo;
		errorInfo.Format("%d   错语码:%d", addr, nCode);
		MessageBox(errorInfo);
	}
}

//十六进制转化为十进制
DWORD CMemRepairDlg::HexToNum(CString str)
{
	int nSum = 0;
	int nLength = str.GetLength();
	int i = 0;
	int nTemp = 0;
	
	do 
	{
		TCHAR cChar = str.GetAt(--nLength);
		switch(cChar)
		{
			case 'A':
			case 'a':
				nTemp = 10;
				break;
			case 'B':
			case 'b':
				nTemp = 11;
				break;
			case 'C':
			case 'c':
				nTemp = 12;
				break;
			case 'D':
			case 'd':
				nTemp = 13;
				break;
			case 'E':
			case 'e':
				nTemp = 14;
				break;
			case 'F':
			case 'f':
				nTemp = 15;
				break;
			default:
				nTemp = cChar - 48;
				break;

		}
		nSum += nTemp*pow(16, i);

		++i;
	} while (nLength  > 0);

	return nSum;
}
分享到:
评论

相关推荐

    游戏内存修改器源代码 可修改大多数游戏内存

    游戏内存修改器是一种工具,允许用户在运行游戏时更改内存中的数据,以实现对游戏状态的修改,如生命值、金币、道具数量等。本文将深入探讨内存修改器的工作原理,以及如何使用VS2010进行编译,以及在实际应用中针对...

    ce游戏工具(获得游戏中的内存地址)

    它提供了一个内存扫描器,可以搜索特定值或范围的内存地址,从而找到游戏中的变量。此外,CE还支持创建自定义脚本,以自动化内存修改过程,进一步提升用户对游戏数据的控制。 **2. 获取内存地址** 在CE中,用户首先...

    GE内存修改器

    例如,玩家可以利用它来调整角色的生命值、金币数量、等级等参数,从而提升游戏体验。GE内存修改器可能具备以下关键功能: 1. **内存搜索**:用户可以通过输入特定数值,让软件搜索内存中与该数值相关的地址,找到...

    内存查找修改器源代码

    它允许用户搜索和更改程序运行时的内存值,从而实现对游戏数据的自定义,例如角色的生命值、金币数量或者游戏难度等级。源代码的公开对于学习编程、逆向工程以及软件调试有着重要的价值。下面将详细讨论内存查找修改...

    CE内存修改器 CE内存修改器

    2. **内存编辑**:找到目标内存地址后,用户可以直接修改内存中的数据,比如增加生命值、金币数量、技能点等,从而实现游戏作弊。 3. **动态扫描**:CE内存修改器支持动态扫描,即在游戏运行过程中持续监控内存变化...

    内存修改神器_绿色版

    内存修改神器,通常指的是能够对游戏或应用程序内存中的数据进行修改的工具,以实现特定功能,如提升游戏属性、作弊等。"Cheat Engine"是一款知名的开源内存调试和修改工具,它在IT领域中被广泛用于游戏调试和编程...

    英文版MHS内存修改工具

    例如,在游戏中,玩家可能想修改角色的生命值、金币数量等,内存修改工具就提供了这样的可能性。 **MHS.exe**是这个工具的主要执行文件,双击后即可启动内存修改功能。它通常会提供一个扫描和编辑内存的界面,用户...

    vc实现的内存修改

    这个程序的功能类似于游戏内存修改器,用于改变游戏中的变量值,例如角色的生命值、金币数量等。 首先,我们要理解VC是如何与内存交互的。在C++中,我们可以通过指针来访问和修改内存。通过获取进程ID和线程ID,...

    抓取游戏内存基数 抓取游戏内存基数

    1. 法律风险:未经许可对游戏进行内存修改可能违反游戏的使用条款,甚至触犯法律,因此在实际操作时应谨慎。 2. 安全问题:不恰当的内存操作可能导致游戏崩溃,甚至影响整个系统的稳定性。因此,了解内存管理原则至...

    易语言制作网络游戏内存搜索修改器源码

    网络游戏内存搜索修改器,通常称为游戏辅助或外挂,它的工作原理是通过读取游戏进程在内存中的数据,找到并修改关键数值,比如角色的生命值、经验、金币等。这种工具的制作涉及了几个核心知识点: 1. **内存扫描**...

    MHS_cn[内存修改工具]

    2. 内存修改:找到目标数据后,用户可以直接在内存中修改这些值,实现对游戏状态的即时调整。 3. 数据跟踪:MHS_cn提供数据跟踪功能,可以监控特定地址的变化,这对于理解软件运行机制或调试程序非常有用。 4. ...

    内存监测工具[可用作单机游戏修改]附带教程【绿色汉化版】

    1. **内存扫描**:用户可以搜索特定的游戏数值,如生命值、金币数量等,然后修改这些数值以获得游戏优势。 2. **内存分析**:允许用户查看和修改应用程序的内存布局,了解程序运行时的数据结构。 3. **调试器**:...

    查找内存地址的强大软件

    5. **脚本语言**:CE还提供了一种定制的脚本语言,用户可以编写脚本来自动化内存修改过程。通过编写脚本,可以实现复杂的内存操作,比如自动跟踪、动态修改等。 6. **多进程支持**:CE可以同时连接多个进程进行内存...

    CE 内存修改工具 手机app版

    CE最初是一款在个人电脑上广泛使用的作弊工具,允许用户在单机游戏中修改内存数据,如生命值、金币等,以实现游戏的自定义体验。现在,它已被开发成适用于手机的应用,让移动设备的用户也能享受到类似的功能。 在...

    C#简易内存修改器.zip

    C#简易内存修改器的应用场景广泛,例如在游戏中修改角色的生命值、金币数量,或者在软件测试中快速修改变量值以进行调试。然而,值得注意的是,非法使用内存修改器可能导致违反软件使用协议,甚至触及法律问题,因此...

    烧饼修改器内存工具修改技巧.docx

    例如,如果我们知道游戏中金币的内存地址,并且已经计算出了金币到钻石之间的偏移量,我们就可以通过先找到金币的地址,然后应用这个偏移量来计算出钻石的内存地址。计算得到的地址可以被保存或添加到搜索结果列表中...

    se.rar_ce修改_se数值修改器_se跟ce_修改ce_游戏数值

    它允许用户修改运行中的应用程序的内存值,特别是对于游戏来说,可以用来调整游戏内的各种数值,如生命值、金币、经验等,从而实现对游戏体验的自定义。然而,这种行为在大多数情况下被视为作弊,特别是在多人在线...

    FLASH游戏修改器

    这些游戏虽然有趣,但往往受到内置限制,如生命值、分数、金币等,而Flash游戏修改器则可以帮助玩家解除这些限制,提供更自由的游戏体验。 描述中提到的“一个可以对于FLASH制作游戏进行修改的小工具”,进一步解释...

    YO修改-内存搜索工具

    虽然内存修改可以带来游戏体验的个性化,但这也可能违反游戏的公平性原则,甚至触犯游戏公司的服务条款。此外,不恰当的修改可能导致游戏崩溃或者不稳定。因此,在使用内存搜索工具时,应确保你了解可能的风险,并...

    游戏内存扫描非CE,ArtMoney

    游戏内存扫描非CE,ArtMoney是一款来自国外的专业游戏辅助软件,它主要被用来进行游戏内存数据的搜索和修改,帮助玩家在游戏中找到并更改特定数值,例如角色的生命值、金币数量等。ArtMoney并非 Cheat Engine(CE)...

Global site tag (gtag.js) - Google Analytics