b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

delphi外挂制作(转)

电脑杂谈  发布时间:2019-08-29 21:04:04  来源:网络整理

万挂作坊4.x破解版_我的世界丛森神殿代码大全手机版_迅雷极速版离线破解

在几年前我看见对方玩网络网游用上了外挂,做为程序员的我心中简直是不爽,想搞清楚这究竟是怎样回事。就拿了一些来研究,小有经验,拿出来与你们共享,外挂无非就是分几种罢了(依制作难度):

1、动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标、键盘等,使游戏里的人物进行流动以及攻击,最早曾经的“石器”外挂就是这种方法。

2、本地修改式,这种外挂跟传统上的一些游戏修改器没有两样,做这些外挂在编程只应该对内存地址有一点认识以及把握API就可以推动,“精灵”的外挂这是那种方法写成的,它的难点在于找到那个地址码,找地址一般地要借助于别人的软件,有的游戏也有双码校验,正正找出来会非常困难。

3、木马式,这种外挂的目的是帮外挂制作者偷到客户的密码,做这些外挂有必定的难度,需要HOOK或键盘监视技术做底子,才可以完成,它的原理是先首截了客户的账号或密码,然后发到指定邮箱。

4、加速式,这种外挂可以加速游戏的速度。原本我始终以为加速外挂是对于某个游戏而写的,后来看到我这些概念是不对的,所谓加速外挂虽然是设置时钟速率超过加速的目的。

5、封包式,这种外挂是高难度外挂,需要有很强的编程功底才可以写得起来。它的原理是先截取封包,后更改,再转发。这种外挂适用于大多数网络游戏,像WPE及一些网络游戏外挂都是用这些方法写出的,编写这些外挂必须apihook技术,winsock2技术…………

以下就用Delphi实现网络游戏外挂。

1、首先我们要知道现在鼠标的位置(为了好还原以后鼠标的位置)所以我们还要用到API函数GetCursorPos,它的使用方式如下:

BOOL GetCursorPos(

LPPOINT lpPoint // address of structure for cursor position

);

2、我们把鼠标的位置移到要到人物走到的地方,我们还要用到SetCursorPos函数来移动光标位置,它的使用方式如下:

BOOL SetCursorPos(

int X, // horizontal position

int Y // vertical position

);

3、模拟鼠标发出按下和放开的动作,我们要用到mouse_event函数来实现,具休使用方式用下:

VOID mouse_event(

DWORD dwFlags, // flags specifying various motion/click variants

DWORD dx, // horizontal mouse position or position change

DWORD dy, // vertical mouse position or position change

DWORD dwData, // amount of wheel movement

DWORD dwExtraInfo // 32 bits of application-defined information

);

在它的dwFlags处,可用的事件众多如移动MOUSEEVENTF_MOVE,左键按下MOUSEEVENTF_LEFTDOWN,左键放开MOUSEEVENTF_LEFTUP,具体的东东还是查一下MSDN吧~~~~~

好了,有了当时的知识,我们就可以来说说人物移走是怎样实现的了:

getcursorpos(point);

setcursorpos(ranpoint(80,windowX),ranpoint(80,windowY));//ranpoint是个自制的随机坐标函数

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

setcursorpos(point.x,point.y);

看了以下的代码,是不是觉得人物的游走很简单啦~~,举一仿三,还有好多好东东可以用这个方法实现(我早就说过,TMD,这是垃圾外挂的做法,相信了吧~~~),接下来,再说说游戏上面手动攻击的做法吧(必需游戏中伤害支持快捷键的),道理还是一样的,只是用的API不同罢了~~~,这回我们要用到的是keybd_event函数,其用法如下:

VOID keybd_event(

BYTE bVk, // virtual-key code

BYTE bScan, // hardware scan code

DWORD dwFlags, // flags specifying various function options

DWORD dwExtraInfo // additional data associated with keystroke

);

我们需要了解扫描码不可以直接使用,要用数组MapVirtualKey把链表转成扫描码,MapVirtualKey的详细使用方式如下:

UINT MapVirtualKey(

UINT uCode, // virtual-key code or scan code

UINT uMapType // translation to perform

);

好了,比说此快接键是CTRL+A,接下来让我们说说实际代码是怎样写的:

keybd_event(VK_CONTROL,mapvirtualkey(VK_CONTROL,0),0,0);

keybd_event(65,mapvirtualkey(65,0),0,0);

keybd_event(65,mapvirtualkey(65,0),keyeventf_keyup,0);

keybd_event(VK_CONTROL,mapvirtualkey(VK_CONTROL,0),keyeventf_keyup,0);

首先模拟按下了CTRL键,再模拟按下A键,再模拟放开A键,最后放开CTRL键,这就是一个模拟按快捷键的周期。

本地修改式外挂最典型的应用就是在“精灵”游戏里面,因为我在近一年前(“精灵”还在测试阶段),我所在的公司里有很多同事玩“精灵”,于是我看了一下游戏的数据处理方式,发现它所发送到服务器上的信息是存在于内存当中(我看后第一个感受是:修改这些手游和修改的游戏没有多大分别,换句话说就是在他向服务器提交信息之前设置了内存地址就可以了),当时我找到了地址然后更改了内存地址,果然,按我的看法修改了地址,让平台自动提交后,果然顺利了~~~~~,后来“精灵”又改成了双地址校检,内存校检等等,在这里我就不废话了~~~~,OK,我们就来说说这类外挂是怎样制作的:

在做外挂之前我们要对Windows的内存有个详细的了解,而在这里我们所指的存储是指平台的内存偏移量,也就是相对内存,而我们所要对其进行设置,那么我们要对几个Windows API进行认识,OK,跟着例子让我们看清楚这种外挂的制作和API的应用(为了确保网络游戏的正常运行,我就不把找内存地址的方式具体解说了):

1、首先我们要用FindWindow,知道游戏窗口的句柄,因为我们要借助它来得知游戏的运行后所在进程的ID,下面就是FindWindow的用法:

HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name

LPCTSTR lpWindowName // pointer to window name

);

2、我们GetWindowThreadProcessId来受到游戏窗口相对应进程的进程ID,函数用法如下:

DWORD GetWindowThreadProcessId(

HWND hWnd, // handle of window

LPDWORD lpdwProcessId // address of variable for process identifier

);

3、得到游戏进程ID后,接下来的事是要以最高权限开启进程,所用到的变量OpenProcess的详细使用方式如下:

HANDLE OpenProcess(

DWORD dwDesiredAccess, // access flag

BOOL bInheritHandle, // handle inheritance flag

我的世界丛森神殿代码大全手机版_万挂作坊4.x破解版_迅雷极速版离线破解

DWORD dwProcessId // process identifier

);

在dwDesiredAccess之处就是设存取方法的地方万挂作坊4.x破解版,它可设的权限太多,我们在这里使用即使使用PROCESS_ALL_ACCESS 来开启进程就可以,其他的方法我们可以查一下MSDN。

4、打开进程后,我们就可以用函数对存内进行操作,在这里我们即使用到WriteProcessMemory来对内存地址写入数据就能(其他的操作方法比如说:ReadProcessMemory等,我在这里就不一一介绍了),我们看一下WriteProcessMemory的用法:

BOOL WriteProcessMemory(

HANDLE hProcess, // handle to process whose memory is written to

LPVOID lpBaseAddress, // address to start writing to

LPVOID lpBuffer, // pointer to buffer to write data to

DWORD nSize, // number of bytes to write

LPDWORD lpNumberOfBytesWritten // actual number of bytes written

);

5、下面用CloseHandle关闭进程句柄就完成了。

这就是这类游戏外挂的程序实现部分的方式,好了,有了此方式,我们就有了理性的了解,我们说说实际事例,提升一下我们的感性认识吧,下面就是XX游戏的外挂代码,我们照下面的方式对应去研究一下吧:

const

ResourceOffset: dword = $004219F4;

resource: dword = 3113226621;

ResourceOffset1: dword = $004219F8;

resource1: dword = 1940000000;

ResourceOffset2: dword = $0043FA50;

resource2: dword = 1280185;

ResourceOffset3: dword = $0043FA54;

resource3: dword = 3163064576;

ResourceOffset4: dword = $0043FA58;

resource4: dword = 2298478592;

var

hw: HWND;

pid: dword;

h: THandle;

tt: Cardinal;

begin

hw := FindWindow('XX', nil);

if hw = 0 then

Exit;

GetWindowThreadProcessId(hw, @pid);

h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);

if h = 0 then

Exit;

if flatcheckbox1.Checked=true then

begin

WriteProcessMemory(h, Pointer(ResourceOffset), @Resource, sizeof(Resource), tt);

WriteProcessMemory(h, Pointer(ResourceOffset1), @Resource1, sizeof(Resource1), tt);

end;

if flatcheckbox2.Checked=true then

begin

WriteProcessMemory(h, Pointer(ResourceOffset2), @Resource2, sizeof(Resource2), tt);


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121012-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...