Дайте исходники простейшего прокси который при запуске был незаметным для пользователя а так же прописывался в авторан
пример каскадирующего проски, он же port mapper как ты представляешь себе незаметность? порт всё равно открывается в любом случае.. Code: #include <windows.h> // НАСТРОЙКА ПАРАМЕТРОВ #define IN_PORT 1111 #define OUT_IP "192.168.0.89" #define OUT_PORT 80 #define MAX_DATA 100 #define MAXCONN 1000 #define IDE_MSG 110 #define WM_ASYNC_CLIENTEVENT WM_USER+1 #define WM_ASYNC_PROXYEVENT WM_USER+10 LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam); void ConnectToProxy(SOCKET); SOCKET hListenSockTCP = INVALID_SOCKET; SOCKADDR_IN myaddrTCP,proxyaddrTCP; char buf[MAX_DATA]; SOCKET sockets[MAXCONN]; HWND hwndMain; int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szCmdLine,int nCmdShow) { WSADATA stWSADataTCPIP; if(WSAStartup(0x0101, &stWSADataTCPIP)) MessageBox(0,"WSAStartup error !","NET ERROR!!!",0); ZeroMemory(sockets,sizeof(sockets)); WNDCLASS wc; memset(&wc,0,sizeof(WNDCLASS)); wc.style = CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS ; wc.lpfnWndProc = (WNDPROC)MainWndProc; wc.hInstance = hInst; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = "CProxy"; wc.lpszMenuName = NULL; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); if (!RegisterClass(&wc)) return 0; hwndMain=CreateWindow("CProxy","ProxyExample", WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZEBOX|WS_CAPTION|WS_BORDER|WS_SYSMENU|WS_THICKFRAME, CW_USEDEFAULT,0,CW_USEDEFAULT,0, NULL, NULL, hInst, NULL); ShowWindow(hwndMain,SW_SHOW); hListenSockTCP = socket (AF_INET,SOCK_STREAM,0); myaddrTCP.sin_family = AF_INET; myaddrTCP.sin_addr.s_addr = htonl (INADDR_ANY); myaddrTCP.sin_port = htons (IN_PORT); if(bind(hListenSockTCP,(LPSOCKADDR)&myaddrTCP, sizeof(struct sockaddr))) { MessageBox(hwndMain,"This port in use!","BIND TCP ERROR!!!",0);} if (listen (hListenSockTCP, 5)) MessageBox(hwndMain,"listen error!","ERROR!!!",0); WSAAsyncSelect (hListenSockTCP,hwndMain,WM_ASYNC_CLIENTEVENT,FD_ACCEPT|FD_READ|FD_CLOSE); MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; return 0; } LRESULT CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { WORD WSAEvent; int i; DWORD currentsock; switch (msg) { case WM_COMMAND: break; case WM_DESTROY: PostQuitMessage(0); // 10xu4yourtime break; case WM_ASYNC_CLIENTEVENT: // Сообщения про события сокетов, подключенных к клиенту... currentsock = wParam; WSAEvent = WSAGETSELECTEVENT (lParam); switch (WSAEvent) { case FD_CLOSE : shutdown(sockets[currentsock],1); closesocket(currentsock); return 0; case FD_READ: // ПЕРЕНАПРАВЛЕНИЕ ДАННЫХ (redirect). Берем от клиента, посылаем на сервер. i=recv(currentsock, buf, MAX_DATA, 0); send(sockets[currentsock], buf, i, 0); // и отправляем... return 0; case FD_ACCEPT: ConnectToProxy(accept(hListenSockTCP,NULL,NULL)); return 0; } break; case WM_ASYNC_PROXYEVENT: // Найдем соответствующий дескриптор. for (i=0;i<MAXCONN;i++) if (sockets[i] == wParam) { currentsock=i; break; } WSAEvent = WSAGETSELECTEVENT (lParam); switch (WSAEvent) { // Произошло подключение к удаленному хосту case FD_CONNECT : i=WSAGETSELECTERROR(lParam); if (i!=0) { shutdown(currentsock,1); closesocket(sockets[currentsock]); sockets[currentsock]=INVALID_SOCKET; } return 0; // Сервер нас отрубает ... case FD_CLOSE : shutdown(currentsock,1); closesocket(sockets[currentsock]); sockets[currentsock]=INVALID_SOCKET; return 0; // Перенаправление данных клиенту case FD_READ: i=recv(sockets[currentsock], buf, MAX_DATA, 0); send(currentsock,buf, i, 0); return 0; } break; } return DefWindowProc(hwnd,msg,wParam,lParam); } // Connect to PROXY Connect to PROXY Connect to PROXY Connect to PROXY Connect to PROXY Connect to PROXY void ConnectToProxy(SOCKET nofsock) { SOCKADDR_IN rmaddr; rmaddr.sin_family = AF_INET; rmaddr.sin_addr.s_addr = inet_addr(OUT_IP); rmaddr.sin_port = htons (OUT_PORT); sockets[nofsock] = socket (AF_INET,SOCK_STREAM,0); if(INVALID_SOCKET == sockets[nofsock]) MessageBox(0,"INVALID_SOCKET","ERROR!!!",0); WSAAsyncSelect (sockets[nofsock],hwndMain,WM_ASYNC_PROXYEVENT, FD_CONNECT|FD_READ|FD_CLOSE); connect (sockets[nofsock], (struct sockaddr *)&rmaddr,sizeof(rmaddr)); return; // Connect OK } (с)http://www.sources.ru/cpp/cpp_simple_proxy.shtml
в этом примере их и нет. не поленись поискать сам =\ в общем-то принцип один и тот же во всех языках.
я в кодинге неособо силён..могу тока малость покрректировать код и всё...так что можете выложить готовый вариант? И ещё я заметил параметр #define OUT_IP "192.168.0.89" ...мне он вобще не нужен поскольку прокси нужно чтоб засунуть его в код трояна
я выложил не готовый? а ты вообще в курсе зачем используется эта директива? =) ну, убери её, добавь переменную.. если "в кодинге не особо силен" писать трояна смысла нет.
так код прокси самого я нашёл...но там сам лог отображается как бы в cmd...дайте кусок кода чтоб сделать приложение невидиимым в дельфи
Code: program dproxy; {$APPTYPE CONSOLE} uses windows, WinSock, StrUtils, SysUtils, uutil in 'uutil.pas'; const pcount = 32; var wsaData : TWSADATA; mainsock : TSocket; client : TSOCKADDR; csock : TSocket; addr : SOCKADDR_IN; Size : integer; bol : boolean; i : integer; a_exit : array of boolean; a_sock : array of TClientEx; a_hndl : array of THandle; function SocksHandlerTreadProc(pParam:pointer):DWORD; stdcall; var s1 : TSocket; j : integer; i : integer; loop : integer; bol : boolean; buf_1: AnsiString; buf : AnsiString; buf_len : integer; p : integer; p2 : integer; p3 : integer; z_s : string; recv_result : integer; DataType : TDataType; Host_str : string; Host_host : string; Host_port : string; zapros_str : string; url : string; remHost : u_long; RemPort : u_short; sa : TSockaddrin; lpMsgBuf : array[0..255] of Char; name : TSockaddr; begin j := integer(pParam); WHILE TRUE DO BEGIN while a_sock[j].Socket=0 do sleep(40); i := sizeof(name); getpeername(a_sock[j].Socket, name, i); a_sock[j].client := LongToIp(name.sin_addr.S_addr); z_s := #13#10; loop := 0; bol := True; buf_1 := ''; buf := ''; buf_len := 1024; DataType := dtGET; while loop=0 do begin inc(loop); while bol do begin setlength(buf_1,buf_len); recv_result := recv(a_sock[j].Socket,buf_1[1],buf_len,0); if recv_result>0 then setlength(buf_1,recv_result) else break; buf := buf + buf_1; p := pos(z_s+z_s,buf); if p<>0 then begin bol := False; break; end; end; if bol then break; buf_1 := lowercase(copy(buf,1,4)); if buf_1<>'get ' then if buf_1='post' then DataType := dtPOST else if buf_1='head' then DataType := dtHEAD else break; p := pos(z_s,buf); zapros_str := copy(buf,1,p-1); delete(buf,1,p+1); p := posex(#32,zapros_str); p3 := p; p2 := posex(#32,zapros_str,p+1); url := copy(zapros_str,p+1,p2-p-1); delete(zapros_str,p,p2-p+1); delete(url,1,7); p := pos('/',url); host_str := copy(url,1,p-1); delete(url,1,p-1); p := pos(':',host_str); if p=0 then begin host_port := '80'; host_host := host_str; end else begin host_host := copy(host_str,1,p-1); host_port := copy(host_str,p+1,length(host_str)); end; insert(#32+url+#32,zapros_str,p3); buf := zapros_str + z_s + buf; remHost := HostToLong(host_host); RemPort := strtoint(host_port); writeln(a_sock[j].client + ' ' + zapros_str); s1 := socket(AF_INET, SOCK_STREAM,0); FillChar(sa,sizeof(sa),0); sa.sin_addr.S_addr := remHost; sa.sin_family := af_inet; sa.sin_port := htons(80); if connect(s1,sa,sizeof(sa))<>SOCKET_ERROR then begin send(s1,buf[1],length(buf),0); bol := True; while bol do begin setlength(buf_1,buf_len); recv_result := recv(s1,buf_1[1],buf_len,0); if recv_result>0 then begin setlength(buf_1,recv_result); send(a_sock[j].Socket,buf_1[1],length(buf_1),0); end else break; end; end; shutdown(s1, SD_BOTH); closesocket(s1); end; shutdown(a_sock[j].Socket, SD_BOTH); closesocket(a_sock[j].Socket); a_sock[j].Socket := 0; END; result := 0; end; begin WSAStartup(MAKEWORD(2,0), wsaData); mainsock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); addr.sin_family := AF_INET; addr.sin_port := htons(8080); addr.sin_addr.s_addr := INADDR_ANY; Size := SizeOf(Client); if (Bind(mainsock,addr,SizeOf(addr))=0) and (Listen(mainsock,$FF)=0) then begin setlength(a_exit,pcount); setlength(a_sock,pcount); setlength(a_hndl,pcount); for i:=0 to pcount-1 do begin a_exit[i] := False; a_sock[i].Socket := 0; fillchar(a_sock[i].Client,buf1len,0); CreateThread(nil,0,@SocksHandlerTreadProc,pointer(i),0,a_hndl[i]); end; while true do begin csock := accept(mainsock, @Client, @Size); bol := True; for i:=0 to pcount-1 do if a_sock[i].Socket=0 then begin bol := False; a_sock[i].Socket := csock; // move(inet_ntoa(Client.sin_addr),a_sock[i].Client,buf1len); break; end; if bol then begin shutdown(csock, SD_BOTH); closesocket(csock); end; end; end; readln; end.
я в делфи в общем-то не силен, могу только порекомендовать удалить всякие writeln и прочие функции вывода в консоль. но видимо тогда будет висеть просто пустая консоль..