如何用C++做游戏外挂?
请详细说明从第一步到外挂完成
请详细说明从第一步到外挂完成
答案:我们确定要打的NPC数量。这个数量不能很大,原因在于网金的封包长度用一个字节表示,那么一个包可以有255个字节,我们上面分析过,增加一个NPC要增加10个字节,所以大家算算就知道,打20个NPC比较合适。
然后我们要把客户端原来的NPC代码分析计算出来,因为增加的NPC代码要加上100000哦。再把我们增加的NPC代码计算出来,并且组合成新的封包,注意代表包长度的字节要修改啊,然后转发到服务器,这一步在编写程序的时候要注意算法,不要造成较大延迟。
上面我们欺骗服务器端完成了,欺骗客户端就简单了,^-^
发送了上面的封包后,我们根据新增NPC代码构造封包马上发给客户端,格式就是"F4 44 12 E9 NPC代码 02 00 00 03 00 00 00
00 00 00",把每个新增的NPC都构造这样一个包,按顺序连在一起发送给客户端,客户端也就被我们骗过了,很简单吧。
以后战斗中其他的事我们就不管了,尽情地开打吧,呵呵。
上面讲的需要一定的编程基础,但是不难,即使你不会编程,相信你继续看下去就会有收获了。
五:怎么用计算机语言去写一个单机代理?
在上一章,我们已经对于代理的原理进行了讲解,大家对于代理已经有了一个初步的认识,现在我教大家如何用计算机语言编写一个自己的代理,我们考虑到简单明了,我们选用VB,因为用VB编写代理只需要很少的代码。
代码如下:
Private Sub form_Load()
DaiLi.LocalPort = "1234"
Server.RemotePort = "1234"
Server.RemoteHost = "211.100.20.26"
DaiLi.Listen
End Sub
Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long)
Server.Connect
内容太多,写不下
我这有本教程,挺不错,和我联系我给你这个是一个用c++编的 C++如何调用call(武林call外挂)
//文件 wulin2.cpp
// wulin2.cpp : Defines the entry point for the DLL application.
//
#include "StdAfx.h"
#include "windows.h"
#pragma data_seg("Shared")
typedef struct paramdata
{
long param1;
long param2;
DWORD param3;
DWORD param4;
}paramdata,*paramp;
#pragma data_seg()
#pragma comment(linker,"/Section:Shared,RWS")
LPVOID ThreadAdd;
LPVOID ParamAdd;
const DWORD wSize=1024*4;
HANDLE hpid;
int NormalHit() //普通攻击 For 117
{
DWORD addr=0x005A3090;
__asm
{
call addr
}
return 0;
}
int CallTab() //Tab选怪键 For 117
{
DWORD addr=0x0045BF80;
__asm
{
mov eax,0x008FC85C
mov eax,[eax]
mov eax,[eax+0x1C]
mov ecx,[eax+0x24]
push 0
call addr
}
return 0;
}
int KuaiJie(LPVOID lParam) //1~0 分别对应 0~9 For 117
{
paramdata * lp;
lp=(paramdata *)lParam;
DWORD lp1=lp->param1;
__asm
{
mov eax,0x008FC85C
mov eax,[eax]
mov eax,[eax+0x1C]
mov eax,[eax+0x24]
mov eax,[eax+0x8E8]
mov eax,[eax+0xC]
mov edx,lp1
mov eax,[eax+edx*4]
mov edx,[eax]
mov ecx,eax
mov eax,[edx+0x8]
call eax
}
return 0;
}
int KuaiJieF(LPVOID lParam) //F1~F8 分别对应 0~7 For 117
{
paramdata * lp;
lp=(paramdata *)lParam;
DWORD lp1=lp->param1;
__asm
{
mov eax,0x008FC85C
mov eax,[eax]
mov eax,[eax+0x1C]
mov eax,[eax+0x24]
mov eax,[eax+0x8F4]
mov eax,[eax+0xC]
mov edx,lp1
mov eax,[eax+edx*4]
mov edx,[eax]
mov ecx,eax
mov eax,[edx+0x8]
call eax
}
return 0;
}
int Sit(LPVOID lParam) //打坐 For 117
{
DWORD addr=0x005A3710;
paramdata * lp;
lp=(paramdata *)lParam;
__asm
{
call addr
}
return 0;
}
int UnSit(LPVOID lParam) //取消打坐 For 117
{
DWORD addr=0x005A36D0;
paramdata * lp;
lp=(paramdata *)lParam;
__asm
{
call addr
}
return 0;
}
int DeadBack(LPVOID lParam) //死亡回城 For 117
{
DWORD addr=0x005A34B0;
paramdata * lp;
lp=(paramdata *)lParam;
__asm
{
call addr
}
return 0;
}
int PickUp(LPVOID lParam) //捡物 For 117
{
DWORD addr=0x005A30D0; //0x00578C70;
paramdata * lp;
lp=(paramdata *)lParam;
DWORD lp1=(DWORD)lp->param3;
DWORD lp2=(DWORD)lp->param4;
__asm
{
pushad
// mov ecx,0x8FC85C
&
上一个:急求c++课件设计
下一个:编写程序 ATM的模拟 C++