?? netdata.pas
字號(hào):
unit NetData;
{---------無影開發(fā)小組敬告:-------------------}
{ 外掛研究無罪,開放源碼有理! }
{ 希望以此獻(xiàn)給各位想研究外掛的朋友一窺外掛之容 }
{ 本代碼只供研究之用,不得用于非法用途 }
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,GameCode,WinSock2,FilterForm;
type
TFrmNetData = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
GBRecv: TGroupBox;
Edit1: TEdit;
CBSend: TCheckBox;
CBRecv: TCheckBox;
LvRecv: TListView;
BtnSendClear: TButton;
BtnRecvClear: TButton;
TabSheet2: TTabSheet;
GBSend: TGroupBox;
LvSend: TListView;
Label1: TLabel;
EditPN: TEdit;
Edit2: TEdit;
Label2: TLabel;
BtnMySend: TButton;
EdtTagFlag: TEdit;
Label3: TLabel;
CBTagFlag: TCheckBox;
BtnFilter: TButton;
CBwCmd: TCheckBox;
SaveSend: TCheckBox;
SaveRecv: TCheckBox;
Label4: TLabel;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
procedure BtnSendClearClick(Sender: TObject);
procedure BtnMySendClick(Sender: TObject);
procedure BtnRecvClearClick(Sender: TObject);
procedure BtnFilterClick(Sender: TObject);
procedure LvSendSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure LvRecvSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
private
{ Private declarations }
public
procedure AddSendData(buf:PChar;len:Integer);
procedure AddRecvData(buf:PChar;len:Integer;op:Char);
procedure AddPN(PN:byte);
function DataFilter1(data:PChar):Integer;
function DataFilter2(data:PChar):Integer;
function SaveLog(LogStr:string):integer;
{ Public declarations }
end;
function MyWSASend(SendBuf:PChar;SendLen:Integer):Integer;
var
FrmNetData: TFrmNetData;
SendNum:integer;
RecvNum:integer;
GameSocket:TSocket=0;//socket保存
MyPN:char='0'; //send封包序號(hào)標(biāo)記
implementation
{$R *.dfm}
function TFrmNetData.DataFilter1(data:PChar):Integer;
begin
DataFilter1:=0;
if strcomp(PChar(StrToASCII(@data[0],4)),PChar(EdtTagFlag.Text))=0 then
begin
DataFilter1:=1;
end;
end;
//log記錄
function TFrmNetData.SaveLog(LogStr:String):integer;
var
Log:textfile;
begin
assignfile(Log,edit3.Text);
if fileexists(edit3.Text)=false then rewrite(Log)
else append(Log);
Writeln(Log,LogStr);
closefile(Log);
end;
function TFrmNetData.DataFilter2(data:PChar):Integer;
var
i:integer;
Tag:string;
begin
DataFilter2:=1;
Tag:=StrToASCII(@data[4],2);
DBGOut('Tag=%s',[Tag]);
if FrmFilter1.RBOut.Checked=true then
begin
DataFilter2:=1;
for i:=0 to FrmFilter1.LBOut.Items.Count-1 do
begin
if Tag=FrmFilter1.LBOut.Items[i] then
begin
DataFilter2:=0;
exit;
end;
end;
end;
if FrmFilter1.RBIn.Checked=true then
begin
DataFilter2:=0;
for i:=0 to FrmFilter1.LBIn.Items.Count-1 do
begin
if Tag=FrmFilter1.LBIn.Items[i] then
begin
DataFilter2:=1;
exit;
end;
end;
end;
end;
//----------------------------------------------------------
function MyWSASend(Sendbuf:PChar;SendLen:Integer):Integer;
var
Buffers : WSABUF;
NumberOfSent:dword;
begin
Buffers.buf:=Sendbuf;
Buffers.len:=SendLen;
Buffers.buf[0]:='#';
Buffers.buf[1]:=MyPN;
Buffers.buf[SendLen-1]:='!';
MyWSASend:=WSASend(GameSocket,@Buffers,1,NumberOfSent,0,nil,nil);
end;
//----------------------------------------------------------
procedure TFrmNetData.AddPN(PN:byte);
begin
EditPN.Text:=IntToStr(PN);
end;
procedure TFrmNetData.FormCreate(Sender: TObject);
begin
SendNum:=0;
RecvNum:=0;
end;
procedure TFrmNetData.AddSendData(buf:PChar;len:Integer);
var
LogStr:String;
begin
if CBSend.Checked=false then
exit;
//在Send表里添加?xùn)|西
With LvSend.Items.add do
begin
Caption:=IntToStr(SendNum);//添加包序號(hào)
Inc(SendNum);
Subitems.add(StrToASCII(@buf[0],4));//添加dowrd
subitems.add(StrToASCII(@buf[4],2));//添加ctrlword
subitems.add(StrToASCII(@buf[6],2));//添加w1
subitems.add(StrToASCII(@buf[8],2));//添加w2
subitems.add(StrToASCII(@buf[10],2));//添加w3
subitems.Add(PChar(@buf[12]));//添加char
subitems.add(StrToASCII(@buf[12],len-12)); //添加asc char
end;
//保存SEND數(shù)據(jù)
if SaveSend.Checked then
LogStr:=TimeToStr(time)+' '+'Send'+' '+StrToASCII(@buf[0],4)+' '+StrToASCII(@buf[4],2)+' '+StrToASCII(@buf[6],2)+' '+StrToASCII(@buf[8],2)+' '+StrToASCII(@buf[10],2)+' '+PChar(@buf[12])+' '+StrToASCII(@buf[12],len-12);
SaveLog(LogStr);//保存到PACKLOG文件
end;
procedure TFrmNetData.AddRecvData(buf:PChar;len:Integer;op:Char);
var
LogStr:String;
begin
if CBRecv.Checked=false then
exit;
//dwflag過濾
if (CBTagFlag.Checked=true) and (DataFilter1(buf)=0) then
exit;
//wcmd過濾
if (CBwCmd.Checked=true) and (DataFilter2(buf)=0) then
exit;
//在Send表里添加?xùn)|西
if ((op='#') or (op='*')) then
begin
With LvRecv.Items.add do
begin
Caption:=op+IntToStr(RecvNum);//添加包序號(hào)
Inc(RecvNum);
Subitems.add(StrToASCII(@buf[0],4));//添加dowrd
subitems.add(StrToASCII(@buf[4],2));//添加ctrlword
subitems.add(StrToASCII(@buf[6],2));//添加w1
subitems.add(StrToASCII(@buf[8],2));//添加w2
subitems.add(StrToASCII(@buf[10],2));//添加w3
subitems.Add(PChar(@buf[12]));//添加char
subitems.add(StrToASCII(@buf[12],len-12)); //添加asc char
end;
end
else
begin
With LvRecv.Items.add do
begin
Caption:=op+IntToStr(RecvNum);
Inc(RecvNum);
Subitems.add('--');//添加dowrd
subitems.add('--');//添加ctrlword
subitems.add('--');//添加w1
subitems.add('--');//添加w2
subitems.add('--');//添加w3
subitems.add(PChar(@buf[0]));
subitems.add(StrToASCII(@buf[0],len));
end;
end;
//包存RECV數(shù)據(jù)
if SaveRecv.Checked then
LogStr:=TimeToStr(time)+' '+'Recv'+' '+StrToASCII(@buf[0],4)+' '+StrToASCII(@buf[4],2)+' '+StrToASCII(@buf[6],2)+' '+StrToASCII(@buf[8],2)+' '+StrToASCII(@buf[10],2)+' '+PChar(@buf[12])+' '+StrToASCII(@buf[12],len-12);
SaveLog(LogStr); //保存到PACKLOG文件
end;
procedure TFrmNetData.BtnSendClearClick(Sender: TObject);
begin
LvSend.Items.Clear;
end;
procedure TFrmNetData.BtnMySendClick(Sender: TObject);
var
buf:array[0..1000] of char;
Text:array[0..1000] of char;
TLen:Integer;
Len:Integer;
begin
TLen:=(Length(Edit2.Text)) div 2;
buf[0]:='#';
buf[1]:='0';
ASCStrToPChar(Edit2.Text,@Text[0]);
Len:=EncodeA(@Text[0],@buf[2],TLen);
if GameSocket<>0 then
MyWSASend(@buf[0],len+3)
else
ShowMessage('Game socket error!');
end;
procedure TFrmNetData.BtnRecvClearClick(Sender: TObject);
begin
LvRecv.Items.Clear;
end;
procedure TFrmNetData.BtnFilterClick(Sender: TObject);
begin
FrmFilter1.Show;
end;
procedure TFrmNetData.LvSendSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
edit1.Text:=item.subitems.Text;//取得數(shù)據(jù)內(nèi)容
end;
procedure TFrmNetData.LvRecvSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
edit1.Text:=item.subitems.Text;//取得數(shù)據(jù)內(nèi)容
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -