Ĺadny brzuch
Jak w DElphi pobrać:
- liste dysków, które są w systemie
- następnie jak pobrać liste folderów i plików danego dysku
- liste folderow i plików danego folderu
Jak to pobrać w sposób taki, by było później wygodnie przesłać przez protokół TCP?
ad 2 i 3 - FindFirst i FindNext + faDirectory
ad1 type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; {...} procedure TForm1.Button1Click(Sender: TObject); var x,DrvType : Integer; DrvLetter,DrvString : String; begin // 25 pozycji napędów od: a-z for x := Ord('A') to Ord('Z') do begin DrvLetter := Chr(x)+':\'; DrvType := GetDriveType(pChar(DrvLetter)); case DrvType of 0,1 : DrvString := ''; DRIVE_REMOVABLE : DrvString := 'Removable'; DRIVE_FIXED : DrvString := 'Fixed'; DRIVE_REMOTE : DrvString := 'Network'; DRIVE_CDROM : DrvString := 'CD-ROM'; DRIVE_RAMDISK : DrvString := 'RAM disk'; end; if DrvString <> '' then Listbox1.Items.Add(DrvLetter + ' = ' + DrvString); end; end;
Jak w DElphi pobrać:
- liste dysków, które są w systemie
- następnie jak pobrać liste folderów i plików danego dysku
- liste folderow i plików danego folderu
Jak to pobrać w sposób taki, by było później wygodnie przesłać przez protokół TCP?
Czyżby powstawał kolejny hakerski program, który niecnie pobierze informacje o dyskach/folderach/plikach w systemie i wyśle je przez Internet do autora? ;) Przychylam się do propozycji Bełdzia, czyli wykorzystania TSearchRec i FindFirst, FindNext - na pewno znajdziesz w Google'u wszystko, co konieczne (np. http://www.delphibas...Name=TSearchRec. Listę dysków/folderów/plików najlepiej zapisać w TStrings, spakować i przesłać przez TCP/UDP/FTP :)
Czyżby powstawał kolejny hakerski program, który niecnie pobierze informacje o dyskach/folderach/plikach w systemie i wyśle je przez Internet do autora? ;)
Tego, że nie będzie wykrywalny, nie bądź taki pewny. Antywiry i firewalle mają też coś takiego, co nazywa się "heurystyką" i rozpoznaje zagrożenia np. po tym, że program pobiera pewne określone informacje czy próbuje nawiązać połączenie bez wiedzy użytkownika :P
POszukałem na 4p o funkcjad FinFirst i FindNext. Bardzo proste i przyjemne. Chciałem wykorzystać w swoim programie prostą funkcję pokazową by pobrała pliki dysku C. POjawiał się błąd, więc skróciłem funkcję do najrpostszej postaci:
procedure TForm1.Button1Click(Sender: TObject); var  SR : TSearchRec; begin FindFirst('C:\*.*', faAnyFile, SR); end;
NIby wszystko dobrze, ale dalej pojawia się ten sam błąd:
[Error] Unit1.pas(40): E2033 Types of actual and formal var parameters must be identical
Co on oznacza?
Do Kokoszka: Jeszcze nie jest wykrywalny, a potrafi już pobrać podstawowe info o systemie, połączyć się i ukryć się - brak formy i wpisu w menedżerze zadań. Widoczny tylko na liście procesów, pod nazwą svchost, czyli dla przeciętniaka zadanie systemowe.
Użytkownik Kamil Wajda edytował ten post 03 grudzień 2005, 20:11
Skorzystanie z TSearchRec jest troszkę bardziej skomplikowane i wykorzystuje się tu rekurencję :) Po drugie FindFirst jest FUNKCJĄ i zwraca wartość, która wskazuje, czy cokolwiek zostało znalezione :) Ale dla hakera to pikuś :P
http://forum. ks-eksp...34&#entry339834
http://forum.ks-eksp...34&#entry339834
No to żeby nie było już niejasności:
procedure PenetrateDirectory(dir: String; mask: String); var SRec: TSearchRec; i: Integer; begin dir := IncludeTrailingPathDelimiter(dir); i := FindFirst(dir + mask, faAnyfile, SRec); while i = 0 do begin //tu coś robimy ze znalezionymi plikami, np. dodajemy do ListBoksa Form1.ListBox1.Items.Add(dir + SRec.Name); i := FindNext(SRec); end; FindClose(SRec); i := FindFirst(dir + '*', faDirectory, SRec); while i = 0 do begin if (SRec.Attr and faDirectory <> 0) and (SRec.Name <> '.' ) and (SRec.Name <> '..') then PenetrateDirectory(dir + srec.Name, mask); i := FindNext(SRec); end; FindClose(SRec); end;
:P
//EDIT Wywołanie oczywiście najlepiej zrobić wtedy w poniższy sposób:
ListBox1.Items.Clear; ListBox1.Items.BeginUpdate; PenetrateDirectory('C:\', '*.*'); ListBox1.Items.EndUpdate;
Użytkownik Kokoszek edytował ten post 04 grudzień 2005, 00:39
Kokoszek: a po co dwie petle? :o nie lepiej sprawdzacz czy znaleziona pozycja jest katalogiem czy plikiem ? if ((SRec.Attr and faDirectory) <> 0) and (SRec.Name <> '..')
Ano po to, żeby można było stosować maskę :P Jeśli zamiast '*.*' wpiszesz np. '*.html', Twój sposób z jedną pętlą nie znajdzie niczego :o) No, chyba że jakiś plik .html będzie w głównym katalogu :)
Ano po to, żeby można było stosować maskę :P Jeśli zamiast '*.*' wpiszesz np. '*.html', Twój sposób z jedną pętlą nie znajdzie niczego :o) No, chyba że jakiś plik .html będzie w głównym katalogu :)
Porównywanie na własną rękę z maską jest ociupinkę skomplikowane (oczywiście, przy uwzględnianiu wildcards :) ) i prawdopodobnie spowolniłoby całość operacji :) Nigdy tego nie próbowałem, bo już wolę dwie pętle i zero komplikacji - jestem leniwy z natury :P
Dzięki za piękne info, przyda się, ale może ktoś jednak wie, dlaczego miałem taki błąd i co on oznacza? Na 4p pisało że to powinno działać.
Błąd "Types of actual and formal var parameters must be identical" oznacza niezgodność typów przy przekazywaniu do procedury zmiennej. Dlaczego u Ciebie wystąpił, nie mam pojęcia - czy na pewno odnosił się do linii kodu, które przedstawiłeś?
Błąd "Types of actual and formal var parameters must be identical" oznacza niezgodność typów przy przekazywaniu do procedury zmiennej. Dlaczego u Ciebie wystąpił, nie mam pojęcia - czy na pewno odnosił się do linii kodu, które przedstawiłeś?
Po co dodałes type TSearchRec ?? Wywal całą deklarację tego typu - jego deklaracja siedzi w SysUtils.
Po co dodałes type TSearchRec ?? Wywal całą deklarację tego typu - jego deklaracja siedzi w SysUtils.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
- liste dysków, które są w systemie
- następnie jak pobrać liste folderów i plików danego dysku
- liste folderow i plików danego folderu
Jak to pobrać w sposób taki, by było później wygodnie przesłać przez protokół TCP?
ad 2 i 3 - FindFirst i FindNext + faDirectory
ad1 type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; {...} procedure TForm1.Button1Click(Sender: TObject); var x,DrvType : Integer; DrvLetter,DrvString : String; begin // 25 pozycji napędów od: a-z for x := Ord('A') to Ord('Z') do begin DrvLetter := Chr(x)+':\'; DrvType := GetDriveType(pChar(DrvLetter)); case DrvType of 0,1 : DrvString := ''; DRIVE_REMOVABLE : DrvString := 'Removable'; DRIVE_FIXED : DrvString := 'Fixed'; DRIVE_REMOTE : DrvString := 'Network'; DRIVE_CDROM : DrvString := 'CD-ROM'; DRIVE_RAMDISK : DrvString := 'RAM disk'; end; if DrvString <> '' then Listbox1.Items.Add(DrvLetter + ' = ' + DrvString); end; end;
Jak w DElphi pobrać:
- liste dysków, które są w systemie
- następnie jak pobrać liste folderów i plików danego dysku
- liste folderow i plików danego folderu
Jak to pobrać w sposób taki, by było później wygodnie przesłać przez protokół TCP?

Czyżby powstawał kolejny hakerski program, który niecnie pobierze informacje o dyskach/folderach/plikach w systemie i wyśle je przez Internet do autora? ;) Przychylam się do propozycji Bełdzia, czyli wykorzystania TSearchRec i FindFirst, FindNext - na pewno znajdziesz w Google'u wszystko, co konieczne (np. http://www.delphibas...Name=TSearchRec. Listę dysków/folderów/plików najlepiej zapisać w TStrings, spakować i przesłać przez TCP/UDP/FTP :)
Czyżby powstawał kolejny hakerski program, który niecnie pobierze informacje o dyskach/folderach/plikach w systemie i wyśle je przez Internet do autora? ;)

Tego, że nie będzie wykrywalny, nie bądź taki pewny. Antywiry i firewalle mają też coś takiego, co nazywa się "heurystyką" i rozpoznaje zagrożenia np. po tym, że program pobiera pewne określone informacje czy próbuje nawiązać połączenie bez wiedzy użytkownika :P
POszukałem na 4p o funkcjad FinFirst i FindNext. Bardzo proste i przyjemne. Chciałem wykorzystać w swoim programie prostą funkcję pokazową by pobrała pliki dysku C. POjawiał się błąd, więc skróciłem funkcję do najrpostszej postaci:
procedure TForm1.Button1Click(Sender: TObject); var  SR : TSearchRec; begin FindFirst('C:\*.*', faAnyFile, SR); end;
NIby wszystko dobrze, ale dalej pojawia się ten sam błąd:
[Error] Unit1.pas(40): E2033 Types of actual and formal var parameters must be identical
Co on oznacza?
Do Kokoszka: Jeszcze nie jest wykrywalny, a potrafi już pobrać podstawowe info o systemie, połączyć się i ukryć się - brak formy i wpisu w menedżerze zadań. Widoczny tylko na liście procesów, pod nazwą svchost, czyli dla przeciętniaka zadanie systemowe.
Użytkownik Kamil Wajda edytował ten post 03 grudzień 2005, 20:11
Skorzystanie z TSearchRec jest troszkę bardziej skomplikowane i wykorzystuje się tu rekurencję :) Po drugie FindFirst jest FUNKCJĄ i zwraca wartość, która wskazuje, czy cokolwiek zostało znalezione :) Ale dla hakera to pikuś :P
http://forum. ks-eksp...34&#entry339834
http://forum.ks-eksp...34&#entry339834

No to żeby nie było już niejasności:
procedure PenetrateDirectory(dir: String; mask: String); var SRec: TSearchRec; i: Integer; begin dir := IncludeTrailingPathDelimiter(dir); i := FindFirst(dir + mask, faAnyfile, SRec); while i = 0 do begin //tu coś robimy ze znalezionymi plikami, np. dodajemy do ListBoksa Form1.ListBox1.Items.Add(dir + SRec.Name); i := FindNext(SRec); end; FindClose(SRec); i := FindFirst(dir + '*', faDirectory, SRec); while i = 0 do begin if (SRec.Attr and faDirectory <> 0) and (SRec.Name <> '.' ) and (SRec.Name <> '..') then PenetrateDirectory(dir + srec.Name, mask); i := FindNext(SRec); end; FindClose(SRec); end;
:P
//EDIT Wywołanie oczywiście najlepiej zrobić wtedy w poniższy sposób:
ListBox1.Items.Clear; ListBox1.Items.BeginUpdate; PenetrateDirectory('C:\', '*.*'); ListBox1.Items.EndUpdate;
Użytkownik Kokoszek edytował ten post 04 grudzień 2005, 00:39
Kokoszek: a po co dwie petle? :o nie lepiej sprawdzacz czy znaleziona pozycja jest katalogiem czy plikiem ? if ((SRec.Attr and faDirectory) <> 0) and (SRec.Name <> '..')
Ano po to, żeby można było stosować maskę :P Jeśli zamiast '*.*' wpiszesz np. '*.html', Twój sposób z jedną pętlą nie znajdzie niczego :o) No, chyba że jakiś plik .html będzie w głównym katalogu :)
Ano po to, żeby można było stosować maskę :P Jeśli zamiast '*.*' wpiszesz np. '*.html', Twój sposób z jedną pętlą nie znajdzie niczego :o) No, chyba że jakiś plik .html będzie w głównym katalogu :)

Porównywanie na własną rękę z maską jest ociupinkę skomplikowane (oczywiście, przy uwzględnianiu wildcards :) ) i prawdopodobnie spowolniłoby całość operacji :) Nigdy tego nie próbowałem, bo już wolę dwie pętle i zero komplikacji - jestem leniwy z natury :P
Dzięki za piękne info, przyda się, ale może ktoś jednak wie, dlaczego miałem taki błąd i co on oznacza? Na 4p pisało że to powinno działać.
Błąd "Types of actual and formal var parameters must be identical" oznacza niezgodność typów przy przekazywaniu do procedury zmiennej. Dlaczego u Ciebie wystąpił, nie mam pojęcia - czy na pewno odnosił się do linii kodu, które przedstawiłeś?
Błąd "Types of actual and formal var parameters must be identical" oznacza niezgodność typów przy przekazywaniu do procedury zmiennej. Dlaczego u Ciebie wystąpił, nie mam pojęcia - czy na pewno odnosił się do linii kodu, które przedstawiłeś?

Po co dodałes type TSearchRec ?? Wywal całą deklarację tego typu - jego deklaracja siedzi w SysUtils.
Po co dodałes type TSearchRec ?? Wywal całą deklarację tego typu - jego deklaracja siedzi w SysUtils.
