![]() |
ADS Streams auslesen mit BackupRead und ReadBuffer
Ich habe folgende Routine geschrieben, um die Alternate Data Streams auszulesen:
Delphi-Quellcode:
Die Streamnamen kan ich alle auslesen, will ich aber mit ReadFile den Inhalt auslesen, bekomm eich die Fehlermeldung:
function TMpuADS.GetDataStream: WideString;
var hFile : THandle; hADSFile : THandle; BytesRead : DWORD; Context : Pointer; pBuffer : PByte; iLo : DWORD; iHi : DWORD; wcStreamName : array[0..MAX_PATH] of WideChar; StreamName : WideString; ReadBuffer : array of WideChar; begin Context := nil; Result := ''; hFile := CreateFileW(PWideChar(FFilename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_ALWAYS, FILE_FLAG_BACKUP_SEMANTICS, 0); if hFile <> INVALID_HANDLE_VALUE then begin GetMem(pBuffer, 4096); while true do begin if BackupRead(hFile, pBuffer, 20, BytesRead, False, True, Context) then begin if BytesRead > 0 then begin if PWIN32StreamID(pBuffer)^.dwStreamNameSize > 0 then begin if BackupRead(hFile, @(wcStreamName[0]), PWIN32StreamID(pBuffer)^.dwStreamNameSize, BytesRead, False, True, Context) then begin if BytesRead <> PWIN32StreamID(pBuffer)^.dwStreamNameSize then Break else begin if PWIN32StreamID(pBuffer)^.Size > 0 then begin SetString(StreamName, wcStreamName, PWIN32StreamID(pBuffer)^.dwStreamNameSize div 2); StreamName := copy(StreamName, 2, length(StreamName)); StreamName := ':' + copy(StreamName, 1, pos(':', StreamName) - 1); Writeln(StreamName); hADSFile := CreateFileW(PWideChar(FFilename + StreamName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0); if hADSFile <> INVALID_HANDLE_VALUE then begin SetLength(ReadBuffer, PWIN32StreamID(pBuffer)^.Size); if ReadFile(hADSFile, ReadBuffer[0], PWIN32StreamID(pBuffer)^.Size, BytesRead, nil) then Writeln(WideString(ReadBuffer)) else Writeln(SysErrorMessage(GetLastError)); end; end; end; end else Break; end; if PWIN32StreamID(pBuffer)^.Size > 0 then BackupSeek(hFile, high(DWORD), high(DWORD), iLo, iHi, @Context); end else Break; end else Break; end; BackupRead(hFile, pBuffer, 0, BytesRead, True, False, Context); CloseHandle(hFile); FreeMem(pBuffer); end else raise Exception.CreateFmt(rsExceptionTemplate, [GetLastError, SysErrorMessage(GetLastError)]); end; Zitat:
|
Re: ADS Streams auslesen mit BackupRead und ReadBuffer
Hallo :)
Wow also ich muss schon sagen finde es toll das du es geschafft hast diese Routine zu schreiben =) Könnte es vielleicht sein das der Fehler wegen der blöden "Windows File Protection" entsteht? Man bekommt durch sie ja immer fehler wie z.b kann auf den laufenden prozess nicht zugreifen / löschen / etc. Ich hab hier mal einen RegKey rausgesucht wie sich das ganze deaktivieren lässt. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon "SFCDisable"=dword:FFFFFF9D Kann natürlich auch sein das ich da total falsch liege... Hoffe ich konnte dem Problem vielleicht abhilfe verschaffen :) btw: interessiert sich sonst niemand für dieses Thema (ads)(Alternative Data Stream) ? Sehr interessant wie ich zumindest finde. Ausserdem versteckt sich viel bösartige software in diesem ADS Filesystem die im WindowsExplorer und im System somit leider unsichtbar ist. Also lässt sich mit so einer Routine wie sie "Luckie" geschrieben hat auch nach versteckter "SpyWare" suchen ,die man so im System gar nicht wirklich finden würde :) Dank dir nochmal vielmals für deine Großartige Arbeit Luckie ,ich hoffe es findet sich einen Weg um das problem zu lösen ;) |
Re: ADS Streams auslesen mit BackupRead und ReadBuffer
Ich habe das Konzept geändert. Jetzt habe ich allerdings ein anderes Problem, aber dazu morgen mehr. Wenn ich fertig bin hab eich hoffentlich eine Klasse, mit der man Streams nicht nur lesen, sondern auch anhängen und ausführen kann.
Solche Programme zum Auslesen gibt es aber schon, zum Beispiel von Sysinternals und Richard hat hier in der Freewaresparte eins vorgestellt. Ich will allerdings noch etwas weitergehen, siehe oben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz