Wieso kann man Apps cracken?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Man kann das "Disassemblieren".

Ein Assembler ist die niedrigste Art Programme zu schreiben. Man schreibt da direkt Maschinensprache, also die Codes die die CPU steuern und deren Parameter. Anstatt reiner numerischer Werte werden Kürzel aus Buchstaben verwendet damit der Mensch das leichter lesen kann. Außerdem werden dann Parameter passend um- oder ausgerechnet.

Das lässt sich sehr leicht rückgängig machen, der Disassembler braucht nur die Zahlen wieder in die Buchstabencodes zurück verwandeln.

Einfaches Beispiel wie so was aussieht (bei 8-Bit computern aus den 1970ern/80ern):

loop:
    LDA #15
    ADD #03
    JMP loop

LDA bedeutet "Lade Den Akku", also schreibe eine Zahl ins Arbeitsregister, hier 15.

ADD bedeutet Addieren, hier wird eine 3 zum Arbeitsregister hinzu addiert.

JMP ist der Sprungbefehl (Jump) und da muss man normalerweise sagen wie weit oder an welche Adresse. Dem Assembler kann man "Labels" geben und der rechnet dann selber aus welchen Parameterwert der dem JMP Befehl mit geben muss.

Man kann mit einem Debugger den Maschinencode laufen lassen und sich auf dem Bildschirm das Dissassembly angucken und da drin wird angezeigt was das Programm gerade macht.

Das Programm wird irgendwo prüfen ob bezahlt wurde oder nicht. Dementsprechend springt (JMP Befehl) das irgendwo hin oder nicht. Das Programm muss sich irgendwo merken und das erste mal irgendwie feststellen ob bezahlt wurde. Die Stelle muss man finden.

Wenn online geprüft wird, guckt man mit einem Netzwerkmonitor Programm was die App da ins Internet schreibt um nach zu fragen. Diese Zahlenkombination kann man dann im Speicher suchen. Hat man die gefunden weiß man genau wo die steht. Jetzt sucht man nach befehlen die diese Speicheradresse benutzen. Dadurch weiß man die Stelle im programm wo geprüft wurde und da schaut man dann nach ob da irgendwo etwas in eine Datei geschrieben wird (App merkt sich "bezahlt") oder wohin nach Ablauf des Programmteils gesprungen wird. Dann kann man den Prüfvorgang einfach "Kurzschließen" in dem man am Anfang einfach einen Sprungbefehl setzt, also irgendeinen Befehl überschreibt dass das Programm sofort an die Stelle "Merken dass bezahlt wurde" hin springt.

So merkt sich das Programm sofort nach dem Start, dass es bezahlt wurde ohne das zu prüfen. Alle weiteren Funktionen des Programms glauben dann, dass bezahlt wurde, da braucht man gar nichts dran machen.

Woher ich das weiß:Berufserfahrung

verreisterNutzer  29.07.2023, 23:06

Danke für deine sehr ausführlich Antworten.

2

Gibt's Unterschiedliche Methoden.

Zum einen kann man versuchen den Server der die Mikrotransaktionen verifiziert lokal zu Simulieren. Also dass wenn du was kaufst, die Anfrage nicht zu Google Play geht, sondern zu einem andren Programm wo du nichts bezahlen musst.

Eine Andere möglichkeit ist das Spiel selbst zu modifizieren, so dass es gar nicht versucht mit dem Server zu kommunizieren.


verreisterNutzer  29.07.2023, 22:53
Zum einen kann man versuchen den Server der die Mikrotransaktionen verifiziert lokal zu Simulieren. Also dass wenn du was kaufst, die Anfrage nicht zu Google Play geht, sondern zu einem andren Programm wo du nichts bezahlen musst

Jep, so funktioniert das ja zum Beispiel bei Lucky Patcher.

Eine Andere möglichkeit ist das Spiel selbst zu modifizieren, so dass es gar nicht versucht mit dem Server zu kommunizieren.

Ja, nur wie habe ich immer noch nicht so ganz verstanden, aber es ist mir jetzt etwas klarer.

1

Software muss ja auf deinem PC laufen, deswegen muss sie ja in irgendeiner Form lesbare Instruktionen enthalten. Diese sind zwar schwer für einen Menschen lesbar, aber trotzdem bleiben sie lesbar.

Mit sehr viel Zeit kann man praktisch das Programm wieder zusammensetzen. Zwar nicht in seiner ursprünglichen Form, aber nah dran.

Und dann kannst du das auch modifizieren. Der Code für deine Ingame-Käufe (solang wir über Offline-Spiele o.ä. reden) ist ja oft einfach drin in der App, und muss nur aktiviert werden.

Woher ich das weiß:Berufserfahrung – Softwareentwicklerin