Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 19:10

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

Advertisement



[Frage]Opcode to Bytes

Discussion on [Frage]Opcode to Bytes within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 240
Join Date: Mar 2014
Posts: 374
Received Thanks: 585
[Frage]Opcode to Bytes

Hey C/C++ Sektion,

ich wollte fragen wie es möglich ist opcode zu bytes umzuwandeln.
da ich ein Autoupdater in eine Programm einbaun will und dieses Programm soll zmb. ein Call FFFFFFFF in ein Call 00000000 umwandeln ( je nach update der address ).

Code:
 E8 9D020000           - call WerFault.exe+405B8
^hier zum Beispiel call Prozess Address + 405B8 ist 9D020000

und ich versteht nicht wie ich dies umwandeln soll.

ich hab dies hier hin gepostet, da es in c++ geschrieben wurde und eventuell jemand von euch eine Funktion hat und eine gute Erklärung.

Ich hoffe ich bin nicht Falsch ._. ich wusste nicht wo es sonst hin muss.

Danke im Vorraus.

Mit freundlichen Grüßen

-SoulCr4ck-
-SoulCr4ck- is offline  
Old 10/06/2014, 21:03   #2


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Der Aufbau einer Call-Instruktion ist erst das obligatorische E8, was quasi einfach bedeutet, dass die Instruktion ein call mit Delta-Argument ist und dann 4 Byte Delta. Das bedeutet, dass das Delta auf die Adresse der NÄCHSTEN Instruktion gerechnet wird, um die absolute Adresse der call-Instruktion zu erhalten.
In diesem Fall sind die 4 Argument-Byte 0x9D, 0x02, 0x00 und 0x00, woraus sich ein Delta von 0x0000029D ergibt (s. Endianess; Windows benutzt Little-Endian). Da das Ziel WerFault.exe+405B8 ist, ist die Adresse der Instruktion nach dem call also WerFault.exe+4031B bzw die Adresse des calls selber WerFault.exe+40316.
Das gleiche System findet sich auch bei direkten (bedingten und unbedingten) Sprüngen. Wenn das Argument nicht direkt eine Zahl ist, sondern ein register (bspw. call/jmp eax) oder eine Speicheradresse (bspw. call/jmp dword ptr [eax], call/jmp dword ptr [0xDEADBEEF], etc.), so wird der Inhalt des Registers / Speichers nicht als Delta, sondern direkt als absolute Adresse behandelt.
Ich hoffe, dass das anschaulich genug war.
Mit freundlichen Grüßen
Jeoni
Jeoni is offline  
Thanks
2 Users
Old 10/06/2014, 21:04   #3
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Code:
XXXXXXXX  E8 9D020000           - call WerFault.exe+0x405B8
XXXXXXXX => Die Adresse wo die Bytes gespeichert sind ( wäre hilfreich wenn du die dazu gepostet hättest ).

9D020000 ist ein Offset also: 0x029D
Um zu der Adresse WerFault.exe+0x405B8 zu gelangen gehst du wie folgt vor:
XXXXXXXX+0x029D+0x5 = WerFault.exe+0x405B8
( die +0x5 weil du von der Adresse XXXXXXX ausgehst )
WerFault.exe = Base Adresse des Programmes.
+0x405B8 = Offset wo die Funktion ist.

Also musst du erst mal wissen wo deine Zielfunktion liegt und danach rückwärts rechnen.

Zielfunktion-XXXXXXXX-0x5 => Call Adresse.

Nun musst du die Bytes nur noch überschreiben.

von Stackoverflow:
Code:
CURRENT_RVA: jmp (DESTINATION_RVA - CURRENT_RVA - 5 [sizeof(E9 xx xx xx xx)])

(call und jmp verhält sich afaik gleich)

Aber wieso sollte der Updater call X zu call Y umwandeln sollen?


P.S:
Sieht aus als hättest du CE verwendet, würde ich nicht empfehlen, benutz lieber Ollydbg oder IDA Pro.
​Tension is offline  
Thanks
1 User
Old 10/06/2014, 21:31   #4
 
elite*gold: 240
Join Date: Mar 2014
Posts: 374
Received Thanks: 585
Quote:
Originally Posted by ​Tension View Post
Code:
XXXXXXXX  E8 9D020000           - call WerFault.exe+0x405B8
XXXXXXXX => Die Adresse wo die Bytes gespeichert sind ( wäre hilfreich wenn du die dazu gepostet hättest ).

9D020000 ist ein Offset also: 0x029D
Um zu der Adresse WerFault.exe+0x405B8 zu gelangen gehst du wie folgt vor:
XXXXXXXX+0x029D+0x5 = WerFault.exe+0x405B8
( die +0x5 weil du von der Adresse XXXXXXX ausgehst )
WerFault.exe = Base Adresse des Programmes.
+0x405B8 = Offset wo die Funktion ist.

Also musst du erst mal wissen wo deine Zielfunktion liegt und danach rückwärts rechnen.

Zielfunktion-XXXXXXXX-0x5 => Call Adresse.

Nun musst du die Bytes nur noch überschreiben.

von Stackoverflow:
Code:
CURRENT_RVA: jmp (DESTINATION_RVA - CURRENT_RVA - 5 [sizeof(E9 xx xx xx xx)])

(call und jmp verhält sich afaik gleich)

Aber wieso sollte der Updater call X zu call Y umwandeln sollen?


P.S:
Sieht aus als hättest du CE verwendet, würde ich nicht empfehlen, benutz lieber Ollydbg oder IDA Pro.
Also Updated Address - Address Der Bytes - ByteLength = Bytes ? Hab ich's richtig verstanden ?

Ich will das umwandeln von Kick Vote zu Instant Kick und hab KB das uppen x)

Danke schonma
-SoulCr4ck- is offline  
Old 10/06/2014, 21:38   #5
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Quote:
Originally Posted by -SoulCr4ck- View Post
Also Updated Address - Address Der Bytes - ByteLength = Bytes ? Hab ich's richtig verstanden ?
Updated Address - Call Address - 0x5 = call offset

Quote:
Originally Posted by -SoulCr4ck- View Post
Ich will das umwandeln von Kick Vote zu Instant Kick und hab KB das uppen x)
Willst du in einem Spiel den Call ändern oder wie? Also über Pattern scan?
​Tension is offline  
Old 10/06/2014, 21:45   #6
 
elite*gold: 240
Join Date: Mar 2014
Posts: 374
Received Thanks: 585
Quote:
Originally Posted by ​Tension View Post
Updated Address - Call Address - 0x5 = call offset


Willst du in einem Spiel den Call ändern oder wie? Also über Pattern scan?
Ja das meinte ich..

Ja den Call Changen.

Also Call NewAddress und NewAddress vorher mit Find Pattern suchen.

----unterfrage im thread---
Ist es nicht auch möglich & warscheinlich einfacher ein JMP zu tätigen zu einer Neu erstellten Page mit code

Code:
_asm {
call instant_kick
jmp backaddress + SizeofBackaddress (0x5)
}
..Sollte eig. Einfacher Funktionieren oder?
Vorher ne If abfrage welche Funktionen genommen wurde zmb. Kick , Team Shuffle, Change Team und diese address dann in ner Variabele zuspeichern die dann gecallt wird.
-SoulCr4ck- is offline  
Old 10/06/2014, 23:22   #7
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Quote:
Originally Posted by -SoulCr4ck- View Post
Also Call NewAddress und NewAddress vorher mit Find Pattern suchen.
Ja dann einfach die "Formel" anwenden.


Quote:
Originally Posted by -SoulCr4ck- View Post
----unterfrage im thread---
Ist es nicht auch möglich & warscheinlich einfacher ein JMP zu tätigen zu einer Neu erstellten Page mit code

Code:
_asm {
call instant_kick
jmp backaddress + SizeofBackaddress (0x5)
}
..Sollte eig. Einfacher Funktionieren oder?
Vorher ne If abfrage welche Funktionen genommen wurde zmb. Kick , Team Shuffle, Change Team und diese address dann in ner Variabele zuspeichern die dann gecallt wird.
Verwendest du eine Dll?
Du könntest einfach die Vote Kick Funktion mit der Instant Kick Funktion "überschreiben"
Also:
Code:
DWORD VoteKickAddress = FindPattern(xyz);
DWORD InstantKickAddress = FindPattern(xyz);
DetourFunction((PBYTE)VoteKickAddress, (PBYTE)InstantKickAddress);
​Tension is offline  
Old 10/06/2014, 23:28   #8
 
elite*gold: 240
Join Date: Mar 2014
Posts: 374
Received Thanks: 585
Quote:
Originally Posted by ​Tension View Post
Ja dann einfach die "Formel" anwenden.




Verwendest du eine Dll?
Du könntest einfach die Vote Kick Funktion mit der Instant Kick Funktion "überschreiben"
Also:
Code:
DWORD VoteKickAddress = FindPattern(xyz);
DWORD InstantKickAddress = FindPattern(xyz);
DetourFunction((PBYTE)VoteKickAddress, (PBYTE)InstantKickAddress);
Genau das meinte ich

Zu ner eigender Funktion -> Call ausführen -> Jump Back zur Nächsten Funktion / Opcode

Und wenn man andere Funktionen einführen will dazwischen noch ne abfrage setzen ^-^

& Ja ist ne Dll
-SoulCr4ck- is offline  
Reply


Similar Threads Similar Threads
[Frage] dword to Array of Bytes
11/26/2013 - AutoIt - 1 Replies
Hey elitepvpers, gibt es eine UDF mit der man eine dword value in AoB umwandeln kann. wie 2000000 zu \x02\x00\x00\x00\x00\x00\x00 Immomemt hab ich nur String to AoB. Ich danke euch schonmal im voraus für eure Hilfe.
opcode
10/04/2011 - Mabinogi - 2 Replies
What is opcode? I can guest it is a code which is for doing things.. but I don't know what is it exactly Please tell me thanks
Opcode need Help
03/08/2011 - SRO Coding Corner - 10 Replies
hi this get data from 3015(OpCode) Player1 15FF0D02 = PlayerID 44656D6F6E5368616954346E = PlayerName
Someone know what mean this opcode ?
12/03/2010 - SRO Coding Corner - 7 Replies
http://img835.imageshack.us/img835/8371/95671826.j pg is because of capture the flag or what ? ...
2 Bytes oder 4 Bytes ?
02/13/2010 - Kal Online - 3 Replies
Erm wenn ich nach cooldowns schaue für Mockery mit der UCE such ich dann mit 2 Bytes oder 4 Bytes ??



All times are GMT +2. The time now is 19:10.


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.