呵呵,花了两天的时间,从找基址到理解内存,终于完成了内存数据的读取工作...
写完这个小程序,我基本上掌握了外挂的制作技术了 ...
在此将心得体会写下来,留着以后复习用...
这次我拿来练手的小程序是:扫雷小鱼儿,程序截图如下,
读取时间效果截图如下:
扫雷小鱼儿下载地址为: http://download.csdn.net/download/friendan/4324602
这次我读取的是-扫雷小鱼儿-的时间,找其时间基址的过程,波折颇多,下面说一下我的想法...
关于扫雷小鱼儿的时间的基址,其实我找到的是一个 指针P的地址,
让我奇怪的是指针P的地址是固定的,而指针P指向的地址却是不断变化的,
关于指针,C语言基础不好的朋友,也许就卡在这里了-_-...
我们要找的扫雷小鱼儿的时间的内存地址为: addr=指针P指向的地址+52E0 //注:52E0为偏移地址
有了上面的这条公式,呵呵,编写程序就有章可寻了。
我写本程序的思路为:
1.因为指针P的地址是固定的,因此我们可从指针P下手,读取出指针P所指向的地址
Hehe废话一名:事实上,无论指针P所指向的地址如何变化,只要指针P的地址不变,我们总能获取指针P所指向的地址
2.获取指针P所指向的地址后,通过上面那一条公式,我们就可以读取小鱼儿扫雷程序的时间了...
总结:为了获取小鱼儿扫雷程序的时间,我们两次读取了内存,
第一次读取内存,是为了获取时间在内存中的基址
第二次读取内存,是为了获取时间值
程序主要代码为:
//获取指针P指向的地址,指定P的地址为:012FBA8 //16进制地址
DWORD dwRead=0;
DWORD dwArr=0;
::ReadProcessMemory(hProc,LPVOID(0x012FBA8),(LPVOID)&dwArr,(DWORD)4,&dwRead);
//获取指针P所指向的地址后,就可以就取时间了...
BOOL bRead=::ReadProcessMemory(hProc,LPVOID(dwArr+0x52e0),(LPVOID)&m_nTime,(DWORD)4,&dwRead);
....
.....