| Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert. |
Diskussion: Anti-Debug im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hallo zusammen, für eine Anwendung (VB6) gehe ich davon ausgehe, dass sie über kurz oder lang manipuliert wird. Da ...
![]() |
| | #1 (permalink) |
| Registriert seit: 29.04.11 ![]() Likes: 0 | Anzeige Hallo zusammen, für eine Anwendung (VB6) gehe ich davon ausgehe, dass sie über kurz oder lang manipuliert wird. Da der Kunde Programmlaufzeit kauft, kann auch erheblicher finanzieller Schaden entstehen. Muss sagen, dass ich nicht so der Spezialist für das Anti-Debugging bin und habe mir folgendes überlegt. In der Startsequenz werden an einigen Stellen die Funktionen IsDebuggerPresent NtQueryInformationProcess aufgerufen. Wird ein Debugger erkannt, erfolgen kleinere Abwehrmassnahmen und das Programm wird beendet. Der Nutzer wird mit seinem Debugger all diese Stellen im Programm bearbeiten und die veränderte manipulierte EXE abspeichern. Der anschliessende Neustart bringt für den Nutzer dann erstmal nichts ungewöhnliches. Die Software ist "normal" nutzbar. Wenn er denn glaubt, er wäre mit seiner Manipulation schon durch, greift irgendwann/irgendwo eine zweite Massnahme, die an mehreren unverfänglichen Programmstellen integriert ist. Es wird eine CRC-Prüfsumme der App.Exe gebildet. Der Vergleichs- oder Sollwert kommt von einem externen Server. Ergibt sich eine Abweichung, wurde die Anwendung manipuliert. Ist dann die Falle zugeschnappt, kann er nicht mehr reagieren und er wird schlimmstenfalls sein Windows neu installieren müssen. Was haltet ihr davon? Ist das ein gangbarer Weg ? Vielen Dank. Gruss |
| | |
| | #2 (permalink) |
| Member of Honour ![]() Registriert seit: 05.03.08 ![]() ![]() ![]() ![]() ![]() Likes: 246 | Security through Obscurity ist kein guter Weg. In deinem Fall beobachte ich als Cracker einfach den Netzwerkstrom bevor und nachdem ich das Programm manipuliert habe und sorge dann dafür, dass "richtige" Werte geschickt werden. Was ist, wenn der Kunde keinen Internetanschluss hat (soll auch vorkommen)? Was meinst du mit " Ist dann die Falle zugeschnappt, kann er nicht mehr reagieren und er wird schlimmstenfalls sein Windows neu installieren müssen."? Willst du den Rechner des Kunden manipulieren? Das ist aus betriebswirtschaftlicher Sicht nicht klug und juristisch wahrscheinlich unverantwortbar. Wenn du deine Software schützen willst, hast du zwei Möglichkeiten, entweder du nutzt bereits vorhanden Schutzmechanismen oder du lagerst einen Teil des Codes auf einen deiner Server aus (gleiches Problem wie oben), sodass du Zugriff auf deiner Hardware kontrollieren kannst. Lesenswert ist evtl: Amazon.com: Surreptitious Software: Obfuscation, Watermarking, and Tamperproofing for Software Protection (9780321549259): Christian Collberg, Jasvir Nagra: Books |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
. Der Gedanke des Programmierers ging wohl in die Richtung, dass der böse Cracker erstmal die Beenderoutine entfernt und das Programm dann nochmal testet und damit in die Falle tapt).In die Rechtmäßigkeit und die damit verbundenen Konsequenzen möchte ich mich gar nicht hineindenken (Anwälte können sehr böse sein und Du müsstest erstmal nachweisen, dass der Geschädigte tatsächlich an dem Programm rumgefummelt hat. Und auch in dem Fall wärest Du imho nicht vor Schadensersatzforderungen sicher). Bezogen auf das obige Werkstätten Programm ergab sich nämlich die Situation, dass der Programmierer zwar an 100% Sicherheit für ehrliche Kunden geglaubt hat, allerdings IMHO 2-3 "Raceconditions" autreten konnten, bei denen auch ehrliche Kunden betroffen wären (z.B ein Fehler oder bloße Verzögerung beim Beenden des Programms, insbesondere auf MultiCore Plattformen wäre durchaus drin, so dass der Löschthread ungehindert walten dürfte). Bei den Checksummen ist es auch schon durchaus vorgekommen (vor allem bei kleineren Shareware), dass der Programmierer nach einem Update diesen Teil vergass und das Programm trotz gültiger Lizenz und OriginalExe sich beendete. Zum Schutz: Prinzipiell dürfte das schon gegen 95% aller Hobbycracker ausreichen. Ob die Anti-Debug API Aufrufe Sinn machen, sei aber dahingestellt Allerdings hat Dein CRC Schutz auch mehrere Schwächen: 1.Was erhoffst Du Dir von einem Onlinecheck? Ich sehe da keinerlei Vorteile gegenüber gespeicherten Checksummen. Zum einen ist Deine Software beim Serverausfall nicht mehr verwendbar (und im schlimmsten Fall greift bei ehrlichen Kunden Dein "WorstcasePlattenlöschSzenario" . Es lassen sich aufjedenfall einige praxisrelevante Fälle konstruieren (die also tatsächlich auftreten können) bei denen es so abläuft).2. Zum anderen wäre ein Memorypatch durch einen Loader fein raus. Ist auch keine Hexerei, sondern bei ExeCrypter/Themida/ASProtect schon länger Realität .Habe zu diesem Thema schon mehrere Beiträge verfasst: Das uncrackbare Programm - ein Ansatz? Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET Reverse Engineering (da ist nicht nur allgemein blabla, sondern auch Vor/Nachteile eines Schutzkonzept sowie eigene Vorschläge, die i.R relativ Programmiersprachenunabhängig sind )Im Prinzip geht es darum, dass jeder Schutz eine Gleichung ist: Aufwand für Programmierer == Schutzfaktor == x*Aufwand für den Cracker (wobei man das x möglichst groß halten möchte) Hat man eine relativ kleine Zielgruppe, reicht schon ein simpler Ansatz aus. Ansonsten fährt man, wie schon von xrayn erwähnt, am besten "bewährte" Schutzsoftware. Die ist zwar auch crackbar, allerdings in 99% aller Fälle um Größenordnungen sicherer (und vor allem ausgetesteter) als eigene Lösungen und letzendlich deutlich günstiger (Lizenzpreis steht in keinem Verhältniss zu Deinem Aufwand, denn Du für einen annährend so guten Schutz betreiben müsstest). Letzendlich reichen nämlich ein paar Anti-Tricks nicht aus und man muss sich ein komplettes Konzept überlegen und Umsetzen. Und dann auch pflegen. Sofern man keine Erfahrung darin hat, macht man da so einige Fehler. Ein Tipp: wenn man Protectoren wie ExeCrypter/Themida nutzt, sollte man sich die Zeit nehmen die Dokumentation dazu zu lesen. Meistens bieten die namenhaften/größeren Protectoren nämlich Einbindungsmöglichkeiten auf Quellcodeebene, die den Schutz deutlich sicherer macht (auch wenn bei VB6 meiner Erfahrung nach Themida/ASProtect/ExeCrypter & Co öfters mal passen müssen )
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| | #4 (permalink) |
| Themenstarter Registriert seit: 29.04.11 ![]() Likes: 0 | Vielen Dank für eure Antworten. Vermutlich ist es so, wie ihr schon sagtet. Der Aufwand für die Realisierung eigener Massnahmen wird wohl zu hoch sein und steht wohl in keinem Verhältnis zum evtl. finanziellen Schaden. Hatte mir deshalb auch schon überlegt, eine Schutzsoftware einzusetzen. Hat natürlich den Nachteil, dass die Performance gewaltig in die Knie geht. Der Code wird ja zur Laufzeit erstmal entschlüsselt und muss anschliessend ja auch noch ausgeführt werden. Also wollte ich eine "Kleine Lösung". Ein paar Massnahmen, mit nicht allzu hohem Aufwand zu realisieren, aber nervig genug, um den Nutzer zur Speicherung der geänderten Exe zu bewegen. Und dann irgendwann und irgendwo, vllt. noch zufallsbedingt gesteuert, erfolgt dieser Prüfsummencheck. Glaube auch nicht, dass er selbst mit Olly, diese Stellen im Programm sofort erkennt und sie eleminieren kann. Meine Überlegung war: Wenn jemand schon einen Debugger nutzt und die Software manipuliert, so hat er schon mal gegen das Agreement (EULA, Nutzungsbedingungen) verstossen und zweitens begeht er eine Straftat (zumindest Ordnungswidrigkeit). Und weil er sich noch gut im OS und Programmierung auskennt und er schon Zeit verbracht hat, die Software zu manipulieren, so sollte er auch noch Zeit haben, sein Windows neu zu installieren. Villeicht reicht es auch schon, Windows einzufrieren, so dass er zum Kaltstart gezwungen wird. Denke aber mal, dass so etwas nicht reicht. Und dann steht noch im Agreement: Für Schäden, die durch Einsatz dieser Software entstehen, wird keine Haftung übernommen. Gruss Und nochmal Danke für eure Antworten |
| | |
| | #5 (permalink) | ||
| Member of Honour ![]() Registriert seit: 05.03.08 ![]() ![]() ![]() ![]() ![]() Likes: 246 | Zitat:
Zitat:
Wenn du in den Kaufvertrag hineinschreibst: "Die Software beinhaltet eine Routine, welche für Datenverlust sorgt und Windows unbrauchbar macht und der Käufer erklärt sich mit dem Risiko einverstanden sämtliche Daten zu verlieren und auf jegliche Schadensansprüche zu verzichten" könntest du vor Gericht damit durchkommen, die Frage ist, ob dann noch jemand deine Software überhaupt kauft. | ||
| | |
| | #6 (permalink) |
| Registriert seit: 27.02.07 ![]() Likes: 2 | Falls das Programm wirklich im alten VB6 programmiert ist, dann gibt es die Möglichkeit es als Pseudocode bzw. P-Code anstelle von Native-Code zu kompilieren. Dabei wird das Ganze als VM implementiert und im Gegensatz zu .NET ist über diese VM nicht wirklich viel bekannt. Das ist jetzt auch kein 100% Schutz, aber P-Code Programme zu debuggen ist ganz schön nervig. Ansonsten lässt sich mit dem CRC32-Plugin für Peid einer Datei eine definierte CRC32-Prüfsumme zuweisen. Dazu werden die letzten Bytes der Datei so verändert, dass es passt. Das finde ich persönlich besser, als eine Onlineüberprüfung. |
| | |
| | #7 (permalink) | ||
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Nur 2 Anmerkungen: Zitat:
Initialisierung und alles, was mit der Lizenzprüfung zu tun hat zu schützen sollte schon ausreichen und da der Codeteil (hoffentlich Zitat:
Zudem Deine Ideen nicht ganz so neu sind - auch "etabiliertere" Protectoren wie z.B Themida (aka xtreme protector) hatten am Anfang einen "paranoiden" Schutz, der bei Debuggerdetection einfach das System neustartete. Insofern sind dann nur, wenn überhaupt, die absoluten Anfänger (und eben im Worstcase die ehrlichen Kunden) betroffen.
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | ||
| | |
| | #8 (permalink) | ||
| Member of Honour ![]() Registriert seit: 02.04.05 ![]() ![]() ![]() Likes: 76 | Zitat:
![]() Es ist auch nicht Notwehr, wenn du einen Angreifer abwehrst, ihn aber dann, wenn er schon schon am Boden liegt, noch weiter in den Magen trittst. Zitat:
Ansonsten hilft dir die Klausel nichts. Ich glaube da liegt noch ein Unterschied im Rechtsgut vor. Du haftest zwar nicht entgeltlich für Datenverlust o.ä. aber sehr wohl für die mutwillige Zerstörung mit Vorsatz. (Aber ich bin kein Jurist und damit keine zuverlässige Rechtsauskunft!) Und zu guter letzt: Software in VB6, welches für Programmlaufzeit berechnet wird? Da klingen bei mir irgnedwie die Abzocker-Alaramglocken, sorry. Normalerweise kenne ich so etwas von großer Industriesoftware und Wartungsverträgen mit 24-Stunden Erreichbarkeit. Aber ein Visual Basic App auf Windows? ![]() Was hat deine Software denn für eine innovative Schöpfungshöhe? Wieviel Leute haben daran gearbeitet und wie lange? Ich hoffe mal, dass keine Firma darauf reinfällt. | ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |