[Frage] C++ ASM Coding Change Values

04/05/2013 17:16 ElotrineX™#1
Hey epvp,

Ich habe mich gerade hier Registriert da ich mir hier viel hoffnug mache
Hilfe zu bekommen.

Fakten:
Es ist eine .DLL die ich in ein beliebigen Process Injecten werde um eine Value zu ändern. Mit OllyDBG komm ich an den ASM Befehlen dran.

Ich habe eine Function mit OllyDBG gefunden die mir Interessant vor kommt und nun sehe ich in dieser Function eine Value wo ich denke das die das bewirkt was ich im resultat haben möchte, nehmen wir mal an es ist 12F (hexadezimal), vor der Value ist noch die Befehlsreferenz ADD, das ganze würde dann so aus sehen:
PHP Code:
ADD     12F 
Jetzt kommt noch der Akkumulator EAX vor der Value.
PHP Code:
ADD     EAX12F 
Und hier dann noch der MOV:
PHP Code:
MOV     ECXDWORD PTR DS:[0x123FFF]
ADD     EAX12F 
Also jetzt zur eigentlichen Frage:
Ich möchte die 12F (hexadezimal) beispielsweise auf 50 (dezimal) setzen,
wie gehe ich da vor?

Dies ist den Code den ich benutze:


Dies hatte ich ohne Erfolg getestet:


Hoffentlich bin ich hier richtig.

MfG
ElotrineX
04/05/2013 20:55 Nightblizard#2
Du musst den Machinencode an der Stelle (entweder in der Datei selber oder im Arbeitsspeicher) umändern.

"ADD EAX, 12F" dürfte das hier sein:
05 2F 01 00 00

"ADD EAX, 32" (also 50 in hexadezimal) ist folgendes:
05 32 00 00 00


Siehe:
[Only registered and activated users can see links. Click Here To Register...]
04/05/2013 21:01 Omdi#3
Du musst schon die Addresse angeben, anders funktioniert das ganze nicht (Außnahme : Hooks)

Beispiel :
Code:
FF98ED13 - 8B 0C 25 FF3F1200     - mov ecx,[00123FFF]
FF98ED1A - 05 2F010000              - add eax,0000012F
Da müsstest du wie folgt vorgehen um die 0x12F zu verändern.

Code:
void Funktion1()
{
DWORD dwAddress = 0xFF98ED1A;
DWORD dwNewValue = 50;

//1.Methode - memcpy
memcpy(((void*)(dwAddress + 1)), &dwNewValue, sizeof(DWORD));

//2.Methode - dereferenzieren
*(DWORD*)(dwAddress + 1) = dwNewValue;
}
04/05/2013 21:04 ElotrineX™#4
Also brauch ich die Adresse doch o.O

Dein code ist für mich etwas undurchblickbar, das ist doch kein asm mehr:confused:.
Kannst du bitte noch erklären warum zb dwAdress + 1 ist?

Hat das was mit Offsets zu tun?
04/05/2013 21:36 Omdi#5
Quote:
Originally Posted by ElotrineX™ View Post
Also brauch ich die Adresse doch o.O

Dein code ist für mich etwas undurchblickbar, das ist doch kein asm mehr:confused:.
Kannst du bitte noch erklären warum zb dwAdress + 1 ist?

Hat das was mit Offsets zu tun?
Das ganze kann man natürlich auch in ASM machen :P

Code:
[COLOR=Red]FF98ED1A[/COLOR] - [COLOR=Red]05[/COLOR] [COLOR=DarkSlateBlue]2F010000 [/COLOR]             - [COLOR=Red]add eax[/COLOR],[COLOR=DarkSlateBlue]0000012F[/COLOR]
[COLOR=DarkSlateBlue]FF98ED1B[/COLOR]
FF98ED1A hat den Wert 05, kann man oben auch schön sehen.
Da du aber nur die 12F ändern willst und nicht die ganze Instruction musst du die Addresse um 1 erhöhen. FF98ED1A + 1 (FF98ED1B) hat nun den Wert 12F (siehe oben). Nun kannst du der Addresse einfach einen neuen Wert zuweisen.
04/05/2013 21:49 ElotrineX™#6
Vielen Danke.

Aber wie wird das in ASM geschrieben :D ?

Ahhh jetzt hab ichs! Glaub ich :)

So?:
Code:
Das vorher irgendwo definieren...
DWORD adresse1 = 0xFF98ED1B
Code:
[COLOR=Red][COLOR=Black]mov ecx,[0x123FFF]
add eax, 32
call [/COLOR][/COLOR]adresse1
richtig oder?
04/05/2013 21:57 Omdi#7
Nein, so müsste das aussehen :

Code:
mov eax, [addresse1]
mov edi, 0x32 //50
mov [eax], edi
04/14/2013 10:54 reis0718#8
darkorbit cheat me, would you?
04/15/2013 10:23 Cambios#9
das ganze kannst gut mit BYTE Patching machen mein lieber^^
Dazu einfach die Bytecodes für die Asm befehle nehmen, dir die Adresse an der sie stehen suchen und mit Memory Write überschreiben (patching). So kannst das gut machen, hab so Damals auch mein Metin hack gemacht (noclip)^^

Zur verdeutlichung wie ich das meine -> [Only registered and activated users can see links. Click Here To Register...] <-

p.s: Offsets vom Hack sind sau alt, gut 1-2 Jahre alt.. schreibt mir also bitte keine Pm´s mit "Dein Hack funktioniert nicht!!?!!!".. das dient nur zur verdeutlichung des prinzip des Patchen für den TE..ja?Gut