Home of Gamehacking - Archiv
CoD-BlackOps - OneHitKill - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=3)
+--- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=6)
+--- Thema: CoD-BlackOps - OneHitKill (/showthread.php?tid=1289)

Seiten: 1 2 3


RE: CoD-BlackOps - OneHitKill - iNvIcTUs oRCuS - 21.12.2012

Ja okay vielleicht hab ich das nicht weiter ausführlich erläutert...
Wenn ich z.B. einen One Hit Kill versuche zu realisieren dann folgendermaßen...
1. Suche ich die Adresse des Spielers
2. Suche ich die Befehle raus die auf diese Adresse zugreifen
- das geschieht per Rechtsklick auf die Adresse und "Find out what accesses..."
3. Dann lasse ich mir anzeigen welche Adressen alle durch einen Befehl laufen.
- Das geschieht im Memory Fenster mit einem Rechtsklick auf den jeweiligen Befehl und "Find out what addresses this instruction accesses"
4. Dabei taucht dann meistens auch eine gegnerische Adresse auf.
5. Mit dieser Adresse verfahre ich ebenfalls nach den obigen Punkt 2

Das einfachste ist dann natürlich wenn jetzt Befehle auftauchen die nur für gegnerische Adresse gelten. Wenn nicht dann muss die Speicher Struktur analysiert werden. Das hört sich zwar erstmal schwierig an isses aber eigentlich nicht, weil Cheat Engine ja auch schon Möglichkeiten mitbringt die einem wahnsinnig weiterhelfen und eben den Vorteil gegenüber eines reinen Debuggers ausspielen.

Mal sehen, vielleicht mach ich auch noch ein Tutorial eines One Hit Kills wo ich das anhand meiner Erläuterung zeige...


RE: CoD-BlackOps - OneHitKill - Struppi - 21.12.2012

In CheatEngine sieht das bei mir nun so aus...

[code=ASM]
[ENABLE]
alloc(newmem,12288)
label(originalcode)
label(returnhere)
label(exit)

newmem:
cmp eax,01AFFFD4
mov dword ptr[eax+0x184],0x0

originalcode:
sub [eax+0x184],ebx
mov eax,[esp+24]
movzx ecx,word ptr[esp+28]

exit:
jmp returnhere

"BlackOps.exe"+3CE3E1:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"BlackOps.exe"+3CE3E1:
sub [eax+0x184],ebx
[/code]


Klappt alles wunderbar, aber CodeCave für VB funktioniert irgendwie nicht.
Also da stürzt das Spiel ab und über CheatEngine nicht.


RE: CoD-BlackOps - OneHitKill - iNvIcTUs oRCuS - 21.12.2012

Ich gehe mal davon aus das deine Codecave in VB genauso aussieht?!

Müsste man nur noch wissen wo Deine Codecave geschrieben wird. Es könnte durchaus sein das Du bzw. Dein Trainer keine Schreibrechte auf diesen Speicherbereich hat.
Oder Du hast noch nen Fehler mit den Sprüngen drin...


RE: CoD-BlackOps - OneHitKill - DNA - 21.12.2012

Geht übrigens auch anders:

[code=ASM]
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048) //2kb should be enough
label(returnhere)
label(originalcode)
label(exit)

newmem:
mov ebx,(int)999999

originalcode:
sub [eax+00000184],ebx

exit:
jmp returnhere

"BlackOps.exe"+3CE3E1:
jmp newmem
nop
returnhere:


[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"BlackOps.exe"+3CE3E1:
sub [eax+00000184],ebx
//Alt: db 29 98 84 01 00 00[/code]

Was genau funktioniert denn bei VB nicht?


RE: CoD-BlackOps - OneHitKill - Struppi - 21.12.2012

Also für VB sieht das so aus...

Code:
1
2
3
4
5
6
7
Dim caveaddr = &H009A2720
Dim origaddr = &H007CE3E1
RemoveProtection (ProcName,caveaddr, 35)
Dim cavebytes() As Byte = {&H3D, &HD4, &HFF, &HAF, &H01, &HC7, &H80, &H84, &H01, &H00, &H00, &H00, &H00, &H00, &H00, &H29, &H98, &H84, &H01, &H00, &H00, &H8B, &H44, &H24, &H24, &H0F, &HB7, &H4C, &H24, &H28, &HE9, &HC4, &HE3, &HD5, &HFB}
Dim origbytes() As Byte = {&H29, &H98, &H84, &H01, &H00, &H00}
autopatcher (caveaddr,cavebytes)
autopatcher (origaddr,origbytes)


Aber das bringt das Spiel zum absturz.



RE: CoD-BlackOps - OneHitKill - Acubra - 21.12.2012

Hey,
bist du sicher das der "Compare-Befehl" wirklich von Nöten ist? Anscheinend laufen durch diesen Opcode doch nur die Adressen der Gegner, also musst du gar nicht entscheiden ob Gegner oder Spieler von diesem Befehl betroffen ist. Auch führst du keinen Conditional Jump nach dem Compare aus, also du vergleichst zwar zwei Sachen, fängst aber mit der Information nichts weiter an. Du veränderst somit auch unnötigerweise das z-Flag.
Außerdem setzt du die Gegner Hp auf 0, bevor ebx davon abgezogen wird. Dies könnte bei manchen Spielen zu Problemen führen, die nicht "wissen" wie man mit negativen Werten umgeht.
Zu deinem Crashproblem kann ich dir nicht helfen.


RE: CoD-BlackOps - OneHitKill - iNvIcTUs oRCuS - 21.12.2012

Und der Sprung vom Originalcode führt auch wirklich zur Codecave?
Was ich aber eher glaube ist das der Jump aus der Codecave zurück zum Originalcode falsch ist. Cool


RE: CoD-BlackOps - OneHitKill - DNA - 22.12.2012

Ich lege dir die Ratschläge von Acubra und silent ans Herz ...
Nimm das von mir gepostete Script, da in deinem Script viel
unnötiges ist, was das Spiel leicht zum crashen bringen kann, wie Acubra
bereits schrieb.

Wenn das Spiel mit deinem VB Code abstürzt, dann scheint irgendwas mit der
Codecave nicht zu stimmen, da du den Originalcode nicht durch einen JMP
überschreibst ... du überschreibst den Originalcode durch den Originalcode

Code:
Dim origbytes() As Byte = {&H29, &H98, &H84, &H01, &H00, &H00}


Code:
sub [eax+00000184],ebx
//Alt: db 29 98 84 01 00 00


Hast du für den VB code den TMKtoVB converter von mir benutzt?


RE: CoD-BlackOps - OneHitKill - Struppi - 22.12.2012

Also TMKtoVB 2.0 benutze ich und da ist folgende auswertung:


[code=VB]
Dim caveaddr = &H00400348
Dim origaddr = &H007CE3E1
RemoveProtection (ProcName, caveaddr, 32)
Dim cavebytes() As Byte = {&H3D, &HD4, &HFF, &HAF, &H01, &HC7, &H80, &H84, &H01, &H00, &H00, &H01, &H00, &H00, &H00, &H29, &H98, &H84, &H01, &H00, &H00, &HE9, &H85, &HE0, &H3C, &H00, &HE9, &H62, &H1F, &HC3, &HFF, &H90}
Dim origbytes() As Byte = {&H29, &H98, &H84, &H01, &H00, &H00}
autopatcher (caveaddr,cavebytes)
autopatcher (origaddr,origbytes)
[/code]


In VB sieht es so aus:


[code=VB]
#Region "OneHitKill"
Private Sub Timer6_Tick(sender As System.Object, e As System.EventArgs) Handles Timer6.Tick

'OneHitKill.
If GetAsyncKeyState(VK_NUMPAD3) Then
GetProcessId(ProcName)
If OneHitKill = 0 Then

Dim caveaddr = &H400348
RemoveProtection(ProcName, caveaddr, 32)
Dim cavebytes() As Byte = {&H3D, &HD4, &HFF, &HAF, &H1, &HC7, &H80, &H84, &H1, &H0, &H0, &H1, &H0, &H0, &H0, &H29, &H98, &H84, &H1, &H0, &H0, &HE9, &H85, &HE0, &H3C, &H0, &HE9, &H62, &H1F, &HC3, &HFF, &H90}
autopatcher(caveaddr, cavebytes)

OneHitKill = 1

ElseIf OneHitKill = 1 Then

Dim origaddr = &H7CE3E1
Dim origbytes() As Byte = {&H29, &H98, &H84, &H1, &H0, &H0}
autopatcher(origaddr, origbytes)
OneHitKill = 0
End If
End If
End Sub
#End Region
[/code]


Poke:

Code:
Poke 00400348 3D D4 FF AF 01 C7 80 84 01 00 00 01 00 00 00 29 98 84 01 00 00 E9 85 E0 3C 00
Poke 007CE3E1 E9 62 1F C3 FF 90

Poke 007CE3E1 29 98 84 01 00 00



Wenn ich den Trainer starte passiert nichts, außer das nur On oder Off zu hören ist. Beim CheatEngine - Memory Viewer sehe ich auch, das da nichts passiert.
Mach ich es aber über Cheat Engine, wird in &H400348 der Code geschrieben und die Adresse &H7CE3E1 führt den jmp aus. Mach ich es aus, dann ist in der Adresse &H7CE3E1 der Orginal Code drin. Nur über den VB TRainer passiert nichts und das Spiel stürzt auch nicht ab.


RE: CoD-BlackOps - OneHitKill - DNA - 23.12.2012

Das ist klar, da du mit VB auch nur die Codecave schreibst, aber nicht den Sprung vom Originalcode dorthin Wink

Versuch das mal:

[code=VB]Private Sub Timer6_Tick(sender As System.Object, e As System.EventArgs) Handles Timer6.Tick

'OneHitKill.
If GetAsyncKeyState(VK_NUMPAD3) Then
GetProcessId(ProcName)
If OneHitKill = 0 Then

Dim caveaddr = &H400348
Dim origaddr = &H7CE3E1
RemoveProtection(ProcName, caveaddr, 32)
Dim cavebytes() As Byte = {&H3D, &HD4, &HFF, &HAF, &H1, &HC7, &H80, &H84, &H1, &H0, &H0, &H1, &H0, &H0, &H0, &H29, &H98, &H84, &H1, &H0, &H0, &HE9, &H85, &HE0, &H3C, &H0, &HE9, &H62, &H1F, &HC3, &HFF, &H90}
Dim origbytes() As Byte = {&HE9, &H61, &H1F, &HC3, &HFF, &H90}
autopatcher(caveaddr, cavebytes)
autopatcher(origaddr, origbytes)

OneHitKill = 1

ElseIf OneHitKill = 1 Then

Dim origaddr = &H7CE3E1
Dim origbytes() As Byte = {&H29, &H98, &H84, &H1, &H0, &H0}
autopatcher(origaddr, origbytes)
OneHitKill = 0
End If
End If
End Sub[/code]

Noch eine kurze Frage ... nimmst du für jeden Hotkey einen extra Timer?