• Trainer
  • Forums
  • Suche
  • Members
  • Kalender
  • Hilfe
  • Extras
Forum stats
Show team
Neue Beiträge ansehen
Heutige Beiträge ansehen
Home of Gamehacking - Archiv
Login to account Create an account
Login
Benutzername:
Passwort: Passwort vergessen?
 



  Home of Gamehacking - Archiv Gamehacking Gamehacking
1 2 3 4 5 ... 8 Weiter »
Cheat Engine - Probleme mit Assembler

Seiten (2): 1 2 Weiter »
Ansichts-Optionen
Cheat Engine - Probleme mit Assembler
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#1
23.01.2018, 19:54
Servus!
Ich versuche mich gerade bei DarkSoulsIII daran, dass Gegner Schaden bekommen und ich nicht.
Ich hab schon herausgefunden wie ich mich evtl. identifizieren kann, mein Problem ist, dass wenn dann eines der drei Szenarien passiert:
Monster und Ich bekommen trotzdem Schaden
Keiner bekommt Schaden
Spiel verabschiedet sich

Hier erst einmal der Code:

Code:
1
2
3
4
5
6
  pushf
  cmp [rbx+00000130], c0000
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  popf

Es ist egal wie ich es mache:
Das c0000 ist dabei wahrscheinlich das einzigartige meines Charakters
[rbx+00000130] ist dabei ein Text von 6-Zeichen Länge

Als andere Möglichkeit dachte ich mir, dass ich einfach den Integer-Wert von [rbx+00000130] nehme. Gesagt getan:

Code:
1
2
3
4
5
6
7
8
pushf
  push ebx
  cmp ebx, 3145827
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  pop ebx
  popf

Tadaa, wir bekommen beide keinen Schaden!
Und da mein Gegner den Wert 3211363 hat, muss ja irgendwas am Code falsch sein...

Hoffe einer kann mir helfen ^^

Suchen
Antworten
DNA Offline
Administrator
*******
Beiträge: 1.330
Themen: 123
Registriert seit: May 2010
Bewertung: 26
#2
23.01.2018, 21:09
Könntest du etwas mehr von deinem Code hier posten?
Am besten die komplette CI inkl. jmp von und zur cave und dem originalcode.
ACHTUNG: Lesen gefährdet die Dummheit

[Bild: dna-sig.gif]
Suchen
Antworten
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#3
23.01.2018, 21:13 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2018, 22:13 von Shortyoo. Bearbeitungsgrund: Code gespoilert )
Na klar - danke schonmal für die Antwort!




Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[ENABLE]

aobscanmodule(NoHpCons,DarkSoulsIII.exe,89 83 D8 00 00 00 85 C0 55) // should be unique
alloc(newmem,$1000,"DarkSoulsIII.exe"+1B93AB4)

label(code)
label(return)
label(further)

newmem:
  pushf
  push ebx
  cmp ebx, 3145827
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  pop ebx
  popf
code:

  jmp return

NoHpCons:
  jmp newmem
  nop
return:
registersymbol(NoHpCons)

[DISABLE]

NoHpCons:
  db 89 83 D8 00 00 00

unregistersymbol(NoHpCons)
dealloc(newmem)


Wobei genau das der Originalcode ist:
mov [rbx+000000D8],eax
Suchen
Antworten
DNA Offline
Administrator
*******
Beiträge: 1.330
Themen: 123
Registriert seit: May 2010
Bewertung: 26
#4
23.01.2018, 21:27 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2018, 21:29 von DNA.)
Ist das 3145827 der Integer Wert aus ebx?
Wenn ja, dann musst du diesen entweder in Hex umwandeln, um ihn mit
EBX zu vergleichen, oder du musst es in CE so schreiben

Code:
cmp ebx, (int)3145827

EDIT
Und da du EBX ja nur vergleichst, kannst du dir push und pop eigentlich sparen

ACHTUNG: Lesen gefährdet die Dummheit

[Bild: dna-sig.gif]
Suchen
Antworten
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#5
23.01.2018, 21:40 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2018, 21:44 von Shortyoo.)
Vielen Dank erst mal für die Hilfe!
Ich hab mal das (int) davor geschrieben
Code:





Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[ENABLE]

aobscanmodule(NoHpCons,DarkSoulsIII.exe,89 83 D8 00 00 00 85 C0 55) // should be unique
alloc(newmem,$1000,"DarkSoulsIII.exe"+1B93AB4)

label(code)
label(return)
label(further)

newmem:
  pushf
  push ebx
  mov ebx, [rbx+00000130]
  cmp ebx, (int)3145827
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  pop ebx
  popf
code:

  jmp return

NoHpCons:
  jmp newmem
  nop
return:
registersymbol(NoHpCons)

[DISABLE]

NoHpCons:
  db 89 83 D8 00 00 00

unregistersymbol(NoHpCons)
dealloc(newmem)




Und: Das Spiel stürzt ab

Edit:
Dachte man müsste push ebx machen, wenn man den Wert verändert und pop ebx, damit der alte Wert in den Speicher zurück kommt und das Spiel nicht mit meinem Wert fortfährt?
Aber gut, Dankeschön! Smiling
Suchen
Antworten
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#6
23.01.2018, 21:54 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2018, 21:55 von Shortyoo. Bearbeitungsgrund: *DNA )
Lösung:


Es funktioniert nun!
Mir ist was bei den Registern aufgefallen:
Das EAX-Register wollte ich nicht nutzen, da bei dem Befehl:

Code:
mov [rbx+000000D8],eax

eben EAX irgendwo hinein geschoben werden würde und ich nicht wusste, ob es fatal wäre:

Code:
cmp eax, (int)....
pop eax
jz further

zu schreiben, weil ich ja eben compare und danach eax "zurücksetze".
Denke jedoch nicht dass es zu einem Fehler führen würde..
Also hab ich das EBX-Register genutzt und eben gesehen, dass ja in das RBX-Register geschrieben wird... also in die "längere" Version des EBX - ich den Wert von EBX aber geändert habe!
Hab nun also EDX genommen und Tada! Es funktioniert!
Für die Interessenten:





Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[ENABLE]

aobscanmodule(NoHpCons,DarkSoulsIII.exe,89 83 D8 00 00 00 85 C0 55) // should be unique
alloc(newmem,$1000,"DarkSoulsIII.exe"+1B93AB4)

label(code)
label(return)
label(further)

newmem:
  pushf
  push edx
  mov edx, rbx
  mov edx, [edx+130]
  cmp edx, (int)3145827
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  pop edx
  popf
code:

  jmp return

NoHpCons:
  jmp newmem
  nop
return:
registersymbol(NoHpCons)

[DISABLE]

NoHpCons:
  db 89 83 D8 00 00 00

unregistersymbol(NoHpCons)
dealloc(newmem)

Man könnte bestimmt auch gleich:
mov edx, [rbx+00000130]
schreiben Smiling

Vielen Dank für die Hilfe, DNA!
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#7
24.01.2018, 20:20 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2018, 20:21 von iNvIcTUs oRCuS.)
Welches Register Du letztenendes nimmst ist völlig egal...
Es kommt nur drauf an wie du deine Codecave schreibst...
Mit EAX und EBX hätte das auch funktioniert, aber wenn Du dir schon eine
eigene Lösung erarbeitet hast ist doch gut. Weiter so...  Cool

Ürigens... Bei diesem Spiel gibt es auch eine Memory Check Routine...
Nur mal so als Tipp...
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#8
28.01.2018, 13:47
Danke für den Tipp, iNvIcTUs oRCuS.
Jedoch bin ich erst seit neuerem in diesem Gebiet unterwegs und muss daher gestehen, dass ich nicht weiß, was diese Memory Check Routine ist.
Wenn ich raten müsste würde ich darauf tippen, dass es etwas mit AntiCheat zu tun hat. In dem Sinne, dass das Spiel Veränderungen im Speicher bemerkt und diese an den Server meldet. Bin ich da soweit richtig?

Grüße Smiling
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#9
28.01.2018, 22:23 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2018, 22:41 von iNvIcTUs oRCuS.)
Ist insofern richtig... Das Spiel sendet aber nix an einen Server...
Es prüft sich nur selbstständig auf Veränderungen im Speicher und schreibt einfach die
Originalcodes wieder zurück... Quasi so als wäre gar kein Cheat ausgeführt worden.
Wenn ich das noch richtig in Erinnerung habe auch nur dann wenn man einen Cheat mit
Erfahrungspunkten realisieren will...

Übrigens... Wegen Deiner Lösung...
Wenn das hier Deine Lösung ist:

ASM Code
1
2
3
4
5
6
7
8
9
10
11
12
newmem:
  pushf
  push edx
  mov edx, rbx
  mov edx, [edx+130]
  cmp edx, (int)3145827
  je further
   mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
  further:
  pop edx
  popf
code:


Dann könnteste das auch gleich so schreiben...
Is kürzer und mit verlaub... Auch eleganter... ;-)

ASM Code
newmem:
  cmp [rbx+130], (int)3145827
  je Code
  mov [rbx+000000D8],eax  //Wenn also nicht der Player, damage zufügen
Code:


grEEtZ iNvIcTUs

Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Shortyoo Offline
Junior Member
**
Beiträge: 15
Themen: 2
Registriert seit: Jan 2018
Bewertung: 0
#10
28.01.2018, 22:53 (Dieser Beitrag wurde zuletzt bearbeitet: 29.01.2018, 19:37 von Shortyoo.)
Danke für die Antwort, Invictus!

Also bis jetzt hat alles funktioniert, was ich erreichen wollte - soll heißen es wurde noch nichts wieder zurück geschrieben.

Deine Verbesserung ist wirklich gut, muss ich sagen!
Danke für den Hinweis Smiling

Grüße Smiling

Edit: Du hattest Recht. Nach einer Weile wurde der Speicher wieder zurückgesetzt
Suchen
Antworten
Share Thread:            
Seiten (2): 1 2 Weiter »


  • Druckversion anzeigen
  • Thema abonnieren


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste

  • Kontakt
  • Forum team
  • Forum stats
  • Nach oben
 
  • RSS-Synchronisation
  • Lite mode
  • Home of Gamehacking - Archiv
  • Help
 
Forum software by © MyBB - Theme © iAndrew 2014



Linearer Modus
Baumstrukturmodus