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

delphi外挂制作(转)(3)

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

APIHooK:

由于Windows的把内核提供的功能都封装到API里面,所以你们要推动功能就需要借助API,换句话说就是我们要想捕获数据封包,就需要先要得清楚而且捕获这个API万挂作坊4.x破解版,从API里面得到封包信息。

VXD:

直接借助控制VXD驱动程序来推动封包信息的捕获,不过VXD只能用于win9X。

winsock2:

winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层存储协议无关的高层数据存储编程接口,winsock2是winsock2.0提供的服务提供者接口,但没法在win2000下用。

好了,我们起初进入winsock2封包式编程吧。

在封包编程里面我打算分两个步骤对你们进行详解:1、封包的捕获,2、封包的发送。

首先我们要实现的是封包的捕获:

Delphi的封装的winsock是1.0版的,很自然winsock2就用不成。如果要使用winsock2我们要对winsock2在Delphi里面做一个接口,才可以使用winsock2。

1、如何做winsock2的接口?

1)我们要先定义winsock2.0所用受到的类型,在这里我们以WSA_DATA类型做示范,大家可以举一仿三的来实现winsock2其他类别的封装。

我们要知道WSA_DATA类型会被用于WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer;,大家会看到WSData是引用参数,在传到参数时传的是函数的地址,所以我们对WSA_DATA做下面封装:

const

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

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)我们要从WS2_32.DLL引入winsock2的函数,在此我们只是以WSAStartup为例做函数引入:

function WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer; stdcall;

implementation

const WinSocket2 = 'WS2_32.DLL';

function WSAStartup; external winsocket name 'WSAStartup';

通过以下步骤,我们便可以对winsock2做接口,下面我们就可以用winsock2做封包捕获了,不过首先要有一块网卡。因为涉及到正在运作的网络游戏安全难题,所以我们在这里以IP数据包为例做封包捕获,如果上面的那些数据类型您不是很明白,请您查阅MSDN:

1)我们要起动WSA,这时个要用到的WSAStartup函数,用法如下:

INTEGER WSAStartup(

wVersionRequired: word,

WSData: TWSA_DATA

);

2)使用socket函数得到socket基类,m_hSocket:=Socket(AF_INET, SOCK_RAW, IPPROTO_IP); 用法如下:

INTEGER socket(af: Integer,

Struct: Integer,

protocol: Integer

);

m_hSocket:=Socket(AF_INET, SOCK_RAW, IPPROTO_IP);在程序里m_hSocket为socket基类,AF_INET,SOCK_RAW,IPPROTO_IP均为常量。

3)定义SOCK_ADDR类型,跟据我们的网卡IP给Sock_ADDR类型附值,然后我们使用bind函数来绑定我们的网卡,Bind函数用法如下:

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('192.168.1.1'); //这里你自己的网卡的IP地址,而inet_addr这个变量是winsock2的函数。

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

4)用WSAIoctl来注册WSA的输入输出组件,其用法如下:

INTEGER WSAIoctl(s:INTEGER,

dwIoControlCode : INTEGER,

lpvInBuffer :INTEGER,

cbInBuffer : INTEGER,

lpvOutBuffer : INTEGER,

cbOutBuffer: INTEGER,

lpcbBytesReturned : INTEGER,

lpOverlapped : INTEGER,

lpCompletionRoutine : INTEGER

);

5)下面做死循环,在死循环块里,来实现数据的接收。但是徇环中间要用Sleep()做延时,不然程序会错误。

6)在循环块里,用recv函数来接收数据,recv函数用法如下:

INTEGER recv (s : INTEGER,

buffer:Array[0..4095] of byte,

length : INTEGER,

flags : INTEGER,

);

7)在buffer里就是我们接收过来的数据了,如果我们想要了解数据是哪个地方发来的,那么,我们要定义一定IP包结构,用CopyMemory()把IP信息从buffer里面读起来就可以了,不过读起来的是十六进制的数据应该转换一下。

看了封包捕获的序,对你是不是有点起发,然而在这里要告诉你们的是封包的拿到是很容易的,但是许多游戏的封包都是加密的,如果你想搞清楚所受到的是哪个内容还必须自己进行封包解密。


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

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

    • 苏峻
      苏峻

      那只是商家自己做的决定

    • 方玉
      方玉

      叫兽

    • 贾飞龙
      贾飞龙

      上次阅兵式后领航飞行员就对新闻记者讲述了我们的现状

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