|
You last visited: Today at 19:11
Advertisement
Verschlüsselung reversen?
Discussion on Verschlüsselung reversen? within the General Coding forum part of the Coders Den category.
12/22/2013, 22:21
|
#1
|
elite*gold: 0
Join Date: Jul 2010
Posts: 422
Received Thanks: 164
|
Verschlüsselung reversen?
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
|
#2
|
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,124
|
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
|
#3
|
elite*gold: 0
Join Date: Jul 2010
Posts: 422
Received Thanks: 164
|
Ich würde sie aber gerne reversen um Client unabhängig zu arbeiten ^^
|
|
|
12/23/2013, 00:53
|
#4
|
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,124
|
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
|
#5
|
elite*gold: 0
Join Date: Jul 2010
Posts: 422
Received Thanks: 164
|
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
|
#6
|
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,124
|
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
|
#7
|
elite*gold: 0
Join Date: Jul 2010
Posts: 422
Received Thanks: 164
|
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)")
signed int __userpurge sub_4ABB98<eax>(int a1<eax>, int a2<edx>, signed int a3<ecx>, int a4<ebx>, int a5)
{
int v5; // [email protected]
int v6; // [email protected]
char v7; // [email protected]
char v8; // [email protected]
char v9; // [email protected]
char v10; // [email protected]
signed int v11; // [email protected]
signed int v12; // [email protected]
signed int v13; // [email protected]
char v14; // [email protected]
char v16[4097]; // [sp+1h] [bp-101Dh]@3
int v17; // [sp+1Eh] [bp-1000h]@1
int v18; // [sp+1002h] [bp-1Ch]@13
char v19; // [sp+1009h] [bp-15h]@24
int i; // [sp+100Ah] [bp-14h]@17
int v21; // [sp+100Eh] [bp-10h]@4
int v22; // [sp+1012h] [bp-Ch]@1
int v23; // [sp+1016h] [bp-8h]@1
int v24; // [sp+101Ah] [bp-4h]@1
v17 = a1;
v22 = a3;
v23 = a2;
v24 = a1;
if ( a3 >= 4096 )
v22 = 4096;
sub_4052DC(v24, 2 * v22 + 1);
sub_403740(v16, v22);
v16[v22] = 0;
if ( v22 - 1 >= 0 )
{
v6 = v22;
v21 = 0;
v5 = (int)v16;
do
{
v7 = *(_BYTE *)(v23 + v21);
if ( !v7 )
break;
v8 = v7 - 32;
if ( v8 )
{
LOBYTE(a4) = a4 - 13;
v9 = (_BYTE)a4 < 2u;
LOBYTE(a4) = a4 - 2;
if ( !v9 )
{
--a4;
v10 = (_BYTE)a4 < 0xAu;
LOBYTE(a4) = a4 - 10;
if ( !v10 )
{
if ( (_BYTE)a4 != -59 )
continue;
}
}
}
*(_BYTE *)v5 = 49;
++v21;
++v5;
--v6;
}
while ( v6 );
}
v21 = 0;
v11 = 1;
while ( v21 < v22 )
{
v18 = v21;
while ( v16[v21] == 48 )
++v21;
if ( v21 > v18 )
{
for ( i = v21 - v18; i > 0; i -= 126 )
{
v12 = i;
if ( i > 126 )
v12 = 126;
for ( *(_BYTE *)(sub_4051A8() + v11++ - 1) = v12; v12 > 0; --v12 )
*(_BYTE *)(sub_4051A8() + v11++ - 1) = ~*(_BYTE *)(v23 + v18++);
}
}
if ( v21 >= v22 )
break;
v18 = v21;
v19 = 1;
while ( v16[v21] == 49 )
++v21;
if ( v21 > v18 )
{
for ( i = v21 - v18; i > 0; i -= 126 )
{
v13 = i;
if ( i > 126 )
v13 = 126;
for ( *(_BYTE *)(sub_4051A8() + v11++ - 1) = v13 | 0x80; v13 > 0; --v13 )
{
v14 = *(_BYTE *)(v23 + v18++);
if ( (unsigned __int8)(v14 - 48) >= 0xAu )
{
switch ( v14 )
{
case -224:
LOBYTE(a4) = 1;
break;
case -211:
LOBYTE(a4) = 2;
break;
case -210:
LOBYTE(a4) = 3;
break;
case -1:
LOBYTE(a4) = 14;
break;
default:
a4 = 0;
break;
}
}
else
{
LOBYTE(a4) = a4 - 44;
}
if ( v19 )
{
a4 *= 16;
*(_BYTE *)(sub_4051A8() + v11 - 1) = a4;
v19 = 0;
}
else
{
*(_BYTE *)(sub_4051A8() + v11 - 1) = a4 | *(_BYTE *)(*(_DWORD *)v24 + v11 - 1);
++v11;
v19 = 1;
}
}
if ( !v19 )
++v11;
}
}
}
*(_BYTE *)(sub_4051A8() + v11 - 1) = -1;
sub_4052DC(v24, v11);
return v11;
}
|
|
|
12/23/2013, 09:41
|
#8
|
elite*gold: 0
Join Date: Oct 2013
Posts: 135
Received Thanks: 44
|
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
|
#9
|
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
|
Quote:
Originally Posted by EasyTale
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
|
#10
|
elite*gold: 0
Join Date: Oct 2013
Posts: 135
Received Thanks: 44
|
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
|
#11
|
elite*gold: 220
Join Date: Jun 2007
Posts: 3,768
Received Thanks: 1,124
|
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
|
|
|
 |
Similar Threads
|
Suche jemand der mir eine EXE reversen kann *wichtig!*
03/29/2012 - Metin2 Private Server - 0 Replies
Ja der Topic sagt alles ist echt sehr wichtig...
wer es kann/machen will addet mich doch bitte in Skype oder schickt mir ne PN.
|
Mit Olly reversen und in C++ Hooken
12/15/2011 - C/C++ - 22 Replies
Guten Tag Gemeinde ;)
Ich hoffe der Titel is einigermaßen io, mir is einfach nichts besseres eingefallen ^^
Wie ich ja schon in einem anderen Thread beschrieben habe möchte ich Tastenanschläge an das Spiel DAOC senden, jedoch werden die Funktionen (Send- & Postmessage und co) geblockt, bzw die Virtuellen Inputs.
Headpuster gab mir diesen Hinweis, bzw diese Hilfe:
Ich dachte mir ich mach mal n neuen Thread auf, da es ja jetzt in den Bereich C/C++ geht und nicht mehr .Net.
Ich bin...
|
Reversen? Wie finde ich Values?
11/26/2010 - S4 League - 6 Replies
Hi Leute,
Ich weiß, dass jetzt viel geflame kommen wird, aber:
Wie finde ich die S4 Values? Wenn ich die nicht habe, kann ich ja nichts hacken.
Ich bin noch so ziemlich am Anfang und habe nichts gefunden, was mir geholfen hat. Ich habe zwar was gafunden, aber das habe ich nicht verstanden (Englisch) oder konnte die Dateien nicht downloaden (die TuTs):o
Wäre nett wenn mir das jemand erklären könnte oder einen Link von einem gutem deutschem Tut geben könnte.
Danke schonmal
|
Allgemeine Frage zum reversen von tclient.exe
11/17/2010 - 4Story - 12 Replies
Hey,
Ich wollte mir grade mal die Tclient.exe mit ollydbg anschauen um ein bisschen über die kommunikation zwischen dem HS und 4story rauzubekommen. Als ich das Ollyfenster offen hatte war es leer es stand kein code drin und es ließ sich nicht starten, also habe ich mal PEID drüberlaufen lassen und UPX gefunden. Da ich die exe selbst mit einem gefixxten pe-header nicht in olly offen bekommen habe, wollte ich das Teil automatisch entpacken. Wenn ich dies jedoch versuche sagt mir der Unpacker...
|
All times are GMT +1. The time now is 19:11.
|
|