植物大战僵尸之加钱外挂..

//注意:本程序测试时,用的植物大战僵尸版本为:植物大战僵尸年度中文版 

//本程序对其它版本有可能不起作用


植物大战僵尸年度中文版  下载地址:
http://l5.yunpan.cn/lk/36mpcb54vc

本程序下载地址:
因业界一直对外挂持否定的态度,所以作者就不将其发布在互联网上了,
本程序仅供个人学习研究之用,有需要者请联系作者本人

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

         上次我写了个植物大战僵尸加阳光的外挂,结果在学习、无聊之余,玩玩游戏,劳逸结合,收获不少!...

这次我忍不住要写个加钱的外挂,因为我发现在游戏中没钱买装备,

那是相当的无奈呀!呵呵,现实中也一样啦!...


先说一下这次找金钱的基址的方法:

刚学外挂时,我自己找过金钱的基址,找了很多次都没找到,奇怪之极!...
一次在网上看到了一个找金钱基址的教程,看了之后,我才恍然大悟,原来我们在游戏中
看到的金钱,最后一个0是没有用的
,例如,我们在游戏中看到的金钱数为5550,实际上
我们拥有的金钱数为555,
所以我们在用CE搜金钱时,要是我们不把5550后面的0去掉,我们是
搜不到金钱的基址的,知道了原因之后,我们每次搜金钱时,把金钱后面的0给去掉,然后再搜就可以了。
呵呵,经过一番搜索之后,我发现金钱的基址跟我以前搜索出来的阳光的基址是一样的,都是:006A9EC0
只是它们的偏移不同而已...


本程序效果截图如下:



主要代码如下:

//获取当前金钱总数函数,hGame为游戏进程句柄
int GetCurrentMoney(HANDLE hGame)
{
	DWORD dwRead=0;
	DWORD dwArr=0;

	//读取基址所指向的地址,基址为:0x6A9EC0
	BOOL bRead=::ReadProcessMemory(hGame,LPVOID(0x6A9EC0),(LPVOID)&dwArr,(DWORD)4,&dwRead);

	//获取一级偏移在内存中的地址
	bRead=::ReadProcessMemory(hGame,LPVOID(dwArr+0x82c),(LPVOID)&dwArr,(DWORD)4,&dwRead);

	//获取金钱
	//金钱在内存单元中的地址为:dwArr+0x28
	bRead=::ReadProcessMemory(hGame,LPVOID(dwArr+0x28),(LPVOID)&dwArr,(DWORD)4,&dwRead);

	//关闭游戏进程句柄
	::CloseHandle(hGame);
	hGame=NULL;

	//返回获取到的金钱
	return (int)dwArr;	
}


//增加金钱函数,hGame为游戏进程句柄
void AddMoney(int nAddMoney,HANDLE hGame)
{
	DWORD dwRead=0;
	DWORD dwArr=0;

	//读取基址所指向的地址,基址为:0x6A9EC0
	BOOL bRead=::ReadProcessMemory(hGame,LPVOID(0x6A9EC0),(LPVOID)&dwArr,(DWORD)4,&dwRead);

	//获取一级偏移在内存中的地址
	bRead=::ReadProcessMemory(hGame,LPVOID(dwArr+0x82c),(LPVOID)&dwArr,(DWORD)4,&dwRead);

	//增加金钱
	//上一步我们读取内存中dwArr+0x82c处的值,得到一个内存地址
	//这个内存地址加上偏移0x28,就是金钱在内存中的地址
	//要知道内存每个单元都有一个地址,数据存放在内存单元中
	bRead=::WriteProcessMemory(hGame,
							    (LPVOID)(dwArr+0x28),
								(LPVOID)&nAddMoney,
								(DWORD)sizeof(nAddMoney),
								&dwRead);
	//关闭句柄
	if(hGame!=NULL)
	 ::CloseHandle(hGame);
	hGame=NULL;
}








posted @ 2012-06-22 21:04  氺〤魚Oo。  阅读(352)  评论(0编辑  收藏  举报