Verschlüsselung reversen?

12/22/2013 22:21 MaxMilimeter#1
Hi,
ich würde gerne wissen wie man am besten an eine Packetverschlüsselung rangeht um diese zu reversen. Ich weiß, dass die von Nostale z.B. nicht sehr schwer zu knacken ist und mithilfe eines Sessionkeys encrypted wird, ab der Channelauswahl.

Jemand ne Idee wie ich das am besten lernen kann?

Aus
88226

wird (in HEX)
9A AC E4 90 DB 75 AF 0E

MfG,
Max
12/23/2013 00:25 meak1#2
man schreibt 'hallo' im chat, macht einen breakpoint auf ws32_send und verfolgt es solang zurück(mit breakpoints) bis man das 'hallo' als argument übergabe sieht.

Dann benutzt man diese Funktion selber und tadaaaaa
12/23/2013 00:49 MaxMilimeter#3
Ich würde sie aber gerne reversen um Client unabhängig zu arbeiten ^^
12/23/2013 00:53 meak1#4
dann guckst du halt welche calls gemacht werden bis zur send, bzw wo das argument gecrypted wird und dann kopierst du diese mit IDA hex rays zu c++ code
12/23/2013 00:57 MaxMilimeter#5
Ich habe noch nie mit IDA gearbeitet, wie wähle ich da überhaupt das Main Module wie bei OllyDBG?
Kannst Du mir kurz die Schritte nennen um den Code umzuwandeln?
Danke für den Tipp!
12/23/2013 01:05 meak1#6
musst nur die funk finden die das argument crypted, dann guckst du halt welche addresse, auf diese jumpst du in IDA und dann i-wo show as hex rays oder so...
12/23/2013 02:17 MaxMilimeter#7
Ok, war nicht einfach, aber ich habs nach ner Weile gefunden.

Falls mal wer das gleiche Problem hat:
View->Open subviews->Pseude Code

Man benötigt das Hex-Rays Plugin und muss vorher die Compilereinstellungen ändern (ich habe alles auf 4 gestellt), damit es läuft.

Sieht jedenfalls interessant aus, falls noch wer Tipps zu meiner Ausgangssituation hat, immer her damit ;)

EDIT2:
OK, man könnte versuchen die Funktion zu übernehmen, aber was macht LOBYTE(a4) = a4 - 10; ?
Der Compiler weiß natürlich auch nicht was er mit dem = a4 - 10 anfangen soll.

Edit:
Gut, das müsste wohl der Code sein, bei dem die Verschlüsselung stattfindet. Das ist doch ein Unding daraus zu erknnen, wie nun verschlüsselt wird !? (EDX ist meine Zahlenkombi und eine Art Salt, schätz ich "57119(salt) 88226(meine_zahl)")
12/23/2013 09:41 EasyTale#8
Hex-Rays finde ich persönlich schwachsinnig, bis ich da irgendwie durchblicke, bin ich mit dem Debugger 100x schneller. Zumal kennst du damit nicht die Inhalte der Variablen.

Da du die Funktion schon hast, schaust du ebend wieviele Parameter übergeben werden und was der Inhalt ist und steppst halt die Funktion durch, da sieht man ja was mit den jeweiligen Bytes passiert.
Dabei übersetzt du den asm Code (meistens nur die Schleife).
Es kann aber vorkommen, dass vor der Schleife noch Funktionsaufrufe kommen die, die Bytes präparieren oder vor dem eigentlichen Verschlüsselungsaufruf und sogar nach.
Es kommt also am Ende darauf an, wie geübt du mit einem Debugger umgehen kannst und wie schnell du asm Code liest.
Vielleicht kannst du dich versuchen etwas an Hey-Rays zu orientieren, aber mein Fall ist das definitiv nicht und die meisten die ich kenne auch nicht (mehr Zeitverschwendung als hilfe).
12/23/2013 11:40 Tyrar#9
Quote:
Originally Posted by EasyTale View Post
Hex-Rays finde ich persönlich schwachsinnig, bis ich da irgendwie durchblicke, bin ich mit dem Debugger 100x schneller. Zumal kennst du damit nicht die Inhalte der Variablen.

Da du die Funktion schon hast, schaust du ebend wieviele Parameter übergeben werden und was der Inhalt ist und steppst halt die Funktion durch, da sieht man ja was mit den jeweiligen Bytes passiert.
Dabei übersetzt du den asm Code (meistens nur die Schleife).
Es kann aber vorkommen, dass vor der Schleife noch Funktionsaufrufe kommen die, die Bytes präparieren oder vor dem eigentlichen Verschlüsselungsaufruf und sogar nach.
Es kommt also am Ende darauf an, wie geübt du mit einem Debugger umgehen kannst und wie schnell du asm Code liest.
Vielleicht kannst du dich versuchen etwas an Hey-Rays zu orientieren, aber mein Fall ist das definitiv nicht und die meisten die ich kenne auch nicht (mehr Zeitverschwendung als hilfe).
Dem stimme ich teilweise zu, der Code den Hex-Rays ausspuckt ist in kleineren Funktionen nicht zu gebrauchen, in größeren kann man sich aber einen guten Überblick verschaffen.
Das wichtigste was die Verschlüsselung angeht ist wohl erst mal die Blockgröße. In deinem Fall dürften das wohl 64 Bit sein. In dem Fall würden wohl folgende (bekannteren) in frage kommen: CAST, TEA, XTEA, Skipjack, IDEA, Blowfish, FEAL, DES, 3DES und RC2 (hoffe ich habe keinen vergessen)
Um da genauer zu werden wäre die Schlüssellänge wichtig.
12/23/2013 13:01 EasyTale#10
Da ich das obige Spiel kenne, kann ich mit gutem Gewissen sagen, dass das Spiel für Zahlen und bestimmte Zeichen eine Tabelle hat.
Für jede Zeichen und Zahlen in der Tabelle finden einige bitweise Operationen statt (es werden teilweise auch neue Bytes hinzugefügt), alle Zeichen die nicht in der Tabelle sind werden einfach gexored.
Es wird auch jedesmal die Lange angegeben, wenn z.B. die Zeichen beginnen die nicht in der Tabelle sind.
Bei den Bytes aus der Tabelle wird die Länge auch nochmal extra 'verschlüsselt'.
Anschließend wird anhand der SessionID nochmal ein Key erstellt und der Key gibt in einer Switchanweisung die nächsten Operationen (komplettes Paket wird nochmal gexored und +/- einer bestimmten Zahl addiert, ist aber unterschiedlich case zu case).

@Threadersteller: Wenn du willst, kannst du mir eine PN schreiben und ich helfe dir, vorrausgesetzt du bemühst dich dann noch ein bisschen. :)
12/23/2013 15:58 meak1#11
ja okay, die hex ray funktion war sehr nützlich bei verschlüsselungen, hat mir sehr geholfen beim hackshield emu.

Weil die funktionen meist solang sind das es zu schwer wäre sie selber nach c++ umzuschreiben etc.

Aber an sich ja, man muss gucken welche argumente übergeben werden bzw sie verstehen woher sie kommen, meist werden argumente übergeben wie 'tabellen' die zum crypten benutzt werden <- man muss zb. gucken ob diese 'tabellen' statisch sind oder auch per ner funktion erstellt werden...

Ich hatte damals einen Bot mit kompletter verschlüsselung, ich dachte immer derjenige sei sehr erfahren bis ich i-wann rausfand das er einfach den kompletten verschlüsselungsteil aus IDA-hex rays kopiert hat..

Bin noch beim kumpel, lade mir das Spiel heut Abend mal oder mittwoch