PDA

Просмотр полной версии : L2PacketHack через проксификатор


Mavr
30.11.2007, 05:36
Подскажите пожалуйста как сделать, чтоб L2PacketHack работал через проксификатор, а не через инжект? Да собственно проблемка только в одном: как получить адрес и порт к которому коннектится клиент?

Заранее благодарен.

dmitry501
30.11.2007, 06:18
Можно.
Нужно вместо части, внедряющейся в клиент, написать модуль, реализующий Socks5 сервер.
И тогда любым проксификатором заводить траффик на l2phx

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

Добавлено спустя 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,TransferC ount,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, в остальном нужно убрать из прогаммы инжект. Не судите строго, написано на скорую руку и разумеется это все можно сделать посимпатичнее хотя сам принцип остается. Да и если вопрос не актуален для народа, то темку можно в треш :)