Home of Gamehacking - Archiv

Normale Version: CE Script in C++
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey HomeofGamehacking Crew, nach langer Zeit hab ichs geschafft mich wieder einloggen zu können^^ Und "mir" liegt gleich ne brennende Frage auf der Zunge.

Wurm es geht, steht ja schon im Thread namen.

Und zwar folgendes Problem, ich habe sogut wie nichts mit c++ am hut, habe jedoch einen Kollegen der meinenCE Script gerne in sein c++ project implementieren würde. Ihm fehlt da glaube aber das nötige wissen.

Und zwar gehtz meines erachtes nach um die erstellen von ner CodeCave um den CE Script umwandeln zu können.

Hier erstmal der Script.

Code:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem:
cmp byte ptr [eax+06],0
jne originalcode
mov byte ptr [eax+06],1

originalcode:
test byte ptr [eax+06],01
je 123.exe+123456

exit:
jmp returnhere

"123.exe"+123455
jmp newmem
nop
returnhere:


 
 
[DISABLE]
dealloc(newmem)
"123.exe"+123455
test byte ptr [eax+06],01
je 123.exe+123456


Könnt mir da vlt jemand ein Beispiel zu erklären wie das ungefähr auszusehen hat, damit ich ihm das sagen kann? Wäre echt Klasse.
Beste Grüße, l0wb1t

Hey,
das ist eigentlich ganz einfach.
Anstatt newmem (was ja einfach alloziierter Speicher ist) kann sich dein Kumpel eine CodeCave suchen. Also einen Bereich im Speicher, in welchem er Lese- und Schreibrechte besitzt. Dort kann er nun die benötigten Befehle schreiben (per WriteProcessMemory), also:

Code:
cmp byte ptr [eax+06],0
jne originalcode
mov byte ptr [eax+06],1
jmp originalcode

Als nächstes schreibt er per WriteProcessMemory an die Originalcode Adresse ("123.exe"+123455) den Jump zur CodeCave Adresse (NOP's nicht vergessen!).

Er muss eben wissen wie die WriteProcessMemory API funktioniert, also das man Bytes schreibt und nicht die Befehle selbst.

Noch ein bisschen Pseudo C++ Code

Code:
//CodeCave schreiben
WriteProcessMemory(hProcess, (LPVOID)CodeCaveAddress, (LPCVOID)CodeCaveBytes, sizeof(CodeCaveBytes), 0)
//Originalen Code überschreiben
WriteProcessMemory(hProcess, (LPVOID)OriginalCodeAddress, (LPCVOID)JumpToCodeCave, 5, 0)


Man kann auch einfach anstatt je 123.exe+123456 jmp 123.exe+123456 schreiben. Hätte den selben Effekt wie immer byte ptr [eax+06] auf 1 zu setzen. (In sofern dein Beispiel der Realität entspricht).

(27.01.2013, 19:38)Acubra schrieb: [ -> ]Man kann auch einfach anstatt je 123.exe+123456 jmp 123.exe+123456 schreiben. Hätte den selben Effekt wie immer byte ptr [eax+06] auf 1 zu setzen. (In sofern dein Beispiel der Realität entspricht).

Nicht immer... Grade beim **** von Programmen gibts häufig die Möglichkeit das dass Programm intern mit dem Wert an jener Speicherzelle weiterrechnet bzw. mehrfach abfragt. AnyDVD war damals so ein Kandidat da kann ich mich noch sehr gut dran erinnern. Es war dann eben doch nicht möglich eine DVD zu entschlüsseln. Man was hab ich da lange dran gesessen... Smiling

Kann natürlich bei obiger Situation funktionieren. Würde ich aber dennoch erstmal ausgiebig testen. Ansonsten, so ein Byte ist schnell in den Speicher geschrieben.
Joar also ich glaub er hats entweder aufgegeben, oder wills nicht verstehen.. naja ist ja nicht mein Problem Smiling

Ich arbeite zum Glück nicht damit. Aber Vielen Dank für Eure Hilfe, und die schnellen Antworten. Haben uns Mittlerweile darauf geeinigt, dass antatt es ins C++ Projeklt mit einzubauen, wir den seperaten Trainer von mir mitusen Smiling

Greetz, l0wb1t.