Показать сообщение отдельно
Старый 01.12.2007, 07:01   #3
Новичок
 
Регистрация: 30.11.2007
Сообщений: 3
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
Mavr
По умолчанию

Может у кого нибуть есть такой модуль или похожий? А то сам чет засыпался :)

Добавлено спустя 11 часов 7 минут 37 секунд:
Re: L2PacketHack через проксификатор
Собственно вот, что у меня получилось:
Код:
procedure ServerListen(PSock: Pointer);
var
  NewSocket: TSocket;
  i: byte;
  Socks5Data: array[0..255] of char;
  ClientQuery: record
     VER: char;
     CMD: char;
     RSV: char;
     ATYP: char;
     DST_ADDR: array[0..3]of char;
     DST_PORT: array[0..1]of char;
  end;
  TransferCount: Word;
  CurentPort: Word; //Текущий порт
  CurentIP: Integer; //Текущий IP
begin
try
  while NoServer do Sleep(1);
  if not InitSocket(SLSock,ntohs(LPortConst),'0.0.0.0') then begin
    L2PacketHackMain.ListBox3.Lines.Add('Неудалось зарегистрировать локальный сервер на порте '+IntToStr(ntohs(LPortConst))+sLineBreak+'Возможно этот порт занят другим приложением');
    EndThread(0);
  end;
  while WaitClient(SLSock,NewSocket) do for i:=0 to MaxThr-1 do if Thread[i].NoUsed then begin
    //Начало обработки SOСKS 5 протокола
    //Получаем |VER | NMETHODS | METHODS | от клиента
    TransferCount := recv(NewSocket, Socks5Data, 255, 0);
    //Отправляем |VER | METHOD | клиенту
    Socks5Data[1]:=#$00;
    TransferCount:=send(NewSocket,Socks5Data,2,0);
    //Получем |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT | -> CMD = CONNECT
    TransferCount := recv(NewSocket, Socks5Data, 255, 0);
    Move(Socks5Data[0], ClientQuery, TransferCount);
    //Забираем ИП и Порт
    Move(ClientQuery.DST_ADDR[0], CurentIP, 4);
    Move(ClientQuery.DST_PORT[0], CurentPort, 2);
    //Отправляем |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT | -> REP = #$00 успешный
    Socks5Data[1]:=#$00;
    Socks5Data[2]:=#$00;
    TransferCount:=send(NewSocket,Socks5Data,TransferCount,0);
    //Обработка SOСKS 5 протокола завершена
   if Lib=0 then begin
       Thread[i].xorS:=L2Xor.Create;
       Thread[i].xorC:=L2Xor.Create;
    end else begin
       CreateXor(@Thread[i].xorS);
       CreateXor(@Thread[i].xorC);
    end;
    Thread[i].Connect:=False;
    Thread[i].IP:=CurentIP;
    Thread[i].Port:=CurentPort;
    Thread[i].InitXOR:=False;
    Thread[i].SSock:=NewSocket;
    Thread[i].Dump.Clear;
    Thread[i].SH:=BeginThread(nil, 0, @Server, Pointer(i), 0, Thread[i].STH);
    L2PacketHackMain.ListBox3.Lines.Add('Создано новое соединение - '+IntToStr(i));
    Break;
  end;
 finally
  DeInitSocket(SLSock);
 end;
end;
Это только одна процедурка ServerListen в ней ИП и Порт сервера берется не с инжекта, а с протокола SOCKS 5, в остальном нужно убрать из прогаммы инжект. Не судите строго, написано на скорую руку и разумеется это все можно сделать посимпатичнее хотя сам принцип остается. Да и если вопрос не актуален для народа, то темку можно в треш :)
Mavr вне форума   Ответить с цитированием