Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 21:08

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

Advertisement



ASM code in Byte Format?

Discussion on ASM code in Byte Format? within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
Crack-wtf's Avatar
 
elite*gold: 256
Join Date: Feb 2012
Posts: 1,370
Received Thanks: 2,917
ASM code in Byte Format?

Hi Leute.

Ich nutze seit längerem den Debugger von CheatEngine, und vermisse eine Funktion.

Nämlich nach Befehlen zu suchen.

z.B. zu suchen wo "Call MeineAddresse" steht.

Jetzt wollte ich mir ein Tool Basteln, womit ich solche Befehle in Hex Umwandeln kann, um es dann mit CE Suchen zu können.

Nun stehe ich aber vor einem Problem.

Ich weis nicht, wie Addressen "portiert" werden.

z.B. ist "00470290" in Hex format "A9 C1 FF FF"

Hoffe jemand kann mir weiterhelfen.

EDIT:
"00000000" = "FB E6 DC FE"
"FFFFFFFF" = "FA E6 DC FE"

EDIT:
Die Funktion "Find Assembly Code" arbeitet zu langsam, also nicht darauf stützen.
Crack-wtf is offline  
Old 03/19/2012, 13:00   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Das sind Offsets die die Adresse relativ zur Instruction-Position beschreiben.

Du willst mir nicht ernsthaft erzählen, dass du deinen eigenen Assembler schreiben willst oder?! Wie unnötig..
MrSm!th is offline  
Old 03/19/2012, 15:42   #3
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
Wenn es dir nur um "call 0x11223344" geht, könntest du wie folgt vorgehen:

Du schreibst dir eine Funktion, die als Parameter den Anfang des Codes und die Länge entgegen nimmt. Dann überprüfst du das erste Byte des Codes auf 0xE8, um bei Übereinstimmung die nächsten vier Bytes auf die momentane Adresse + 5 zu addieren und sie dann mit deiner gesuchten Adresse vergleichen zu können. Wenn es sich nicht um 0xE8 handelt oder die Adresse nicht die gesuchte ist, rufst du einen Length Disassembler wie z.B. mlde32 mit der momentanen Adresse auf, der dir dann die Länge der Instruktion zurückgibt, sodass du diese überspringen kannst und an der nächsten landest, die du dann wieder auf 0xE8 überprüfst.

Bei statischer Analyse kannst du halt auch nur mit statischen Adressen arbeiten und sowas wie "call eax" oder "call [eax]" fällt dann natürlich direkt aus den Möglichkeiten..

"call [0x11223344]" könntest du noch mit einbeziehen, indem du das erste Byte auf 0xFF und das zweite auf 0x15 (disp32-addressing, reg=2) überprüfst, die nächsten vier Bytes dann als absolute Adresse nimmst, aus dieser dann die Adresse, die gecallt wird, und sie mit deiner vergleichst.
Solch ein Call könnte allerdings auch mit dem SIB-Byte kodiert werden, sodass du das zweite Byte auf 0x14 und das dritte noch auf 0x25 überprüfen müsstest und erst dann die Adresse als DWORD kommt. Ist aber eher ungewöhnlich, da der Befehl halt unnötigerweise ein Byte größer ist.

Du könntest aber auch OllyDbg und dann Strg + R (Find References) benutzen.
link is offline  
Thanks
1 User
Old 03/19/2012, 15:53   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by link View Post
Wenn es dir nur um "call 0x11223344" geht, könntest du wie folgt vorgehen:

Du schreibst dir eine Funktion, die als Parameter den Anfang des Codes und die Länge entgegen nimmt. Dann überprüfst du das erste Byte des Codes auf 0xE8, um bei Übereinstimmung die nächsten vier Bytes auf die momentane Adresse + 5 zu addieren und sie dann mit deiner gesuchten Adresse vergleichen zu können. Wenn es sich nicht um 0xE8 handelt oder die Adresse nicht die gesuchte ist, rufst du einen Length Disassembler wie z.B. mlde32 mit der momentanen Adresse auf, der dir dann die Länge der Instruktion zurückgibt, sodass du diese überspringen kannst und an der nächsten landest, die du dann wieder auf 0xE8 überprüfst.

Bei statischer Analyse kannst du halt auch nur mit statischen Adressen arbeiten und sowas wie "call eax" oder "call [eax]" fällt dann natürlich direkt aus den Möglichkeiten..

"call [0x11223344]" könntest du noch mit einbeziehen, indem du das erste Byte auf 0xFF und das zweite auf 0x15 (disp32-addressing, reg=2) überprüfst, die nächsten vier Bytes dann als absolute Adresse nimmst, aus dieser dann die Adresse, die gecallt wird, und sie mit deiner vergleichst.
Solch ein Call könnte allerdings auch mit dem SIB-Byte kodiert werden, sodass du das zweite Byte auf 0x14 und das dritte noch auf 0x25 überprüfen müsstest und erst dann die Adresse als DWORD kommt. Ist aber eher ungewöhnlich, da der Befehl halt unnötigerweise ein Byte größer ist.

Du könntest aber auch OllyDbg und dann Strg + R (Find References) benutzen.
Er will kein Tool zum Suchen schreiben bzw. eins haben, sondern ein Tool, das ihm die Call Instruction in Opcodes übersetzt, damit er die per CheatEngine suchen kann.
MrSm!th is offline  
Old 03/19/2012, 16:02   #5
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
Achso, um mit CE dann nach den Hex-Werten zu suchen.
Aber da ein Call ja relativ ist, wird das nicht möglich sein. Deswegen entweder ein eigenes Tool schreiben oder z.B. OllyDbg verwenden.
link is offline  
Old 03/19/2012, 17:10   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Aber da ein Call ja relativ ist
Was ihm ja nicht bekannt war.

Ich find es ohnehin irgendwie unnötig, dafür extra ein eigenes Tool zu schreiben, gibt doch schon genug Tools wie Olly Plugins etc.
Ansonsten, wie du schon sagtest, wird eine eigene Dll notwendig sein, die den Speicher nach Calls zur Adresse durchsucht.
MrSm!th is offline  
Old 03/19/2012, 18:10   #7
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Falls du einen Assembler schreiben willst, ist der folgende Link Referenz Nr. 1 für dich:


Sehr lesenswert, aber ziemlich harte Kost.
Nightblizard is offline  
Old 03/20/2012, 22:09   #8
 
Crack-wtf's Avatar
 
elite*gold: 256
Join Date: Feb 2012
Posts: 1,370
Received Thanks: 2,917
Ok leute ich habs jetzt rausgefunden.
Pinki hat mir nen gedankenstoß gegeben.
Bei Jumps: Addy Des jumps - Addy zu der gejumpt wird -5. Und bei dem ergebnis alle bytes umdrehen.
Bei Mov: Addy die beschrieben wird einfach umdrehen. Und dahinter den wert auch umdrehen.
Bei Call: Ähnlich wie bei Jumps
Crack-wtf is offline  
Old 03/20/2012, 23:33   #9


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Genau das haben wir dir schon beschrieben.
MrSm!th is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
WPE PRO 500 byte limit.
12/27/2011 - Off Topic - 0 Replies
Hi. Ich arbeite im moment mit Packeten in einem Game. Ich möchte ein Packet bearbeiten, welches ca. 2000 bytes lang ist. Im PacketChanger von WPE Pro ist aber ein Limit von 500 bytes gesetzt. Kennt einer eine alternative zu WPE Pro, womit ich ein Packet dieser größe modifizieren kann?
Byte, Bit
12/07/2011 - Off Topic - 2 Replies
was ist der unterschied zwischen bit und byte ?
Mega Byte, Pls Help me, Pls
12/07/2011 - 12Sky2 - 20 Replies
MegaByte, I tried to follow step by step your tutorial about attack speed, but there are people like you who are enlightened to this area of informatica and people like me who are simply turned off if I'm right, the new direction of Attack Speed Buff is: 011A1B78 Please, Please, Please, could you tell me the two directions that we should put in 90 90 date? please please please. I thank you and really admire very much your ability! and good, say you're a genius and have all my admiration!...
Tchar to byte
02/22/2011 - General Coding - 2 Replies
Hey, can anyone help me to convert TCHAR to BYTE in C++?=/ mfg



All times are GMT +2. The time now is 21:08.


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.