![]() |
AW: DEC 5.2 String hashen?
Zitat:
Du lehnst Dich aber sehr weit aus dem Fenster, eine Exe Datei in einem Stringstream zu verarbeiten, grenzt meiner Meinung nach schon an masochismus..... |
AW: DEC 5.2 String hashen?
Zitat:
Filestream wäre da meine Wahl, aber binäre Daten als Zeichenfolge, eher nicht. |
AW: DEC 5.2 String hashen?
Zitat:
ok nur auf die schnelle zum erzeugen einer Hash:
Delphi-Quellcode:
procedure tFileHasher.SchreibeHashWertAnFileEnde(filename: string);
const cChunkSize = 1024 * 1024; // Buffersize 1 MB var f: TFileStream; lFileBytes: TBytes; lHashBytes: TBytes; lHasher: THashMD5; begin f := TFileStream.Create(filename, fmOpenReadWrite); try setlength(lFileBytes, cChunkSize); lHasher.Reset; while f.ReadData(lFileBytes, cChunkSize) > 0 do lHasher.Update(lFileBytes); lHashBytes := lHasher.HashAsBytes; f.Seek(0, soFromEnd); f.WriteData(lHashBytes, Length(lHashBytes)); finally f.Free; end; end; |
AW: DEC 5.2 String hashen?
Ich bedanke mich für die Hilfe aller Beteiligten.
Ich habe mir jetzt eine schöne Unit zusammengebaut, welche (für mich) keine Wünsche offen lässt was die Funktionalität angeht. Ach, Moment. Doch. Einen Wunsch äußert die Unit von sich aus. Er lautet in etwa ... "RÄUM MICH AUF!" :stupid: Ich habe es so einfach gehalten wie möglich (mit eurer Hilfe).
Delphi-Quellcode:
// Selbsttest ausführen
THashFunctions_Selftest.doSelfTest(<Dateiname>); // Hash einer Datei unterjubeln THashFunctions_Selftest.doHashAction(<Dateiname>, <Option XY [Hash ans Ende oder mitten drin]>); |
AW: DEC 5.2 String hashen?
Zitat:
Zitat:
Allgemein kann ich dir zum Thema Anti-Cracking nur sagen, dass dein Programm mit entsprechendem Zeitaufwand wirklich IMMER gecrackt werden kann. Des Weiteren ist es vom Aufwand-/Nutzen Verhältnis her auch immer Blödsinn irgendeine eigene Lösung zu basteln. Nimm fertige Anwendungen wie VMProtect oder Themida, dann wird der Zeitaufwand für jeden 0815 Cracker auf jeden Fall zu hoch (kosten allerdings auch je nach Version eine Kleinigkeit). |
AW: DEC 5.2 String hashen?
Das lohnt sich alles nicht. Ist schließlich Freeware.
Frage: kann man eine simple Abfrage überhaupt "verstecken" oder schleiern oder geht das nicht? |
AW: DEC 5.2 String hashen?
Habe ja auch mal 'ne MD5-Checksummenprüfung für meine Programme gebaut.
Und früher auch mit UPX gepackt. Das kann man kombinieren. Exe erstellen. Mit UPX packen. MD5-Checksumme (oder auch beliebige andere) hinten dran hängen. Zur Prüfung wird ja die EXE-Datei gelesen, die Checksumme ermittelt und mit dem Ende der Datei verglichen. Die Prüfroutine befindet sich nun aber in dem gepackten "Teil" und wird erst nach dem Entpacken beim Start der eigentlichen Exe ausgeführt. Frage: Kann man die Prüfung dann auch "mal eben" wegpatchen? 'ne "somaleben"-Änderung der gepackten Exe kann ich mir jedenfalls nicht vorstellen. Die Änderung müsste dann wohl eher zur Laufzeit im Arbeitsspeicher passieren. Naja, und wenn man dann bei der Checksummenerstellung und -prüfung nicht einfach die gesammte Datei nimmt oder eine nicht handelsübliche Routine nimmt, kann man bei 'ner gepatchten Datei nicht unbedingt so mal eben eine korrekte Checksumme "hintendranhängen". Klar, was man mit UPX packt, kann man auch mit UPX entpacken, dann passt aber die Checksumme nicht mehr und die Prüfung muss man dann aushebeln. Wer will kann also schon dran, nur bis zu welchem Aufwand soll's getrieben werden? |
AW: DEC 5.2 String hashen?
Zitat:
Hast natürlich voll Recht Fritz - ein Hash welcher einer Bytefolge Bytes zuordnet muss auch bei Bytes bleiben. :thumb: Zu deinem Code: Beim Lesen des letzten File Teils, solltest du den Hash nur über die effektiv gelesenen Bytes updaten. [Mit dem momentanen Code hast du cChunkSize - filesize mod cChunkSize Files mit gleichem Wert.] Nebenbei: Wie jemand hier bereits erwähnt hat: GetHashBytesFromFile( filename ) ist in System.Hash bereits definiert. |
AW: DEC 5.2 String hashen?
+1 @Zacherl
Zitat:
Delphi-Quellcode:
schreiben.
if not CheckHashValid then
Message('Ich wurde gehackt'); Sondern wenigstens
Delphi-Quellcode:
if not CheckHashValid then
begin Flag1 := False; Flag2 := False; Flag3 := False; ... Flagn := False; end; ... //Nach unspezifischem Vorgang, z.B. Timer if not Flag1 then TimedCrash1.Start( Time1 ); //Nach unspezifischem Vorgang, z.B. OnHidDeviceArrival if not Flag2 then TimedCrash2.Start( Time2 ); .... Das hat nur zwei Probleme:
Rollo |
AW: DEC 5.2 String hashen?
Was mir auch direkt aufgefallen ist:
Delphi-Quellcode:
Bei dieser Ausgabe wäre der Text "Ich wurde gehackt" sehr nah an der Position von CheckHashValid in der Datei gespeichert.
if not CheckHashValid then
Message('Ich wurde gehackt'); Hast du daher die Flags dazwischen geschrieben und den Timer, damit das weiter auseinander ist? Den Text der MessageBox auszulagern, wäre auch eine tolle Idee. Dann kann man wenigstens nicht mehr direkt danach suchen. Schöner wäre natürlich, wenn der Text der MessageBox irgendwie "verschlüsselt" in der Exe liegt und dieser dann entschlüsselt wird (behaupte ich als Laie einfach mal :stupid: ) Oder man könnte die Texte ja in eine Resourcedatei packen, die dann in die Exe eingebunden wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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