Es ist: 30.03.2017, 13:33 Hallo, Gast! (AnmeldenRegistrierenSicherer Login)


Antwort schreiben 
HILFE Sentinel HASP Dongle umgehen
08.01.2017, 22:44
Beitrag: #1
HILFE Sentinel HASP Dongle umgehen
Hallo,

ich bin in besitz einer Software welches mittels einem HASP Dongle (USB Dongle) gesichert ist.

Sprich ich kann die Software nur mit dem richigen "USB Stick" welcher als Dongle (key etc) gilt starten/benutzen.

Die Software ist zwar bereits installiert, aber ich kann diese leider nicht starten, aufgrund des fehlenden Dongles.

Meine frage ist es nun ist es möglich das Programm OHNE Dongle zum laufen zu bekommen?

Mir ist bekannt das wenn man den richtigen dongle besitzt diesen auslesen und lokal kopieren kann, leider bin ich nicht im Besitz des richtigen dongles....

Also ist es möglich OHNE Dongle das zum laufen zu bekommen?

p.s würde dafür auch was springen lassen

Vielen Dank

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2017, 12:05 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2017 12:07 von skullteria.)
Beitrag: #2
RE: HILFE Sentinel HASP Dongle umgehen
Kommt drauf an was für Sicherheitsmechanismen verwendet werden...
z.B. encoded code, welcher erst on the fly mit dem richtigen Key decoded wird... Arschkarte.
Wenn du Glück hast ist es so, dass der Dongle lediglich einen normalen Key ersetzt den man eingeben muss. Jetzt musst du dich nur mit dem cracken von software beschäftigen.
Viel Spaß.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.01.2017, 19:35
Beitrag: #3
RE: HILFE Sentinel HASP Dongle umgehen
Okay, denke das mit dem Hasp umgehen wird kläglich scheitern umsonst sichert man seine software damit.....


Accestuner Race von COBB heist das Programm.

Das gabs früher in abgespeckter version 4free, welches ich ebenfalls besitze.
Nur ist dort eine "seriennummer/device Nr" hinterlegt, mit dem man nur Maps/software für dieses "seriennummer/device Nr" schreiben kann.



Ich hab das hier mal bereitgestellt:
http://s000.tinyupload.com/?file_id=0260...7516874768


Das Bild zeigt die Seriennummer für welches "Device" ich die Maps schreiben kann, jedoch müsste ich diese ändern. (auf meine Device Nummer)

[Bild: 29.jpg]

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.01.2017, 11:32
Beitrag: #4
RE: HILFE Sentinel HASP Dongle umgehen
Wenn das Programm scheiße ist und du glück hast, könnte cheat engine funktionieren.
Einfach nach dem Wert im Programm suchen und den Wert auf den neuen umschreiben.
Kompliziertere Angriffe wird wohl niemand hier so auf die schnelle erklären können.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.01.2017, 15:18
Beitrag: #5
RE: HILFE Sentinel HASP Dongle umgehen
Hab jezt probier den Wert zu suchen aber irgendwie durchblicke ich das programm nicht so ganz.

Hat jemand von euch Erfahrung mit dem Umgang von Cheatengine und könnte mir ev kurz helfen ob das möglich wäre?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.01.2017, 11:26
Beitrag: #6
RE: HILFE Sentinel HASP Dongle umgehen
Ich bezweifle dass es sich bei der Serial nur um einen normalen String handelt, daher kann man mit Cheatengine nicht viel machen.

Lad mal das ganze Programmverzeichnis hoch. Das Programm installiert bei mir nicht, da ich die AccessManager Software nicht drauf hab.

Grüße

Gamehacking, Security and Programming
Easysurfer's Blog
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.01.2017, 11:15
Beitrag: #7
RE: HILFE Sentinel HASP Dongle umgehen
Accessport Mannager installed:
http://s000.tinyupload.com/?file_id=3235...7919446126

Accesstuner race installed:
http://s000.tinyupload.com/?file_id=0703...1560625380

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.01.2017, 23:40
Beitrag: #8
RE: HILFE Sentinel HASP Dongle umgehen
Ok, ich werde hier keine Lösung präsentieren sondern Dich motivieren mit RE zu beschäftigen. Ist ein ziemlich hübsches Target (auch wenn die C++ Std calls nerven ...)

Die Analyse des Programms beginnt immer mit IDA Pro. Hier verschafft man sich einen groben Überblick was abgeht. Beim reinladen sticht sofort folgendes ins Auge:
[Bild: c2ac3ca904.png]
Das blaue Oben zeigt die CODE Section an, bzw auch das was IDA als Code identifiziert hat. Alles andere (Braun und Schwarz) sind nicht Daten die IDA nicht zuordnen kann, also quasi wirre Bytes. Das dieser Bereich so groß ist, ist ungewöhnlich. Wo ist der ganze Code des Programms ? Behalten wir das mal im Hinterkopf.

Bei der WinMain geht dein Windows-Programm quasi los. Scrollen wir ein bisschen durch den Code (Der HexRays Decompiler ist hier praktisch) und es finden sich eine Menge "LoadStringA"-Befehle. Diese laden einen String aus einer Ressource in einen Speicherbereich, der im Anschluss zum Anzeigen einer MessageBox übergeben wird. Wichtig ist hier die UID (die StringID), die sich in der Resource-Table befindet. Das Tool ResourceHacker kann diese Strings hübsch darstellen. Dort suchen wir uns die passende StringID raus und kommen so an den String der dargestellt wird. Beispielsweise:
PHP-Code:
LoadStringA(v420x6Cu, &v41256); 
Hier wird der String mit der ID 0x6C in einen Buffer der Größe 256 geladen, 0x6C entspricht 108d . Laut unser Resource-Table also:
[Bild: 0a3cabb387.png]
"ERROR: License file corrupted"

Weiter oben wir auch die License.ini eingelesen (Es wird mit den Flags "rb" geöffnet, für read und binary) und im Anschluss an eine Funktion übergeben. Wenn die fehlschlägt bekommen wir die Fehlermeldungen aus der Resource-Table zu Gesicht. Wenn nicht wird das Programm gestartet.
[Bild: 6b3f0fa1da.png]
So, wo wird die Lizenz jetzt verifiziert ? Der eigentliche Lizenzcheck scheint in der Zeile der Überprüfung mit "License file corrupted" zu stehen. Mhh, hier wird ein Funktionszeiger aufgerufen (Variable v65). Und dieser Funktionszeiger kommt aus einer anderen komischen Funktion:
PHP-Code:
v65 sub_404040(v68"PZX5");
        
v66 sub_404040(v68"X5CC");
        
v69 sub_404040(v68"X5PZ"); 
Hier werden also dynamisch irgendwelche Funktionen geladen die es noch nicht gibt. Und nun ist die Frage woher die kommen. Jetzt denkt man wieder an den Anfang, an die Daten die IDA nicht auslesen konnte. Das passiert oft bei kompremierten oder verschlüsselten Daten, die natürlich keinen Sinn für IDA ergeben. Hier wird also eine weitere Bibliothek zur Laufzeit entpackt/entschlüsselt und geladen. Und in dieser Bibliothek stecken unsere ganzen Lizenzchecks! Verifizieren wir das ganze. Die Funktionen zum dynamischen Laden der Funktionen "PZX5, [...]" haben ein weiteres Argument, v68. Und das wird ein wenig weiter oben geladen.
[Bild: 5c9c279590.png]
Hier werden die übergebenen Bytes geprüft, ob es sich um ein PE File (Windows Executable oder DLL) handelt. Wenn ja, wird die Bibliothek in den Speicher geladen. Uns interessiert garnicht woher diese Daten kommen, ob sie nun dreifach entschlüsselt und dann noch gemischt werden. Wir ziehen einfach all diese Daten aus dem Speicher. Mit dem Debugger breaken wir in der obigen Funktion. Laut IDA müsste sich die zusätzliche Bibliothek in a1 befinden, also ganz oben im Stack bei dem Funktionsaufruf, in dem Fall in [EBP+8]. Und siehe da, wir haben eine schöne Binary im Speicher gefunden.
[Bild: 8f75623a26.png]
Diese wird komplett auf die Festplatte geschrieben und bekommt die Endung DLL.
Beim anschauen der Strings dieser DLL findet man spannende Sachen, wie z.B. "gehu3en7charAka5Decrypt License Failed" oder "Failed to get serial from license file". Hier wird also die Lizenz entschlüsselt und Deine gesuchte Serial ausgelesen. Und auch die Exports von "PZX5, [...]" finden sich in der Export-Table dieser DLL. Die Lizenz-Check Funktion wird mit großer Wahrscheinlichkeit "PZX5" sein.
[Bild: b0c3b98141.png]
Damit ist für heute Schluss, schaue mal ob Du die Schritte bis hierhin nachvollziehen kannst. Wenn ja, lade die gedumpte Bibliothek hier hoch.

Grüße

Gamehacking, Security and Programming
Easysurfer's Blog
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Thank given by |xratzrattillox|, Tom
18.01.2017, 09:19
Beitrag: #9
RE: HILFE Sentinel HASP Dongle umgehen
Hammer ! Erst mal vielen Dank für deine Ausführliche Aufschlüsslung und Mühe.

Aber eine gültige Lizent wäre ja bereits vorhanden bzw das Programm "accestuner race" läuft ja auch einwandfrei, jedoch nur für das eine Device mit der Nummer "V2 03316"

Vielleicht noch eine Beschreibung wie das ganze funktioniert.
Also es gibt ein Device names cobb v2 / v3 welches aus einer Hardware besteht (kleines Kästchen mit usb Anschluss und OBD Anschluss fürs Auto).
Dies dient dazu das man die Files welche man mit "accestuner race/pro" geschrieben hat auf das Fahrzeug flashen/übertragen kann. (dient als Flasher)

Das Device hat eine Seriennummer z.b "V2 03316" nun braucht man halt auch die richtige software "accestuner race/pro" mit der richtigen Device seriennummer, sonst funktioniert die Übertragung von Device auf das Auto nicht. Da wahrscheinlich die Seriennummer in der Map, welche mit der Accestuner race/pro software geschrieben worden ist mit hinterlegt wird und beim Übertragen vom Device Auf das Auto abgefragt wird.)

Besäse man ein funktionierendes "accestuner pro" Software könnte man beim erstellen einer Map am Schluss die Cobb device nr angeben für welches die Map bestimmt sein soll. zb. V2 0154

Btw. Ich besitze leider keine so umfangreichen Kentnisse wie du sie hast, deswegen kann ich leider auch nicht alles nachfolziehen.

Hier noch ein Bild wo die Device Nr im Programm sichtbar ist.
[Bild: 7dmyqxeh.jpg]

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2017, 10:47
Beitrag: #10
RE: HILFE Sentinel HASP Dongle umgehen
[Bild: x32dbg.jpg]

nur wie kann ich wie von dir gezeigte out.dll generieren?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2017, 14:35
Beitrag: #11
RE: HILFE Sentinel HASP Dongle umgehen
Sehr gut dass Du bis hierhin gekommen bist. Die Adresse wo die DLL geladen ist, befindet sich zu dem Zeitpunkt in [ebp+8]. Dieses wird aber in der Zeile
PHP-Code:
mov eaxdword ptr ss:[ebp+8
in das EAX Register kopiert. Das EAX Register siehst Du oben rechts und hat den Wert: 0x01350020 . Darauf machst Du nun Rechtsklick und "Follow In Dump". Dann wird der Speicherbereich dieser Adresse in das linke untere Dumpfenster geladen. Du solltest einen "MZ" Anfang in diesem Fenster sehen, damit hast Du eine PE Binary.

Nun kopierst Du ab dieser Stelle die DLL bis zum Ende dieser Speichersektion (Das Dump-Fenster hört dann irgendwann auf mit runterscrollen). Diese markierten Daten schreibst Du nun über "Binary->Save to File" (oder so ähnlich) auf die Festplatte, sollten ca. 55MB sein. Dieses lädst Du hoch.

Gamehacking, Security and Programming
Easysurfer's Blog
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.01.2017, 10:45 (Dieser Beitrag wurde zuletzt bearbeitet: 22.01.2017 10:46 von Tom.)
Beitrag: #12
RE: HILFE Sentinel HASP Dongle umgehen
[Bild: fw6yz4co.jpg]

ich hab die .dll erfolgreich generriert jedoch hat diese bei mir nur eine größe von 3,42 Mb.


[Bild: ignde79r.jpg]

Fehlt da noch was an daten oder ist das so okay?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2017, 10:22 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2017 11:41 von easysurfer.)
Beitrag: #13
RE: HILFE Sentinel HASP Dongle umgehen
Das sieht gut aus . Meine Section war wohl etwas größer. Man kann es auch genau machen und schauen wie groß die DLL wirklich ist. Diese hat im PE-Header ein Eintrag "SizeOfImage" (in dem Fall an Offset 0x198) mit einer Größe von 0x003BA000 = 3907584 Byte. Also müsste die fertige DLL ca. 3.9MB groß sein.

Lad die dann einfach mal hoch, dann gehts weiter.

EDIT: Ok, geht doch schon weiter. Ich werde Dir eine Möglichkeit zeigen diese LizenzID zu verändern. Allerdings kann ich Dir nicht sagen, ob wir "Tief genug ansetzen" und damit auch die komplette Lizenz auszuhebeln. Es kann z.B sein, dass sich die Lizenznummer sich nur aus einer Prüfsumme der anderen Lizenzdaten berechnet. In dem Fall bringt das Verändern des Werts nicht so viel. Aber musst Du testen, ich hab dazu ja nicht die Möglichkeiten.

Beim Cracken von Programmen sind Debug-Strings oftmals hifreich die richtige Stelle im Code zu finden, ohne dabei groß die Funktionalität bis zu dieser Codestelle nachvollziehen zu müssen. Glücklicherweise ist der Programm voll davon, deswegen suchen wir einfach mal nach: "license":
[Bild: 0c2fdd4ce3.png]
Hier finden wir Strings die darauf hinweisen, dass kurz davor die Lizenz entschlüsselt wurde (gehu3en7charAka5Decrypt License Failed\n), aber auch dass es nicht möglich war die Serial aus den bereits entschlüsselten Lizenzdaten abzurufen (Failed to read serial from license). Letzeres klingt doch gut, schauen wir an wo der String verwendet wird (Rechtsklick -> X-Refs liefert Dir die Referenzen auf diesen String). Er wird nur einmal verwendet, und zwar in der sub_10069EB0. In dieser wird eine Verbindung zur ECU hergestellt und die Device-Infos über die OBD-Verbindung abgerufen (ich hab keine Ahnung von diesen Protokollen, das alles kann man aus den Strings in dieser Methode entnehmen). Im Anschluss wird die "ECU serial number" abgerufen und mit der in der Lizenz hinterlegten Serial-Nummer vergleichen:
[Bild: 1c50f81204.png]
Markiert in Gelb ist hier eine Methode die ich in IDA umbekannt hab, da ich der Meinung bin dass diese die Lizenznummer abruft. Wenn der Rückgabewert der Funktion "false" ist wird in die Fehlermeldung "Fehler beim Auslesen der Serial Nummer aus der Lizenz" gesprungen, daher die Vermutung. Als zweiter Parameter (&v85) wird ein Zeiger auf die 4Byte Integer Variable v85 übergeben. Das macht man in der Regel mit Rückgabewerten, daher wird hier wohl die abgerufene Serial reingespeichert werden sobald die Funktion beendet ist. Die Funktion "ReadSerialFromLicenseQ" befindet sich übrigens an 0x10070150.
[Bild: 800a369632.png]
Die ganzen rosa-markierten Zeilen hatte ich ganz zu beginn des Threads als "nervige std calls" bezeichnet, da sie String-Funktionen der std-Bibliothek darstellen. Diese kann IDA nicht gescheit auflösen und setzt hier die überladenen (und hässligen) Operatoren ein. Das einzige Spannende hier ist for-Schleife die so lange läuft wie die Schleifenvariable i kleiner wie der String in v14 ist. Dabei wird die Variable v8 jeweils mit einem Wert aus einer Funktion (die auch i entgegennimmt) gexoroed , also mehr oder weniger stückweise Entschlüsselt.
Dieser Funktion wird wie oben schon erklärt ein 4 Byte-Zeiger übergeben, der später die Serialnummer enthält. Dieser befindet sich laut IDA an [ebp+8]:
[Bild: 4c3d3e97ef.png]
Nach der Schleife in welcher v8 entschlüsselt wird, befindet sich in dem Rückgabewert noch nichts (die Variable ist mit -1 = 0xFFFFFFFF initialisiert, hat also noch kein Wert). Beim weiter durchsteppen bekommt diese Variable allerdings einen Wert zugewiesen und zwar in dieser Zeile:
PHP-Code:
1007027C E8 BF FF 00 00           call 10080240                           
[Bild: c91a69fa3d.png]
Laut IDA wird da der Inhalt von a1 nach a2 kopiert. Wie genau interessiert uns grade nicht. Im Anschluss hat die Rückgabevariable den Wert:
Code:
v85 = F4 0C 00 21
Die Bytes sind wegen der Endianness in der verkehrten Reihnfolge. Wenn nur die ersten beiden Bytes betrachtet werden ergibt sich: 0xCF4 = 3316d . Hey, das ist doch unsere Serial die beim Programm angezeigt wird ! Was die 0x21 macht weis ich bisher nicht, vielleicht eine Art Versionsnummer (aus dieser wird später noch berechnet ob es eine V2 oder V3 Version ist).
Ändern wir also mal diese Variable im Speicher ab und schauen ob das Programm damit auch läuft. Klassischerweise nehmen wir 1337d = 0x539
[Bild: 41ad9f2ab8.png]
Bingo. Ob das bereits zum Umgehen der Lizenz reicht musst Du sagen, aber denke dass nur diese Prüfnummer mit der ECU Serial Number vergleichen wird.
Versuch das soweit nachzuvollziehen.

Achja, in die geladene DLL kommst Du natürlich nur rein wenn sie vom Programm bereits geladen wurde. Setze also zunächst einen Breakpoint z.B. vor dem Aufruf des Serialchecks an:
PHP-Code:
0040158C FF 55 A8                 call dword ptr ss:[ebp-58]              | 
. Im Anschluss kannst du mit STRG+G zu den oben genannten Adressen gehen, da hier die DLL auf jeden Fall bereits in den Speicher geladen wurde.

Grüße

Gamehacking, Security and Programming
Easysurfer's Blog
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2017, 17:49
Beitrag: #14
RE: HILFE Sentinel HASP Dongle umgehen
Danke. ich werde mich ranhalten und sehen wie weit ich mich durchbweißen kann.
Wird zwar etwas dauern, aber ich gebe bescheid.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  [S] Hilfe beim "Cracken" von Prog easysurfer 23 22.823 13.12.2016 21:22
Letzter Beitrag: Eumel_1
  Porsche Durametric USB (Dongle Protection) Hilfe BlackSky 16 28.128 01.04.2016 17:58
Letzter Beitrag: d7fSMcFi
  Software Protection (PC Guard) Unpacking *Hilfe* BlackSky 17 24.546 28.11.2015 11:37
Letzter Beitrag: hqflash
  Bitte um Hilfe - Programm Staircon freischalten dori22 3 5.168 13.02.2015 22:50
Letzter Beitrag: CRC32
  Hilfe: ProCall 5 cracken caldicot 3 6.106 06.08.2014 16:54
Letzter Beitrag: reverserUser
Thumbs Up Visual Restaurant (Serial JMP) Problem HILFE BlackSky 5 5.447 12.09.2013 11:31
Letzter Beitrag: f00bar
  suche kleine re hilfe GeTTeX 0 2.986 22.07.2013 20:30
Letzter Beitrag: GeTTeX
  Hilfe bei eigenem KeyGenMe. zucker 2 3.631 13.02.2013 00:09
Letzter Beitrag: zucker
  Reversing Hilfe Lopus 10 11.261 15.06.2011 17:01
Letzter Beitrag: Rastajan
  Mal wieder Hilfe beim Patchen easysurfer 6 8.671 11.06.2011 10:29
Letzter Beitrag: easysurfer

Gehe zu:


© Back2Hack.cc | Powered by MyBB | Design by Cwis | Top | RSS | Kontakt