Hook na WinSock'a

Odpowiedz Nowy wątek
Zombiak_zapomial_has
2005-07-28 22:17
Zombiak_zapomial_has
0

Jak mogę załóżyć hooka na winsock, tak abym mógł potem wysyłąć z niego pakiety i sniffowaz przychodzące ? Chce zrobić bota do tibii(taka gra) który by automatyzował pewne czynności. Za odpowiedzi z góry dziękuje :)

Pozostało 580 znaków

2005-07-28 23:38

Rejestracja: 18 lat temu

Ostatnio: 8 lat temu

0

Wejdź na stronę http://madshi.net o ściągnij sobie pakiet madcollection. Masz tam moduł, który zatroszczy się o hookowanie funkcji systemowych w najprostszy chyba sposób. Potem będziesz musiał podmienić funkcje odpowiadające za wysyłanie i odbieranie danych przez winsock, i to w zasadzie tyle.

Pozostało 580 znaków

Zombiak_zapomial_has
2005-08-02 09:31
Zombiak_zapomial_has
0

No ale mam teraz taki problem. Otóż dostalem przykladowy kodzik jak wykozystac madCodeHooka w delphi. NApisałem na jego podstawie takie coś:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Winsock, madCodeHook, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DataSocket: TSocket;
  sendNextHook: function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

implementation

{$R *.dfm}

function HexVal(c : char): byte;
begin
if c = '0' then result :=0;
if c = '1' then result :=1;
if c = '2' then result :=2;
if c = '3' then result :=3;
if c = '4' then result :=4;
if c = '5' then result :=5;
if c = '6' then result :=6;
if c = '7' then result :=7;
if c = '8' then result :=8;
if c = '9' then result :=9;
if (c = 'A') or (c ='a') then result :=10;
if (c = 'B') or (c ='b)') then result :=11;
if (c = 'C') or (c ='c') then result :=12;
if (c = 'D') or (c ='d') then result :=13;
if (c = 'E') or (c ='e') then result :=14;
if (c = 'F') or (c ='f') then result :=15;
end;

function Hex2Int(str :string): byte;
begin
result:=HexVal(str[1])*16+HexVal(str[2]);
end;

function sendHookProc(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
begin
  DataSocket := s;
  Result := sendNextHook(s, Buf, len, flags);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  HookCode(@send, @sendHookProc, @sendNextHook);
end;

procedure Move(Where: Byte);
var Buffer: array [0..2] of Byte;
begin
  Buffer[0] := $01;
  Buffer[1] := $00;
  Buffer[2] := Byte($65 + Where);
  send(DataSocket, Buffer, 3, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
buf: array [0..255] of byte;
i:integer;
begin
//SetLength(buf,Memo1.Lines.Count);
for i:=0 to Memo1.Lines.Count-1 do buf[i]:=Hex2Int(Memo1.Lines[i]);
send(DataSocket,buf,Memo1.Lines.Count,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Move(0);
end;

end.

Ten kod dziaął bez żądnych problemów. Oczywiście forma jest w dll'ce i dll jest injectowany we właściwy sposób. Ale, że wole c++ przepisałem to coś(tzn. jeszcze nie całe).

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include <winsock.h>
#include "madCodeHook.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
SOCKET sock;
int (*sendNextHook)(SOCKET s, const char FAR * buf, int len, int flags);

//---------------------------------------------------------------------------

int sendHookProc(SOCKET s, const char FAR * buf, int len, int flags)
{
sock = s;
return sendNextHook(s,buf,len,flags);
}

__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
sock=0;
HookCode(send,sendHookProc,(PVOID*) &sendNextHook);
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Timer1Timer(TObject *Sender)
{
Caption = "Socket ID:" + IntToStr(sock);
}
//---------------------------------------------------------------------------

Otóż gdy tibia(gra którą hookuje) probóje coś wysłać do internetu to natychmiast się wysypuje. Funkcja z hookiem jest wywaływana, bo można odczytać numer socketa zanim program sie wyłoż. Najgorsze jest to, że nie mam żądnych konkretcnych informacji o błędzie, program sie wykłada i już.

Pozostało 580 znaków

Krtek
2005-08-02 10:03
Krtek
0

Napisz swoje winsock.dll, który będzie udawał oryginalne zapisując to co chcesz gdzies_tam_sobie i odsyłajac potem do kopii oryinalnego dll`a systemowego :PPPPP

Pozostało 580 znaków

Zowmbiak_wiadmomo_co
2005-08-02 12:15
Zowmbiak_wiadmomo_co
0

Dodalem stdcall'e i juz nie wysypuje sie przy wywolywaniu funkcji sendHookProc
JEdnak tibia dalej sie sypie przy wywołaniu funkcji sendNextHook. Po sprawdzeniu go "debugerem babuni :)" (ShowMessage :P) okazuje się, że ta funkcja wskazuje na zerowy adres.

Pozostało 580 znaków

2005-08-09 22:41

Rejestracja: 16 lat temu

Ostatnio: 2 lata temu

0

lol, zasada dzialania tych wszystkich botow to grzebanie w pamieci klienta + wysylanie wiadomosci systemowych do niego. kiedys nawet mialem adres forum programistycznego poswieconego tibii jednak wylecial mi jakos z zakladek w FF.
btw w Tibie nie gram juz dluuuuugo ale cos slyszalem ze po dzisiejszym update boty stana sie bezuzyteczne jezeli chodzi o robienie runek :]

ps jest takze wiele grup zajmujacych sie sprawdzaniem softu do cheatowania, wiec jesli bedziesz sie w taki sposob bawil socketami to Twoj program moze bardzo szybko stac sie glownym podejrzanym o szpiegowanie hasel i uinow graczy

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0