为什么在网吧玩的战地之王会出现逆战sx警告码怎么解决??...

游戏修改器DIY
玩qq游戏或CF、DNF玩家的都知道,只要你打开了一些傻B疼讯认为是外挂的东西,它就给你弹出个警告窗口,什么什么非法模块之类的,通常都是SX警告码,那么对于那些想用某些游戏修改器的玩家来说,真TM头疼,往上下的布恩那个用,怎么办好呢,实在没想到什么好办法,就DIY一下吧,自己做的虽说功能不咋地,但是只要能用就行了,而且永远都不会非法(重点),那么是什么在保护游戏进程呢。
打开CF,输入账号和密码,进CF之后,会再桌面右下角弹出个小窗口,大家只注意到了那几个汉字了吧,“安全系统正在启动”,前面的两个大大的英文字母都没注意到,“TP”,就是这个游戏的保护软件,具体这个东西可以去网上搜一下,貌似很变态的把系统里很多函数都给钩住了,如果你的挂不带内核隐藏模式的话估计要被他查出来了就直接挂了,废话不用多说,想过这个傻、b保护系统,很简单。游戏修改器VE就有一项内核隐藏模式,加个驱动就可以了,过非法没有问题,但是他是一款网络游戏,大多数网络游戏都是基于C/S模型,你想用修改单机游戏的模式去修改它那是不可能的,除非你把网络数据包给截获并修改成功发给疼讯还差不多,这里我们不提及(也没有水平),貌似走题了,这两天在用程序查找qq游戏连连看里面房间里玩家的座位号,想用人家现成的修改器却老是提示非法,气死了,就萌生自己做一个修改器的念头,想跟人家做的那样强大也是不可能的,没那么多时间,就弄个能查找数据的就行了,目的找到你想要的数据的唯一内存地址,这样你就可以修改它了,呵呵,下面源码给出,拷去粘贴编译一下,申明:功能单一,打开后你要输入目标进程的ID,ID可以在哪看到呢?打开开始菜单----运行----输入cmd----输入tasklist,就可以看到目标进程的PID了,输入后输入你想查找的值,回车,如果地址不唯一,继续查找,跟CE或VE修改器一样的操作,如果你想要改变内存值,以后可以自己添加功能,比如WriteProcessMemory,这个函数就可以向目标进程特定内存写入你想要的值,因为过程匆忙,代码没有优化,功能仅限于查找内存值,简要给出源码:
&/内存地址查找的函数集成
#include "windows.h"
#include "stdio.h"
#include "Tlhelp32.h"
//定义几个全局变量
iAddressList[1024];&&&&&&&&&&&&&&&&
//地址列表
AddN&&&&&&&&&&&&
//有效地址个数
&&&&&&&//目标进程的句柄
//比较一页大小的内存
BOOL CompareAPage(DWORD dwBaseAddr,DWORD dwValue)
&BYTE arBytes[4096];
(!::ReadProcessMemory(hprocess,(LPVOID)dwBaseAddr,arBytes,4096,NULL))
&&return FALSE;
i=0;i&(int)4*1024-3;i++)
&&pdw=(DWORD*)&arBytes[i];
&&if (pdw[0]==dwValue)
(AddNumbers&=1024)
&&&&return
&&&iAddressList[AddNumbers++]=dwBaseAddr+i;
&return TRUE;
///////////////////////////////////////////////////////////
//查找地址函数
BOOL FindFirst(DWORD dwValue)
&const DWORD dwOneGB=24;
&const DWORD dwOnePage=4*1024;
&DWORD dwBase=640*1024;
(;dwBase&2*dwOneGB;dwBase+=dwOnePage)
&&CompareAPage(dwBase,dwValue);
&return TRUE;
////////////////////////////////////////////////////////////
//打印地址列表
void ShowList()
i=0;i&AddNi++)
&&printf("lX\n",iAddressList[i]);
///////////////////////////////////////////////////////////////
//继续搜索下一个目标地址
BOOL FindNext(DWORD dwValue)
&int iAddrNum=AddN
&AddNumbers=0;
&BOOL bRet=FALSE;
&DWORD dwReadV
&for (int i=0;i&iAddrNi++)
(::ReadProcessMemory(hprocess,(LPVOID)iAddressList[i],&dwReadValue,sizeof(DWORD),NULL))
(dwReadValue==dwValue)
&&&&iAddressList[AddNumbers++]=iAddressList[i];
&&&&bRet=TRUE;
&return bR
int main( int argc, char* argv[])
&int processid=0;
&printf("请输入进程的ID:");
&scanf("%d",&processid);
&hprocess=OpenProcess(PROCESS_ALL_ACCESS, FALSE,
processid);
&printf("请输入要查找的值:");
&scanf("%d",&iValue);
&FindFirst(iValue);
&ShowList();
&while (AddNumbers&=1)
&&printf("请继续输入想查找的值:");
&&scanf("%d",&iValue);
&&FindNext(iValue);
&&ShowList();
&return 0;
VS2010下编译运行成功,在VC6.0下没有试,不过差不多吧。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐