⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas.~1~

📁 投名状 脱机登入源码 游戏更新 delphi开发 想搞脱机登入的可以
💻 ~1~
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets, ScktComp, ComCtrls;

type
  TForm1 = class(TForm)
    grp1: TGroupBox;
    mmo1: TMemo;
    btn1: TButton;
    grp2: TGroupBox;
    mmoLoginInfo: TMemo;
    clntsckt1: TClientSocket;
    StatusBar: TStatusBar;
    lbl4: TLabel;
    btn3: TButton;
    btn5: TButton;
    clntsckt2: TClientSocket;
    procedure btn1Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure clntsckt1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure clntsckt1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure btn5Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure clntsckt2Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
       
var
  Form1: TForm1;
  hown:Integer;

implementation

uses
  Unit2;

{$R *.dfm}


procedure TForm1.btn1Click(Sender: TObject);
var
  i:Integer;
  s:string;
begin
  MakeTable;
  mmo1.Lines.Add('==========================================================');
  for i:=0 to 1055 do
  begin
    if (i mod 16 =0) and (i<>0) then
      begin
        mmo1.Lines.Add(s);
        s:='';
        s:=s+IntToHex(Integer(RecvCipherTable[i]),2)+' ';
      end else
      begin
        s:=s+IntToHex(Integer(RecvCipherTable[i]),2)+' ';
      end;
  end;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  hown:=1;
  MakeTable;
  mmoLoginInfo.Lines.Add('·密钥表创建完毕!');
  clntsckt1.Open;
end;

procedure TForm1.clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  i:integer;
  bufRecv:array of Char;
  nLen:integer;
  sOutPut:string;
  LoginBuf:array [0..135] of Char;
  SendBuf:array[0..1024] of Char;
  GameIP:string;
begin
  nLen:=Socket.ReceiveLength;                                   //得到一个包的长度
  SetLength(bufRecv,nLen);                                      //为接收器设置大小
  Socket.ReceiveBuf(bufRecv[0],nLen);                           //得到一个包
  mmoLoginInfo.Lines.Add('·得到一个包,大小为:'+ IntToStr(nLen));
  Decrypt(bufRecv[0],nLen);                                     //解密
  PackageID:=ord(bufRecv[3])*256+ord(bufRecv[2]);               //得到包的类别
  if PackageID=$0423 then
  begin
    CopyMemory(@FirstPackage,@bufRecv[0],nLen);
    //输出一个解密
    for i:=0 to nLen-1 do sOutPut:=sOutPut+inttohex(ord(bufRecv[i]),2)+' ';
    mmoLoginInfo.Lines.Add('·接到服务器数据:'+ sOutPut);

    //输出一个解密
    sOutPut:='';
    for i:=0 to nLen-1 do sOutPut:=IntToHex(FirstPackage.Packed_Data,2);
    mmoLoginInfo.Lines.Add('·随机种子数为:'+ sOutPut);
    //为KEY生成一个随机参数
    CreateKEYVa;

    mmoLoginInfo.Lines.Add('·建立KEY的随机参数!');

    //生成最后的KEY
    MakeKEY;
    mmoLoginInfo.Lines.Add('·生成最后的KEY!');

    //建立密码
    LoginPackage.Packed_Pass:='wygailf66390';
    //加密密码
    MakePass;

    //建立登录包
    LoginPackage.Packed_Len:=$0088;
    LoginPackage.Packed_Class:=$0442;
    LoginPackage.Packed_Data:=$00000005;
    LoginPackage.Packed_Name:='wygailf66390';
    LoginPackage.Packed_ServerName:='湖北一区';
    LoginPackage.Packed_ServerNumber:='1162';
    
    //加密发送包
    Encrypt(LoginPackage,136);
    mmoLoginInfo.Lines.Add('·第一次发送包(登陆包)!');
    clntsckt1.Socket.SendBuf(LoginPackage,136);
  end;

  if PackageID=$041F then
  begin
    CopyMemory(@SecondPackage,@bufRecv[0],52);
    mmoLoginInfo.Lines.Add('·重定向服务器地址:'+secondpackage.Packed_Info);
    mmoLoginInfo.Lines.Add('·重定向服务器端口:'+inttostr(SecondPackage.Packed_Data3));
    SendSecondPackage.packed_Len:=$001C;
    SendSecondPackage.packed_class:=$041C;
    SendSecondPackage.packed_Data1:=SecondPackage.Packed_Data1;
    SendSecondPackage.packed_Data2:=SecondPackage.Packed_Data2;
    SendSecondPackage.packed_Data3:=$00303531;
    SendSecondPackage.packed_Data4:='0';
    Encrypt(SendSecondPackage,$1C);
    mmoLoginInfo.Lines.Add('·第二次发送包!');
    RecvCipherTable:='';
    CopyMemory(@RecvCipherTable[0],@SendmCipherTable[0],1055);
    clntsckt2.Socket.SendBuf(SendSecondPackage,$1c);
  end;
end;

procedure TForm1.clntsckt1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  mmoLoginInfo.Lines.Add('·已经连接到帐号服务器 '+ Socket.RemoteHost);
end;

procedure TForm1.clntsckt1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  mmoLoginInfo.Lines.Add('·正在连接到帐号服务器... '+ Socket.RemoteHost);
end;

procedure TForm1.clntsckt1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  mmoLoginInfo.Lines.Add('·已经断开与 '+ Socket.RemoteHost +' 的连接');
end;

procedure TForm1.btn5Click(Sender: TObject);
begin
  clntsckt1.Close;
  
end;

procedure TForm1.btn4Click(Sender: TObject);
var
  n:integer;
begin
  n:=Rand();
  mmo1.Lines.Add(IntToStr(n));
end;

procedure TForm1.clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ShowMessage('出错。');
end;

procedure TForm1.clntsckt2Read(Sender: TObject; Socket: TCustomWinSocket);
var
  i:integer;
  bufRecv:array of Char;
  nLen:integer;
  sOutPut:string;
  LoginBuf:array [0..135] of Char;
  SendBuf:array[0..1024] of Char;
  GameIP:string;
begin
    hown:=hown+1;
    mmo1.Lines.Add(IntToStr(hown));
    nLen:=Socket.ReceiveLength;                                   //得到一个包的长度
    SetLength(bufRecv,nLen);                                      //为接收器设置大小
    Socket.ReceiveBuf(bufRecv[0],nLen);                           //得到一个包
    mmoLoginInfo.Lines.Add('·得到一个包,大小为:'+ IntToStr(nLen));
    Decrypt(bufRecv[0],nLen);                                     //解密

  PackageID:=ord(bufRecv[3])*256+ord(bufRecv[2]);               //得到包的类别

 //下面注释掉的请自己添加修改相应的封包结构。
//  if PackageID=标识 then
//  begin
//    sendbuf:='';
//    sendbuf:='数据';
//    Encrypt(sendbuf,大小);
//    clntsckt2.Socket.SendBuf(Sendbuf,大小);
//  end;

end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -