Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 06:32

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Programm Reversen. Problem mit this*

Discussion on Programm Reversen. Problem mit this* within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
Red face Programm Reversen. Problem mit this*

Ich möchte eine executable komplett Reversen und in C++ schreiben.

Wie fange ich damit an ?


Assembly um den <ModuleEntryPoint> anschauen und analysieren.
Das Programm springt anschließend in__tmainCRTStartup().
Meine Vermuting ist einfach mal, dass von dort aus main() aufgerufen wird.

die Funktion in__tmainCRTStartup:

Ich bin zu dem entschluss gekommen, dass ich bei WinMain starte... der Rest der Funktion __tmainCRTStartup sollte durch ein neues VC++ Windows Project von alleine kommen. Richtig ?
ist das der richtige Startpunkt oder bin ich da falsch ?
Daifoku is offline  
Old 08/17/2015, 20:52   #2




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Ist bisher so richtig.

Edit: Was hast du denn konkret vor ?
Omdi is offline  
Thanks
1 User
Old 08/17/2015, 21:08   #3
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
Danke für die Rückmeldung Omdihar,

Also...Ich hab eine Informationsseite zu einem Spiel am laufen und muss, um an die Daten zu kommen (für ein Update der Infos), die großen Binären Dateien Entpacken.
Das Virtuelle Datei System von diesem Spiel ist kein Problem und mein Programm entpackt diese auch zuverlässig, allerdings ist es nervig, wenn ich immer wieder alles vom Server laden muss.

Ich möchte an die Daten gelangen ohne den Clienten auf dem PC haben zu müssen.

Die Dateien liegen einzeln auf dem Server und ich kann diese per HTTP Request einfach herunter laden. Leider sind diese dann verschlüsselt. Der Launcher entschlüsselt diese und legt sie anschließend in das eigene Virtuelle FileSystem ab.

Ich habe den Algorithmus zum entschlüsseln lokalisieren können (im Launcher), leider sind meine Kenntnisse nicht ausreichend, um daraus eine Stand-Alone Version zu bauen. Es scheitert an den _thiscalls ... Ich bekomme einfach nicht raus, wie die Struktur dahin genau aussieht.

Also dachte ich mir, dass ich das Programm grundlegend von vorne Reverse.
Das ist wahrscheinlich zu viel des Guten aber ich kann es einfacher nicht anders :c
Daifoku is offline  
Old 08/17/2015, 22:36   #4




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Quote:
Ich habe den Algorithmus zum entschlüsseln lokalisieren können (im Launcher), leider sind meine Kenntnisse nicht ausreichend, um daraus eine Stand-Alone Version zu bauen.
Es wäre denke ich mal besser sich auf diesen Teil zu konzentrieren. Könntest du vielleicht Ausschnitte vom Algorithmus hier posten? Ich bin mir sicher, dass wir dir da helfen können
Omdi is offline  
Thanks
1 User
Old 08/17/2015, 23:01   #5
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
okay
Ich erstelle fix eine Klasse zur besseren Übersicht, kommentiere meinen bisherigen Code mit Ungewissheiten und poste dann gleich in ein paar Minuten die Klasse

Das ganze ist schon enorm vereinfacht, normal waren die Aufrufe über mehrere Funktionen verteilt.

bei decodeBuffer(void *pthis, int DataSource); liegt mein Problem. pthis+4 wird verwendet und ich weiß nicht, was pthis sein könnte. Das ist der erste __thiscall und ich bin schon am verzweifeln ^^

header


.cpp
Daifoku is offline  
Old 08/17/2015, 23:46   #6




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Du musst ja theoretisch die Klasse nicht eins zu eins nachbauen, sondern einfach nur den Algorithmus implementieren. So wie ich das sehe, ist unk1 die einzige noch fehlende Unbekannte. Geh doch einfach mit einem Debugger ran und schau was sich dahinter verbirgt
Omdi is offline  
Thanks
1 User
Old 08/18/2015, 00:19   #7
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
Ich schau mal, ob ich das hin bekomme ^^
Kann mir leider nicht wünschen, welche Datei mein Launcher lädt und jeder Dateityp hat eine andere decode-routine Habe nur die für ini-Dateien reversed. Hab den downloader schon 10 Minuten am laufen aber bisher noch kein Break :c

edit1:

Danke dir ! Komme nun weiter, mal sehen wie weit

edit2:

unk1 ist ein weiterer Table ._. habe die Routine zur Erstellung des Tables (vermutlich) gefunden...

vermutlich folgender Code
Werde die Routine mal im Debugger weiter untersuchen ..

edit3: ist die Routine, kann sie direkt nach C++ porten
Daifoku is offline  
Old 08/18/2015, 18:31   #8




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Quote:
Originally Posted by Daifoku View Post
Ich schau mal, ob ich das hin bekomme ^^
Kann mir leider nicht wünschen, welche Datei mein Launcher lädt und jeder Dateityp hat eine andere decode-routine Habe nur die für ini-Dateien reversed. Hab den downloader schon 10 Minuten am laufen aber bisher noch kein Break :c

edit1:

Danke dir ! Komme nun weiter, mal sehen wie weit

edit2:

unk1 ist ein weiterer Table ._. habe die Routine zur Erstellung des Tables (vermutlich) gefunden...

vermutlich folgender Code
Werde die Routine mal im Debugger weiter untersuchen ..

edit3: ist die Routine, kann sie direkt nach C++ porten
Freut mich zu hören
Wie unterscheidet sich denn die Verschlüsselung für andere Dateitypen? Ich nehme mal an, dass da lediglich die Table abweicht oder hast du dir das noch nicht genauer angesehen?
Omdi is offline  
Old 08/18/2015, 21:55   #9
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
Es gibt insgesamt 4 verschiedene Methoden zum entschlüsseln, wobei eine davon die Dateitypen behandeln, die nicht verschlüsselt sind (xml, dds, models). Diese werden dort einfach mit bz2 entpackt.

zwei Methoden behandeln das entschlüsseln der Datei (das ist die Klasse, die ich oben kurz angerissen habe). Gleiche Methoden aber zwei andere Table und ein anderes secret

die letzte Methode, soweit ich das auf den ersten Blick sehe, ist was komplett anderes. Kann ich nichts zu sagen und weiß grad auch nicht wofür die ist

Ich muss jetzt erstmal die Routine zur Generierung von unk1 reversen, das reverste Ergebnis von IDA führt leider ins leer : /

Ich stoße grad ins leere.

Code:
MOV EAX,ECX
SHR EAX,1	
TEST CL,0x1
JE SHORT 00426C43 
XOR EAX,0xEDB88320
TEST AL,0x1
Durch welchen Aufruf wird AL gesetzt ?
edit:
Habe es nun hinbekommen

mich würde aber trotzdem interessieren, was in AL/CL genau liegt und wo diese gesetzt werden.
und hat das obige Verfahren der Tabellengenerierung evtl einen Namen?

und noch ein edit:
Kann nun heruntergeladene Dateien entschlüsseln
Daifoku is offline  
Old 08/19/2015, 06:51   #10




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Verbessert mich wenn ich falsch liege, aber die letzte Instruction, die AL setzt müsste XOR EAX,0xEDB88320 sein. Um herrauszufinden, was AL für einen Wert besitzt, müsste man schon wissen was in ECX ist.
Omdi is offline  
Old 08/19/2015, 07:23   #11
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
der Wert ist egal, wollte nur generell wissen, wie AL gesetzt wird und wodurch Mir fehlt da das Basiswissen ;-) Ich habe nun folgendes herausgefunden:

AL ist ein 8bit Register von EAX
Angenommen in EAX liegt der Wert 0x12345678, dann müsste in AL 0x78 liegen.

In meinem Beispiel würde somit der Befehl XOR EAX,0xEDB88320 in C++ wie folgt aussehen:

eax ^= 0xEDB88320;
int AL = eax & (DWORD)0xFF;

kannst du oder jemand anderes das bestätigen ?
Daifoku is offline  
Old 08/19/2015, 08:30   #12




 
Omdi's Avatar
 
elite*gold: 103616
Join Date: Apr 2010
Posts: 13,737
Received Thanks: 14,990
Ist richtig
Omdi is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
3D File Types reversen
09/04/2014 - General Coding - 2 Replies
Hallo, hat hier jemand Erfahrung im Reversen von 3D Model Datei Typen? Ist ein Byte Format, kein Text Format (wie .x bspw). Dadurch dass es ein eigenes Format ist, wird es da wohl keine allgemeine Lösung geben, aber eventuell kann mir hier jemand ja ein paar Tipps geben wie es möglicherweise aufgebaut sein kann oder wie ich dabei vorgehen kann. Vermutlich wird jeder Vertex mit 3 Koordinaten gespeichert, innerhalb eines blocks von 3 Vertices für 1 Polygon? Macht man das so? UV Map...
Bit-Operatoren Reversen
06/30/2014 - General Coding - 2 Replies
Hallo EPVP, Ich brauchte mal eure hilfe bei einem Kleinen Problem. Und zwar bräuchte ich für (0x7f-($color>>25)<<24)|($color&0 xffffff) den umgekehrten Algorithmus. Wäre euch sehr dank bar.
Verschlüsselung reversen?
12/23/2013 - General Coding - 10 Replies
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
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...



All times are GMT +1. The time now is 06:32.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.