Reversing ist kein Ponyhof – InterCafe RE IV
Manchmal gräbt man alte Projekte wieder aus. Und dieses ist eines dieser, schon zu den Akten gelegter Projekte. Auf die Bitte eines Users hin widmete ich mich ein weiteres Mal diesem Projekt und natürlich gabs noch eine Menge zu entdecken.
Leider ist das Projekt immer noch nicht abgeschlossen, zum aktivieren fehlen mir wohl noch ein paar entscheidende Puzzelteile in dem Aktivierungsschutz von InterCafe 2011. Aber ok, wir knüpfen an wo wir aufgehört haben:
Natürlich war die in Teil 3 beschriebene Theorie mit Serveremulation und 150 Nachrichten zum Aktivieren der Funktionen totaler Mist. Ich Idiot hatte nicht auf die weiteren Nachrichten des Servers geschaut und mich nur auf die RESPONSECHECKREGISTRATION fokusiert. Da hier absolut nichts zur Programmaktivierung gefunden wurde gab ich auf. Doch der Server sendet neben dieser Nachricht weitere Nachrichten raus, u.a. auch eine von mir komplett ignorierte: OK. YOU ARE AUTHORIZED.
MESSAGE SENT: _SET_ENCRYPTION_:XxYJCdBFdE4INcCIJmz2ouMLnvbHoEs2oCZ273QnwcU=|
MESSAGE SENT: _SET_ENCRYPTION_:7rF0i5x7UZXYqxKRoN1X7lhB4RTeFkzij1S+PemnmLs=|
MESSAGE RECIVED: HELLO. PLEASURE TO MEET YOU!>--<2011.4.0.0
MESSAGE SENT: HELLO. PLEASURE TO MEET YOU, TOO!>--<I´M AN INTERCAFE MANAGEMENT SERVER.>--<fa7e7046f2b355_UNIQUEHASH>--<PCNAME>--<1>--<127.0.0.1:8960>--<|
MESSAGE RECIVED: OK. YOU ARE AUTHORIZED.>--<AAEAAAD/////AQAAAAAAAAAMAgAAAEdD...BASE64
>--<False>--<>--<30>--<30>--<30>--<False>--<-999>--<False>--<False
Wenn wir uns dieses “Protokoll” hier anschauen wird schnell klar, dass ein paar interessante Parameter in der OK. YOU ARE AUTHORIZED -
Funktion zu finden sind. Durch den ewig langen Base64-Codierten String sind die restlichen Parameter irgendwie untergegangen. Doch was bewirken diese Parameter jetzt genau? Dazu schauen wir in die ana.a(Object, RL)-Funktion. Diese Funktion kümmert sich um alle eingehenden Servernachrichten und ist übrigens ein guter Punkt um ein Breakpoint zu setzen In der entsprechenden Zuordnung zu der Funktion finden wir:
case 2: al4.i = true; h1.a(strArray[1], strArray[2], strArray[3], strArray[4], strArray[5], strArray[6], strArray[7], strArray[8], strArray[9], strArray[10]); if (al4.j) { al4.h.a.c("REQUESTGETLOGINDATAFORDIALOG" + bj.a + Convert.ToString(false)); } return; |
Die aufgesplitteten Parameter werden also der h1.a-Funktion übergeben! Diese Funktion aktiviert, bzw deaktiviert unser Programm, basierend auf diesen Parametern! Ich gebe zu dass das nur eine weitere Theorie ist, aber bei dieser bin ich mir zu 98% sicher, wie ihr in dem weiteren Verlauf dieses Posts sehen werdet. Also, werfen wir einen Blick in die h1.a-Funktion. Da die Funktion ein wenig zu lang ist poste ich nur die interessanten Abschnitte:
public static void a(string A_0, string A_1, string A_2, string A_3, string A_4, string A_5, string A_6, string A_7, string A_8, string A_9) { try { al4.ab = Convert.ToBoolean(A_1); } catch { al4.ab = false; } al4.aj = ev.h(A_9); // Wandelt den String in ein Boolean um al4.aa = xb.a(A_0) as vh; if (string.IsNullOrEmpty(al4.aa.s())) { al4.x = "DEMOVERSION"; } if (A_5 != "-999") { al4.af = ev.f(A_5); // Wandelt den String in ein Int32 um } // Das selbe erfolgt für andere Al4.XX-Paramter if (if.a().e(if.a.u) != null) { (if.a().e(if.a.u) as aae).e(); } if (al4.a(al4.b.c) && al4.a(vh.i.g)) { arq.i = true; // EC-Karten Modul aktivieren } } |
Also, was haben wir hier? Die Funktion setzt eigentlich nur Werte der Al4-Klasse und diese hat nur nur statische Werte. Al4.ab gibt z.B. an, ob das Datum modifiziert wurde. Je nachdem ob der Wert gesetzt ist oder nicht wird ausgegeben, dass das Datum verändert wurde und man somit das Programm nicht mehr testen kann. Das selbe gilt für die verbleibenden Testtage, wie man in folgendem Codeabschnitt sehr schön sehen kann:
int num5 = al4.ag * -1; this.p.Text = ml.ml_string(4446, "Die Lizenz ist seit [x] Tagen abgelaufen.").Replace("[x]", num5.ToString()); |
Aber damit ist das Programm noch lange nicht aktiviert. Ab hier beginnt das noch unbekannte Puzzelteil. Ihr erinnert euch an den ewig langen Base64-String der ebenfalls als Parameter übergeben wird? Dann schaut euch diese Zeile mal an: al4.aa = xb.a(A_0) as vh. In A_0 befindet sich dieser Base64-codierte String, welcher an eine Funktion übergeben wird. Diese Funktion liefert ein Objekt zurück, welches zu einer VH-Instanz geparsed (geboxed) wird. Diese Funktion decodet den String und füllt mit den Daten eine Instanz der Klasse VH, welche zurückgeliefert wird. Diese Klasse enthält die “wahren” Daten der Aktivierung, beinhaltet die echte Zeit bis zum Demoablauf und gibt (höchstwarscheinlich) auch den Aktivierungsstatus an. Die VH-Klasse besteht aus vielen Daten, welche es jetzt im folgenden zu analysieren und zurückverfolgen gilt. Ein paar Daten ergeben sich aus dem Code, aber ein paar muss man von Hand ändern um Resultate zu sehen. Heißt ein Objekt erstellen, über ein Programm die Klasse in ein Base64-String serialisieren und schließlich diesen String injecten, jedes mal von Hand. Da kommt noch genug Arbeit auf mich zu…
So far
Easy
Andere Artikel zu dieser Serie
- Reversing ist kein Ponyhof – InterCafe RE IV (This post) (November 3, 2024)
- Reversing ist kein Ponyhof – InterCafe RE III (Juni 21, 2011)
- Reversing ist kein Ponyhof - InterCafe RE II (Juni 20, 2011)
- Reversing ist kein Ponyhof - InterCafe RE (Juni 19, 2011)
Ganz abgesehen vom Inhalt möchte ich dir das Plugin EG-Series empfehlen, um solche Post-Serien zu verwalten. Benutze ich u.a. auch in meinem Blog und man braucht nicht ständig manuell die anderen Beiträge (hier Teil 1-3) zu verlinken
Wow, tolles Plugin danke für die Empfehlung!
Ist extremst nützlich, vorallem da ich in Zukunft sicher weitere Serien habe!
Wusste ich es doch
Gleichzeitig zum Plugin werden auch zwei Module für die Sitebar mitgeliefert. Das eine zeigt alle Serien an, das andere zeigt die anderen einzelne Teile der Serien an wenn man sich gerade auf einem Post einer Serie befindet.
MfG
Tolle Serie. Es ist schön zu sehen, dass du vorangekommen bist
Ich hoffe, du wirst das noch vollenden können
Ich hab mir das zwar mal angeguckt, und mein Teamkollege hat einen halbfertigen crack über eine externe DLL fertiggestellt, allerdings ging der Server nicht und er hat das Projekt aufgeben. Aber das das soviel Arbeit ist, hat keiner gedacht
Viel Glück weiterhin,
Jannik