Mit einer dll JNE in JMP ändern

10/20/2009 19:25 Neyoel#1
Hi ich hab malwieder ne frage ^^

Und zwar möchte ich einen Zoomhack machen und muss dazu folgenden JNE in einen JMP ändern.

Code:
CPU Disasm
Address        Hex dump              Command
0081D434        75 10         JNE SHORT Game.0071F046
Nun möchte ich das ganze aber nicht im disassembler ändern und speichern, weil HackShield sonst merkt dass die datei nicht die echte ist ^^
Also hab ich mit gedacht, dass ich das per dll mache die ich ins game injiziere...

Nun zu meiner Frage..
ich hab folgenden Code geschrieben (nur ein ausschnitt):

Code:
DWORD oldProtect = 0;
DWORD destAdress = 0x0081D434;
DWORD data = 0xEB;
DWORD PID = GetCurrentProcessId();
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);

VirtualProtect((void*)(destAdress), 1, PAGE_READWRITE, &oldProtect);
WriteProcessMemory(hProc, (void*)(destAdress), (void*)(data), 1, NULL);
VirtualProtect((void*)(destAdress), 1, oldProtect, &oldProtect);

Der compiler sagt nichts, aber funktionieren tut es trotzdem nicht.. liegt das evtl am code? hab ich einen denkfehler drin? oder geht es sowieso nicht so wie ich es mir denke? oder ist HackShield einfach schlauer =P

danke im voraus
regs,
Neyoel
10/20/2009 19:48 MrSm!th#2
warum nutzt du in einer dll WriteProcessMemory?
10/20/2009 20:00 ^darkwing#3
Zum Code: Scheint für mich nicht falsch zu sein aber habe mich mit sowas noch nicht genau auseinander gesetzt

Ansonsten: Ich könnte mir vorstellen das es am Injector liegt. Bei Vista als Administrator ausführen. Vll. ne MessageBox in der DLL ausgeben um sicher zu gehen, dass die Injection geklappt hat.

Wie schon gesagt, wenn du im Prozess drinnen bist, kannst Zeiger benutzen oder memcpy Funktion.
10/20/2009 20:14 Neyoel#4
also beim testen weiss ich zu 100% dass die dll geladen wird, weil ich sie beim testen nicht injiziere, sondern über die IAT mitladen lasse .. wenn ichs so mach gehts spiel aber nach 3 min wieder aus .. scheiss hackshield =P

me msgbox is auch drin die hab ich nur nich als wichtig genug gefunden sie hier mit zu posten =P ich benutze WinXP Pro SP2 also an fehlenden adminrechten kanns auch ncih liegen ^^

desswegen frag ich ja ob an meiner denkweise evtl was falsch ist .. MrSm!th welche funktion sollte ich denn sonst benutzen? kenn sonst keine xD

regs,
Neyoel
10/20/2009 20:21 ms​#5
Quote:
Originally Posted by Neyoel View Post
MrSm!th welche funktion sollte ich denn sonst benutzen? kenn sonst keine xD
Code:
*(BYTE *)0x0081D434 = 0xEB
WriteProcessMemory() wird wahrscheinlich von HackShield gehookt und funktioniert deshalb so nicht.

Edit: Was mir gerade auffällt... Ich glaube vor der Variable im 3. Parameter von WriteProcessMemory muss noch ein &-Operator. Also dass es dann so aussieht: (void*)(&data)
10/20/2009 20:22 MrSm!th#6
lies den post über dir
WriteProcessMemory ist dafür gedacht, einen Fremdprozess zu modifizieren
10/20/2009 20:37 Adroxxx#7
PHP Code:
unsigned long address1 0x00A204EF;
const 
BYTE ZoomHack[5]= {0x33,0xC0,0x90,0x90,0x90};
DWORD dwProtect;

VirtualProtect((LPVOID)address1,5,PAGE_EXECUTE_READWRITE, &dwProtect);
memcpy((LPVOID)address1,&ZoomHack1,5);
VirtualProtect((LPVOID)address1,5,dwProtectNULL); 
Musst nur die Adesse und den Code von Zoomhack umändern.
Bei VirtualProtect und memcpy musst du die größe zZ 5 auch umändern in wie viel bytes du schreiben willst.

Handle und OpenProcess brauchst du nicht, da du die DLL ja schon in den Prozess inizierst und ihn dann nicht öffnen musst.
10/20/2009 20:57 Neyoel#8
danke Adroxxx es geht =)
nun noch ein paar anpassungen und ich hab einen weiteren ingame command =D
nochmal danke