Again and again

Posted by eddy14 - 07/08/09 at 11:08 am

Ich bin momentan ziemlich im Stress.

Die Einschreibungen an der Fachhochschule laufen nicht so gut. Musste 2 mal hinfahren (das sind insgesamt 8 stunden Fahrt, 40€ Kosten, und 4 Stunden in-der-schlange-warten). Beim ersten mal fehlte mir etwas, also erstmal zurückgefahren nach Hause. Und für noch einen Tag frei genommen (vom Praktikumsbetrieb) um am nächsten Tag wieder zur FH zu fahren.

Dort angekommen, wurde mir weiß gemacht, ich müsse erst das Praktikum beenden, um mich dort einschreiben zu können. Auf der Internetseite steht da zwar etwas ganz anderes, aber nungut. Sie tut auch nur ihren Job. Also mache ich noch die nächste Woche über Praktikum, dann habe ich 14 Wochen komplett, und dann wird mir (hoffentlich) die Einschreibung gelingen, sodass ich am 21. September dort “Angewandte Informatik” studieren kann. Falls irgendein Leser hier, sich dort auch eingeschrieben hat: freut euch auf ein Treffen mit mir! :D

Dann gibt es in der FH noch das Institut für Internet Sicherheit. Dort habe ich mal vor etwa einem Jahr, 3 Wochen Praktikum gemacht. Und die sind da alle ziemlich cool. War ziemlich beeindruckt, als ich jemanden dort sah, der eine Präsentation über SQL Injections vorbereitete. Ich selbst durfte nur ein paar Regular Expressions in einem C++ Code abändern (das Programm war eine Art Logger/Honeypot, der keine persönlichen Daten speichert, sondern nur, wie oft versucht wird, auf ein Service zuzugreiffen usw.). Danach hatten die ziemlich coole Diagramme erstellt, und hatten so “Frühwarnsysteme”. Und auch einige Ausdrucke, wann und wie lange große Webseiten wie yahoo, google etc. nicht mehr erreichbar waren. Soweit ich das noch in Erinnerung habe.

Was aber ziemlich lustig ist, sind die Live-Hacking Auftritte von denen. Vor einem (großen?) Publikum wird live vorgeführt, wie Trojaner einen PC übernehmen, oder wie WEP geknackt wird etc. Ziemlich lame. Und auch wenn ich nichts gegen die öffentliche Aufklärungsarbeit habe, scheint mir das alles nur wegen der Famegeilheit und der Steigerung des eigenen Egos zu existieren. Denn wirkliche Informationen wie man soetwas verhindert, scheint da nicht wirklich aufgezeigt werden (soweit ich das bisher gesehen habe!). Okay, aber da sollte ich mich bei einigen Beiträgen erstmal an die eigene Nase fassen :D (hey, ich gebe mir Mühe, die Leute wirklich aufzuklären!)

Immerhin, sieht das nach einer spaßigen Zukunft aus für mich. Und wie angeboren, kreiere ich bereits Ideen, wie ich eines der Live-Hacking Auftritte übernehmen kann, sodass mittendrin in der Show, auf der Leinwand mein Schriftzug erscheint. *augenglänzen*

Ich wünschte, ich könnte euch ein interessanteres Thema bieten, aber leider ist im moment nicht viel mehr drin :S Ich habe bald endlich genug Geld um mir ein Arduino Board zu kaufen. Oder endlich mal Lust wieder Windows zu booten, um mich um Otrkey zu kümmern. Jenachdem gibts dann hier wieder was “interessantes” zu lesen :-) Bis dahin könnt ihr euch die Zeit mit diesem Reverse-Engineering Comic vertreiben, welches ich gerade gefunden habe, und es so ähnlich vorgeht wie ich :)

R.I.P. lil Sandy <- ein Todesfall in nazrek’s Familie. Das tut mir leid für dich man! Alles beste wünsche ich dir!

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.

Hackerethik

Posted by eddy14 - 26/07/09 at 04:07 pm

Hallo Leute,

ich bin vor kurzem auf etwas Interessantes gestoßen. Zufällig fand ich no-copy.org wieder. Die Seite bietet ein Buch (zum kostenlosen lesen, online!) über Cracker und Hacker. Dort fand ich etwas cooles, was sich “Hackerethik.mp3” nennt. Es ist ein kleiner Teil des Buches, als Hörbuch. Ich bekam eine Gänsehaut, weil einige Beschreibungen exakt auf mich zutrafen. Nunja, hört selbst, wenn ihr Zeit habt:

/41yd.de/blog/wp-content/Hackerethik.mp3

Naja, und von mir selbst gibt es wiedermal nicht viel zu erzählen. Ich arbeite gerade an einem weiteren kleinen Dateiformat namens .swl, und danach kümmere ich mich um otrkey. Vielleicht dann noch um Anti-Leech. Falls noch jemand Vorschläge hat, immer raus damit. :)

Ansonsten hätte ich zugern einmal Zugang zu einem von diesen Snack und Cola Automaten, die immer irgendwo rumstehen. Die bieten (alle?) einen RS232 Zugang an, um sie zu programmieren *sabber*

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.

Raubmordkopierer…

Posted by eddy14 - 18/07/09 at 11:07 pm

…ich bin einer! :)

Zumindest behauptet das eine Person, die mich vor einigen Tagen geadded hat. Er hatte eine ziemlich offensichtliche Meinung von mir: ich hätte unmengen an Warez auf meinem Rechner. Kaum überraschend, bei den vielen Blogeinträgen, wo das Wort “Warez” vorkommt.

OK, jeder von uns hat das eine oder andere mal etwas kopiert. Die einen weniger, die anderen täglich hunderte Gigabytes. Über meine Aktivitäten sollte ich nicht viel berichten, da mein momentaner Hoster in Deutschland haust :D

Allerdings wurde mir von der besagten Person gesagt, ich sei ein bösartiger Krimineller. Er hat wohl angenommen, ich sei ein Kiddy, der kopiert was das Zeug hält. Zu geizig um die harte Arbeit von den ganzen Programmierern und Produzenten zu bezahlen. Aber dem ist nicht so.

Ich bin nur ein armer Student. Ja. Ich habe sehr wenig Geld zur Verfügung. Und 60€ für ein Spiel auszugeben, wäre purer Luxus. Ein Luxus, den ich mir trotz allem manchmal gönne. Wieso mache ich mir also die Mühe, das ganze Geld zusammen zu kratzen, wenn ich das Spiel doch auch kostenlos bekommen könnte? Zum einen: Gute Spiele müssen gekauft werden. Anders funktioniert das (heutige) Geschäft nicht. Ohne Geld, läuft selbst bei den größten Firmen nichts. Zum anderen, fehlt das unbeschreibliche Feeling, wenn man ein Original in den Händen hält. Etwas, was wertvoll zu sein scheint. Keine blöden 1en und 0en auf einem Rohling. Nein, Kunst. Jedenfalls denkt man das.

Ja, ich habe mir nicht alle Spiele gekauft, die ich spiele. Mir fehlt häufig das Geld zum Kaufen, deswegen kopiere ich (und jetzt kann keiner behaupten, ich hätte die Firma finanziell geschädigt; ich hätte ihr Spiel sowieso nicht gekauft). Ich möchte auch nicht, dass die Hersteller ihre Spiele billiger machen. Selbst bei 30€ statt 60€ würde ich nicht zuschlagen. Selbst das ist einfach zu viel. Ich habe ganze zwei (!) Monate gebraucht, um 10€ für neue Kopfhörer zu sparen. Ich möchte auch nicht für jedes Spiel (auf das ich locker verzichten könnte) meine Mutter um Geld bitten, da wir sowieso genug Probleme mit Geld haben. Aber häufig ist sie trotz allem sehr großzügig. Deswegen ein Dank an dieser Stelle an meine Mama! :D (könnte sie bloß einen PC bedienen, um mein Blog zu besuchen …)

Allerdings, um dem Argument entgegen zu wirken, ich hätte kein einziges Originalspiel:

Meine Spielesammlung

Meine Spielesammlung

(@ZiuX: Ja richtig bemerkt, ich habe seit Monaten meine Bettwäsche nicht gewechselt, was man an den letzten Blogeinträgen merkt. Aber ich wuschel mich nunmal gerne in meiner eigenen Sauerei :D )

Die Spiele reichen von Gamecube, über XBox, dem PC und dann letzendlich zur Wii. Da gibt es noch die ganzen SNES Spiele, Gameboy Spiele, und original Filme-DVDs die nicht im Bild zu sehen sind (keine Lust gehabt, die jetzt alle zusammen zu suchen). Ja, für einige mag das wenig erscheinen, für die anderen wiederum viel. Ich bin aber nur ein Gelegenheitszocker, und die meisten Games zocken meine jüngeren Brüder :)

Ach nebenbei noch: das FLP Format habe ich vor kurzem auch analysiert. Allerdings denke ich, die Informationen dazu sollte ich nicht veröffentlichen, da nur flp.to das Format nutzt (ist ja auch der spezielle Loader für diese Seite). Ist aber kein so großer Unterschied zu SFT Dateien. Lediglich einige Kleinigkeiten, sowie die Keys sind anders. Wer den Decrypter will, kann mich gerne kontaktieren. Ich kann euch das Programm für nur 1.337€ verkaufen, um mir damit neue Spiele leisten zu können :D (ha, jetzt habt ihr den wahren Sinn dieses Postings erkannt!)

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.

Code makers and breakers (SFT geknackt)

Posted by eddy14 - 10/07/09 at 11:07 am

Nun, wie soll ich anfangen? Soll ich wieder berichten, dass mir langweilig war? Nee, das kommt in jedem Blogpost vor (verdammt, jetzt habe ich es doch getan!).

Als ich gerade damit beschäftigt war die Software von der Firma, bei der ich zurzeit Praktikum mache, etwas sicherer vor Crackern zu machen, fiel mir auf, dass ich nicht so viel Ahnung davon habe. Hm,  Software sicherer machen … hm das kann ich nicht so gut … aber die Sicherheit zu brechen, das macht Spaß!

Software sichern … hm … Ich mein, “sichern” im typischen Sinne kann man es ja nicht einmal. Es liegt in der Natur der Sache, dass ein ausführbares Programm analysierbar bleibt. Nur wie kann man es so erschweren, dass jeder Reverser die Lust verliert?

Auf der Suche nach der Antwort lud ich mir ein paar CrackMe’s runter, um unter dem Vorwand von “Anti Debugging Technik erlernen” etwas bei der Arbeit cracken zu können :D

Acht Stunden und unzählige fertige CrackMe’s später fuhr ich nach Hause … ich war immernoch hungrig nach mehr … mehr hardcore Assembler … mehr Geheimnisse entlüften … mehr Glückgsgefühle … mehr davon. Ich kramte auf meinem USB-Stick rum, und fand eine alte version des SFT-Loaders (“SFT Loader 2006″). Nach meinem letzten Beitrag über DLC, und über RSDF, dachte ich mir, es wäre doch praktisch meine Kenntnisse im Gebiet der Analyse von unbekannten Formaten auszuweiten. Diese SFT Dateien bieten einige Warez-Seiten an. Kennt das überhaupt noch jemand? :D Einige wenige Seiten scheinen das noch anzubieten. Wie auch immer, meinen Spaß hatte ich jedenfalls damit :)

In der SFT Datei sind (verschlüsselt) Host, Username, Passwort, Dateinamen und einige Optionen hinterlegt. Sodass dieses Programm es entschlüsseln, und dann von den FTP-Servern die Dateien herunterladen kann. Das wollte ich unbedingt mal analysieren, sollte doch sicher spaßig werden?

sft-loader-2006

SFT Loader 2006

Gesagt getan. In einer Woche (á 8 Stunden) und noch etwas mehr, war ich fertig. Man, hat das lange gedauert. Ich habe mit einem Aufwand von 1-2 Tagen gerechnet, aber eine Codestelle im Programm hat meinen Kopf gefickt (ja, ich benutze sonst nie diesen Ausdruck, aber dieses Dateiformat hats echt verdient!). Beim reversen wurde mir immer wieder mal schwindelig und ich hielt meinen Kopf fest, damit sich meine Umgebung nicht mehr so merkwürdig bewegt! (und das ist kein Witz!) :D

Nun, das SFT Format ist viel cooler als DLC … nein, nicht sicherer. Sondern etwas komplexer … also spaßiger zu reversen :)

Wer nichts über die Struktur des Formats lernen möchte, der möge das hier überspringen und an das Ende des Artikels springen … dort findet ihr einen SFT Decrypter :) (Ja, ihr könnt mich hassen, dass ich das tue …)

Als aller erstes sollte klar werden, es ist wieder Security-by-Obscurity. Es gibt keinen Weg daran vorbei, wenn man versucht, auf dem Rechner des Users Daten zu verarbeiten, von dem der Nutzer aber nichts wissen soll. Der SFT-Loader MUSS zwangsweise irgendwann die Daten entschlüsseln. Was ich nun mache ist es, zu analysieren wie dieses Programm es genau macht. Wie generiert es sich seinen Schlüssel? Welche Algorithmen werden verwendet? In welcher Stelle der Datei befinden sich die Daten? Dazu bedient man sich des Reverse Engineering.

Kerckhoffs Prinzip besagt, dass die Sicherheit eines Verschlüsselungsverfahrens auf die Geheimhaltung des Schlüssels beruhen muss, nicht auf die des Algorithmus. In unserem Fall muss jedoch das Programm das Passwort ja wissen, um den Inhalt zu entschlüsseln. Irgendwoher muss es das Passwort ja kriegen. Sei es, indem es sich das selbst generiert (siehe weiter unten) oder ob es einen hardcoded key verwendet. Die Sicherheit ist die selbe, solange ich alles rekonstruieren kann.

Nun, zurück zum Dateiformat: jede SFT Datei hat einen Header. Die ist immer 0×40 (=> 64) Bytes lang. Sie fängt (immer?) mit “A” an, gefolgt von einem 0xFF Byte, und dann “2SFT04″. Es sollte klar sein, wofür “SFT” steht. Die “2″ ist mir noch nicht ganz klar. Die “04″ allerdings steht für die Dateiversion. Soweit ich weiß, ist dies die aktuellste Version des Formats. (Jedenfalls war es das 2006)

SFT Header

SFT Header

Danach folgen weitere 0xFFs bis die 0×40 Bytes voll sind. Nun ist der Header fertig, und der eigentliche Content folgt. Dieser ist mit zlib komprimiert. Einfach dekomprimieren (am einfachsten mit einem Python script) und schon hat man den dekomprimierten Inhalt. Dieser ist allerdings noch verschlüsselt. Der Algorithmus für die Verschlüsselung ist RC4. Wobei wie immer die Sicherheit des Algorithmus ziemlich egal ist, solange der Schlüssel irgendwo abgespeichert ist.
Der Schlüssel für RC4 ergibt sich aus dem SHA1 Wert des Headers. Dafür schneidet man den ersten Byte (also das “A”) des Headers heraus, fügt ans Ende zwei 0xFF hinzu und hasht es dann mit SHA1. Das Resultat ist unser Key. Gewöhnlicher Weise ist es immer die selbe:

7CBEB0CF896EC8DE4F54A2850E6C73B38E95EA06

Mit diesem Key entschlüsseln wir den Dateiinhalt. Und es erscheint uns der serialisierte (aber entschlüsselte) Inhalt der Datei.

Entschlüsselter Inhalt

Entschlüsselter Inhalt

Von hier an ist es nicht mehr viel. Man kann einfach den Inhalt splitten, und die einzelnen Werte auslesen. Die einzelnen Base64-Strings die dort zu finden sind, sind entweder mit dem SHA512 Hash von “SFT Loader Reloaded” oder “callstackapi”, (mit dem RC4 Algorithmus) zu entschlüsseln. Hierbei hatte ich ein paar Probleme, da meine python library einen Fehler drin hatte (man, ich musste den verdammten RC4 Algorithmus fast nachbauen um den Fehler zu finden … der Programmierer hat vergessen beim crypten i und j wieder auf 0 zu setzen, siehe The Pseudo-Random Generation Algorithm)

Nach einigem rumprobieren und surfen fand ich heraus, dass der Programmierer eine nicht-standardisierte Verschlüsselung verwendet, die nirgendwo dokumentiert ist. Das wäre natürlich der total Krampf im Arsch (ja, ich weiß dass es falsch übersetzt ist) den ganzen Algorithmus auch noch zu reversen. Aber glücklicherweise fand ich diese Komponente, welches wohl dieses Verfahren überhaupt erfunden hat. Sie nennt sich RCx und ist ein selbstprogrammierter Algorithmus, angelehnt an RC5. Also entweder wollte ich ein Delphi Programm schreiben (und diese Komponente verwenden), Strings entschlüsseln und an mein Programm pipen lassen, oder den ganzen Algorithmus selbst implementieren. Ersteres fiel weg, da ich keinem User aufzwingen möchte, Wine zu installieren. Also baute ich den Algorithmus nach. Nach rund 92 Zeilen Code, und 2 Tage debugging (Python hat wohl kein “Byte” als Dateityp, das war wie ein Tritt in die Weichteile) war meine kleine RCx Klasse fertig. Damit kann man wahrlich die einzelnen Werte endgültig entschlüsseln.

Vorerst knöpft man sich das “Header” Element vor (siehe Bild oben). Aus diesem ergibt sich ein String wie folgt:

SFT0#2#D7D05C8DEED489B6C6981D9A6E8D79315C8F2D41A7AC229B385C2A2B73A7959C65F07C7D7CE4F1D6CA7A79E0C2A4847E5587079ACF

SFT am Anfang zeigt uns wieder, dass es korrekt entschlüsselt wurde (mit dem erwähnten RCx Algorithmus). Die “0″ direkt danach gibt an, ob ein Passwort notwendig ist (in diesem Fall also nicht). Ich weiß nicht genau wofür die nachfolgende “2″ ist (Maximale Threads oder so ?) aber alles nach dem letzten “#” ist der Wert, den es zu entschlüsseln gilt. Dafür wurde ein (selbstentwickeltes?) XOR und Salt-System genutzt. Der Salt-Wert ist “callstackapi”. Hierdran wird einfach das eingegebene Passwort angehangen, oder ggf. nichts angehangen. Den XOR-Algorithmus kann man wie folgt beschreiben:

def YurryXOR(key):
raw_key = hashlib.sha512(key).digest()
raw_key = raw_key[:(len(raw_key)/2)]
result = []
key = key*10
for i in range(0, len(raw_key)):
result.append(chr(ord(raw_key[i]) ^ ord(key[i])))
return ”.join(result)

Kleine Erklärung: Der key ist das erwähnte callstackapi+password. Daraus wird ein SHA512 Wert generiert. Die letzte Hälfte wird rausgelöscht. Nun wird der nicht-gehashte Key mit dem gehashten geXORed. Und das Ergebnis ist unser Key.

de5a015215664d925bf3e9f97477caee4ef7a44f6a3d0ee08bf70f1f326e41c7

Sowas in der Art (btw, ich benutze für diese Demonstration diese Testdatei).

Das ist unser Yurry-Key (die habe ich nach meinem Schatz benannt. Haiiii schatziii <3 :D ). Mit dieser kann man ganz schmutzige Sachen machen (nein, nicht mit meinem Schatz du Perverser! Ich meine den Key!). Haben wir diesen erstmal, stehen uns alle Wege offen. Diesen Key können wir an unser Header-Element anwenden, und somit erhalten wir einen Wert, der exakt so aussieht wie das hier:

{1F945Z9B-3ZA9-4Q13-A5DB-KDKDKFLDSHGVFBV}

(Anfangs sind noch 20 zufällige Bytes, die angehanden wurden. Das ist wohl so eine Eigenschaft vom Algorithmus. Die kann man gefahrlos rauslöschen).

Das sieht aus wie eine Seriennummer, ist es aber nicht. Dieser Wert wird nur verwendet, um zu schauen ob der User das richtige Passwort eingegeben hat.

Mit dem gleichen Algorithmus und dem gleichen Key, ist es nun möglich alle anderen Elemente zu entschlüsseln (Host, Username, Passwort etc.)

sft-decrypter

sft-decrypter

Das wars auch schon. Man kann noch durch alle Dateinamen gehen, wenn man möchte. Ich denke, das werde ich bei Gelegenheit mal machen, und dem PyLoad Projekt ein SFT-Plugin schenken (auch wenn dies kein Dateiformat für One-Click-Hoster ist).

Nachdem letztens schon wieder ein Hacker Selbstmord begangen hat, ist mir der Fall Tron (ein Hacker der Verschlüsselungen geknackt hatte) wieder eingefallen. Um exakter zu sein, dass was er den Polizisten bei einer Hausdurchsuchung mal sagte: “Man kann das Anwenden
von mathematischen Formeln doch nicht unter Strafe stellen?!” (aus dem Buch “Tron – Tod eines Hackers”).

Ich schreibe später eventuell ein Reverse Engineering Paper hierdrüber, da dieses Target ziemlich lehrreich war!

Ein letztes noch: Es ging hier natürlich wiedermal nicht um das Endresultat, sondern um den Weg. Denn an Username&Passwort der SFT Datei, käme man auch durch Sniffer, Proxies oder ein paar Spielereien mit der Hosts-Datei. Wie J. J. Abrams bereits einmal sagte, es geht nicht um das Ende (die Auflösung des Ganzen). Sondern die Zeit, die man damit verbringt :) (Gemeint war die Serie Lost, aber passt auch hierzu!).

Verschließt eure Augen nicht vor der Wahrheit! Speichert eure sensiblen Daten nicht in einem undurchsichtigen proprietären Dateiformat. Das ist wie mit WEP. Indem nun jeder Witzbold in ein WEP-Netzwerk einbrechen kann, hat man den Leuten die Augen geöffnet: Verwendet nicht WEP! Und viele (wenn auch bei weitem nicht jeder) haben die Gefahr erkannt. Indem man aber nun einfach sturr und blind bleibt, und meint, weil WEP gebrochen wurde, wäre die ganze Sicherheit um WEP kaputt, irrt sich. Es war schon immer unsicher, nur wurde diesmal einfach nur bewiesen, dass es so ist. Und wer meint ich hätte mit diesen frei zugänglichen Informationen irgendetwas kaputt gemacht, ist naiv. Ich habe nur Informationen veröffentlicht, die jeder SFT User auf dem Rechner hat. Nur hat es wohl keiner vorher einer Analyse unterzogen. Wie dem auch sei:

DOWNLOAD: SFT-DECRYPTER

oder: SFT-DECRYPTER + GUI (benötigt Java) von Seji

//edit 17.07.09 >>> kleines Update. Bugfixxes und ein paar Feature-Requests (Ordner und Dateiname anzeigen) wurden realisiert. Es werden nicht alle Dateinamen und Ordner angezeigt, sondern nur die ersten, habe gerade keine Lust das noch einzubauen. Dennoch viel Spaß :)

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.

Wiederauferstanden

Posted by eddy14 - 08/07/09 at 08:07 pm

Er starb und war nach 3 Zeiteinheiten wieder am Leben. Ist das kein Wunder, vom Schöpfer persönlich? Wahrlich, wir haben euch die Nachricht gegeben, dass Eddys-Blog wiederauferstehen wird. Gottes Zorn auf denen, die nicht hören wollten. Er ist es; der euch mit Beiträgen beschenkt. Oh wahrlich, er ist wieder unter euch.

So, da bin ich wieder Mädels :) Einige Kommentare sind verloren gegangen, ich bitte das zu entschuldigen! Hier auf dem neuen Hoster sollte nichts mehr schief gehen, die Admins scheinen sehr nette Leute zu sein :-) Ich werde meinen Beitrag über den SFT Decrypter nachholen (habe leider kein Backup mehr, und muss deswegen alles neu verfassen).

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.