Archive for Apr. 2014

tr4ceflow Crackme/Keygenme 2

2 Tage nach der Veröffentlichung des Keygenme 1 von tr4ceflow gab es Nummer 2 hinterher. Dies war wohl schwieriger und verlangte mehr Geduld. Geduld hat es in der Tat gebraucht, denn bis ich meine Lösung vollständig implementiert hatte vergingen ein paar Stunden.

Aber alles der Reihe nach. Es gibt in diesem Fall 3 Eingabefelder, einmal für den Namen und zwei für die Serial. Nur der Name und die erste Serial hängen zusammen, die zweite Serial wird (bis auf die Länge) nicht vom Usernamen bestimmt.

Fangen wir mit der Analyse an. Ich werde, im Gegensatz zum letzen Artikel, direkt den verschönerten C-Code aus IDA entnehmen und nicht den direkten ASM Code gegenüberstellen. An Anfang wird wieder der Name abgerufen und die Länge des Namens vergleichen. Wenn dieser zwischen 6 und 10 Zeichen lang ist, ist er gültig. Im nächsten Schritt wird eine XORChecksum aus dem Buchstabenindex und dem jeweiligen Buchstaben - 0×30 erzeugt.

usernameLength = GetDlgItemTextA(a1, 40002, usernameString, 200);
  if ( usernameLength - 6 <= 4 )
  {
      currentStringIndex = 0;
      XorChecksum = 0;
      while ( currentStringIndex != strlen(usernameString) - 1 )
      {
        XorChecksum += currentStringIndex ^ (usernameString[currentStringIndex] - 0x30);
        ++currentStringIndex;
      }

Das ist bis hierhin kein Hexenwerk. Weiter geht es mit dem Einlesen der ersten kurzen Serial und dem Vergleich der Länge mit 3 (Code ist zu trivial, daher nicht abgedruckt). Danach folgt der folgende Code der die erste kurze Serial in eine richtige Zahl umwandelt.

Weiterlesen

1 person likes this post.

tr4ceflow Crackme/Keygenme 1

In diesem Artikel geht es um das Crackme/Keygenme 01 von tr4ceflow. Der Crack selbst ist mit einem kleinen Patch getan, aber der Keygen ist anspruchsvoll. Ich selbst habe nicht viel Erfahrung mit Keygenning, zumindest nicht was native Algorithmen angeht. Daher werde ich den Algorithmus, den Code und den Prozess zum Keygen ziemlich ausführlich beschrieben.

Los gehts mit der ersten aufpoppenden Message-Box die es wegzupatchen gilt. Target in Olly laden, starten und nach dem Aufpoppen der Messagebox unterbrechen. Nun im Stacktrace soweit zurückgehen, dass man aus den “System”-DLLs wie Apphelp und USER32 in der eigentlichen Executable landet. In diesem Falle ist das der Stack:

Und die Instructions zu denen dieser RETURN führt:

Wir patchen nur den Call zur Messagebox und die folgende Instruction, nicht das Laden der Argumente auf den Stack. Der hier verwendete Compiler scheint die Argumente nicht direkt per PUSH auf den Stack zu laden, sondern vielmehr den Stackpointer manuell setzen und die Argumente direkt schreiben. Daher muss das SUB ESP,10 ebenfalls entfernt werden. MessageBoxA ruft diese Argumente ab und SUB ESP,10 fixxt den Stack wieder. Da keine Argumente abgerufen werden, muss der Stack auch nicht gefixxt werden.

Weiterlesen

6 people like this post.

Kleiner Artikel, große Wellen

Dies ist mehr ein Nachtrag zum Artikel “Android RE - Quizduell”. In den über 20 Kommentaren hat sich in den letzen vier Monaten viel getan. Es wurden untereinander Tipps zum Recompilen verteilt und Informationen über die API und das Sniffen über HTTPS zusammengetragen. Gerade eben erreichte mich ein weiterer Kommentar zu diesem Artikel, den ich euch nicht vorenthalten möchte. Anscheinend hat jemand die komplette API reversed und ein Bot mit einem Web-Frontend geschrieben:

Hi,
eure Kommentare haben mir wirklich geholfen, ein Interface für die Quizduell-API zu schreiben… das Resultat ist dieser Bot http://quizduellbot.appspot.com :D
Ich werde das API Interface (python) noch auf github hochladen.

Gerade eben hab ich eine Runde gegen diesen Bot gespielt und er funktioniert einwandfrei. Spassig ist es aber nicht die ganze Zeit zu verlieren :D Bin schon gespannt, wann er auf Platz 1 der Ranglisten landet.

Greez Easy

9 people like this post.

NoFuser, Inline Patching und neuer Partner

Hallo zusammen,

in der Blogroll hat sich ein neue neue Verlinkung eingefügt. Der Blog von Tr4ceflow! Er beschäftigt sich mit nativen RE und krazt dabei nicht nur an der Oberfläche, sondern taucht tiefer ein und deckt weiterführende Themen wie Kryptografie ab. Es gibt eh so wenige (deutsche) Blogs, die sich mit solchen Themen befassen, daher bin ich sehr begeistert, dass die Blogpartnerschaft zu Stande gekommen ist. Schaut mal vorbei, es lohnt sich!

Gestern lief mir eine Binary, gepackt mit Confuser 1.9 und so ziemlich allen Protections über den Weg. Der Code war verschlüsselt und nicht in den Methoden zu finden, die ganzen Funktionsaufrufe durch Proxy-Calls geschützt. Also die perfekte Gelegenheit NoFuser auszuprobieren. Und das Resultat war erstaunlich! Der Coder dieses Tools hat meinen vollen Respekt!

Das eigentliche Programm beendete sich sofort nach dem Programmaufruf, deswegen direkt mal zum EntryPoint gesprungen und dort rumgesucht. Nach ein paar Consolenausgaben war ein einzelnen Call zu finden, der direkt zum Ziel führt:

string a = Class3.smethod_2(Class3.smethod_1("c"));
if (a != "105f5cde81c1868f98cf225b10c50f9e")
{
	Environment.Exit(0);
}

Weiterlesen

7 people like this post.