Autor |
Beitrag |
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 19:53
naja also probieren sollte man das net unbedingt, man kann ja einfach schaun wie viele bytes man noppen muss
www.uall.org/addr.JPG
daran erkennste das es 6 bytes sind
desweiteren muss der assembler code nicht immer an der selben adresse sein, einfach aus dem grund da die engine in einer dll ausgelagert ist, bzw valve sich nen eigenen dll loader gemacht hat
und so wie ich das hier rausgelesen habe hat keiner von euch beiden so viel ahnung über den aufbau einer exe, bzw assembler (soll nu net heißen das ihr dumm seid  )
aber es gibt verschiedene methode auch die adresse des assembler codes dynamisch zu bekommen
hab leider keine tutorials mehr da, hatte mal eins für CS 2D das der nebel weg ist (no fog)
desweiteren solltest dir im klaren sein das es nur im singleplayer modus funktioniert da es 2 unterschiedliche client.dlls gibt
wenn CS bischen aktiver spielst kennste mich ja vielleicht ;>
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mo 10.01.05 19:56
F34r0fTh3D4rk hat folgendes geschrieben: | bei mir hängt das spiel danach auch net mehr es stürzt gleich ab ich finds auch besser |
??? Das kann aber nich sein, gelle?? Weil wir freezen ja einfach nochmal dieselbe Adresse, warum soll sich also was ändern??
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.01.05 19:56
ich spiele jetzt source weil 1.6 nicht mehr geht
ich kenne ogc aber dich net erzähl mal
ventrilo garnich im system tray ich find da unten nervt es immer so rum 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.01.05 19:59
mit 6 funktioniert es ja auch aber wenn ich sterbe kackt es ab
geht es im multiplayer denn auch wenn ichs da nochmal mache ?
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 19:59
kurze info:
OGC = Online Game Cheats
CD = Cheatings Death ( www.unitedadmins.com, Anti Cheat Programm)
me = CDD Coder (Cheatings Death`s Death, www.uall.org)
einer der bekanntesten cheat programmierer für CS
und leidenschaftlicher HL debugger(er?)
im multiplayer wirste das nicht hinbekommen, es sei den ndu machst den server auf
dort kannste lediglich die anzeige ändern d.h. bei dir steht dann du hast 16000 $ oder halt 500 Schuss oder 999999 health
aber der server speichert die variablen d.h. wenn du getroffen wirst, ändert sich die variable aufm server und irgendwann lässt der dich net mehr schiessen
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Mo 10.01.05 20:01
F34r0fTh3D4rk hat folgendes geschrieben: | ich kenne ogc aber dich net erzähl mal |
Hey, hey, nich offtopic werden!!
@uall@ogc
Wo genau soll man da sehen wie viele Bytes, was braucht??
@F34r0fTh3D4rk
Hast du meinen Edit von dem vorletzten Post gesehen??
_________________ Steht der Bauer im Gemüse, hat er später grüne Füße.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.01.05 20:03
wurden die programmierer von ogc nich von valve verklagt ?
ogc ging bei mir noch nie, kA warum
ist cdd das tool welches cd simuliert und somit so tut als wäre alles in ordnung aber in wirklichkeit hat der client die fetten cheats am start ?
ist nicht gerade sowas in der esl vorgekommen mit deinem tool ?
unser clan ist deshalb nämlich aus der esl ausgetreten
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 20:12
genau das tool war es :> aber waurm gleich deshalb ausse ESL raus
wirst eh bald nen artikel auf mTw lesen können wo ziemlich viel näheres über cheaten drin steht
also du erkennst das auf dem pic daran
0044C86C 89917C0D0000 mov [ecx+$00000d7c], edx
^------------ assembler code
^-------- opcode in hex (was in der hl.exe drinsteht wenn sie mit hexeditor öffnest
^-- adresse in der HL.exe (die ausführbare exe fängt zu 99% imm bei 00400000 an)
8991 steht für mov [ecx+$adresse], edx
7c0d0000 -> umgedreht als hex -> 00000d7c ist die adresse
ECX und EDX sind register
in EDX steht halt das geld oder health jenachdem
mov [...], ...
schreibt an die stelle von dem ersten ... nen wert
als als bsp.
ECX = $00480000
EDX = 100 (dezimal / HP anzeige)
dann macht der befehl
an adresse $00480000+$00000D7C nen ascii 100
89917C0D0000 <- durch 909090909090 erstetzen und du hast den befehl gelöscht (überschriben mit NOP)
und es wird nix mehr an die adresse geschrieben
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 10.01.05 20:13
uall@ogc hat folgendes geschrieben: |
aber es gibt verschiedene methode auch die adresse des assembler codes dynamisch zu bekommen
|
erzähl mal, würd mich intressieren. vielleicht weisst du ja auch wie man die dynamisch erteilten speicherpositionen von Datenwerten rausfindet (wie z.b. AmmoCount)
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 10.01.05 20:15
jetzt glaub ich habs verstanden  aber das spiel stürzt ab wenn ich sterbe
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 20:18
also ist das jetzt für die health anzeige?
wenn ja ändert die sich denn wenn du nur angeschossen wirst?
@retnyg hab da noch eins meiner tuts gefunden
www.mpcheatz.com/wbb...readid=6147&sid=
kannst dir das ja mal anschauen da sieht man auch das der code in nem anderen speicherbereich liegt
und wie man dann da drann kommt bzw sogar die exe patchen kann
|
|
The-FoX
      
Beiträge: 203
Win XP
D6 Pers
|
Verfasst: Mo 10.01.05 21:08
Hallo,
Ich habe da noch eine andere Methode gefunden / gesagt bekommen.
Ich habe schon vor ein paar Monaten versucht einen The sims Trainer zu schreiben. Dabei fand ich auch eine Speicherstelle, die ich von 0 in 1 ändern musste. Diese Adresse veränderte sich allerdings dynamisch, und ich habe gegoogelt, gegoogelt, gegoogelt, auch dein Tutorial bei Mpcheatz.de gefunden, doch nichts hat geholfen.
Dann kam ich auf die Idee jemanden zu fragen, der schon mal einen Trainer für das Spiel geschrieben hat, also hab ich auf www.cheats.de einfach gesucht und einen Trainer gefnden, der genau das kann was ich wollte. Hab ihm ne eMail geschrieben und bekam sogar den Code, aber keine Erläuterung...der Herr war nicht so kommukativ so zu sagen.
Also, der Code ist VB:
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: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function ConvertNumberToString(Number As Double) As String Dim b1, b2, b3, b4 If Number < 256 Then ConvertNumberToString = Chr(Number): Exit Function If Number < 65536 Then ConvertNumberToString = Chr(Number And 255) & Chr((Number And 65280) / 256) Exit Function End If b4 = Number And 255: Number = Int(Number / 256) b3 = Number And 255: Number = Int(Number / 256) b2 = Number And 255: Number = Int(Number / 256) b1 = Number And 255: Number = Int(Number / 256) ConvertNumberToString = Chr(b4) & Chr(b3) & Chr(b2) & Chr(b1) End Function
Private Sub cmd01_Click() Dim hwnd As Long, ProcessID As Long, pHandle As Long hwnd = FindWindow(vbNullString, "SIMS") If hwnd = 0 Then lbl01.Caption = "TS not found" Exit Sub End If GetWindowThreadProcessId hwnd, ProcessID pHandle = OpenProcess(&H1F0FFF, False, ProcessID) If pHandle = 0 Then lbl01.Caption = "No process handle found!" Exit Sub End If
WriteProcessMemory Handle, &H6F406FCA, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F406FC9, ConvertNumberToString(&H41), 1, 0& WriteProcessMemory Handle, &H6F406FCE, ConvertNumberToString(&H46), 1, 0& WriteProcessMemory Handle, &H6F406FCF, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F406FD0, ConvertNumberToString(&HF6), 1, 0& WriteProcessMemory Handle, &H6F406FCB, ConvertNumberToString(&HC9), 1, 0& WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H40), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&HEB), 1, 0& WriteProcessMemory Handle, &H6F2A22A4, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F149D3C, ConvertNumberToString(&HEB), 1, 0& WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H40), 1, 0& WriteProcessMemory Handle, &H6F2A22A5, ConvertNumberToString(&HC0), 1, 0& WriteProcessMemory Handle, &H6F2A22A6, ConvertNumberToString(&H42), 1, 0& WriteProcessMemory Handle, &H6F2A22A7, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F2A22A8, ConvertNumberToString(&HD2), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&HEB), 1, 0&
Close Handle, pHandle lbl01.Caption = "Go get her ;-)" End Sub
Private Sub cmd02_Click() Dim hwnd As Long, ProcessID As Long, pHandle As Long hwnd = FindWindow(vbNullString, "SIMS") If hwnd = 0 Then lbl01.Caption = "TS not found" Exit Sub End If GetWindowThreadProcessId hwnd, ProcessID pHandle = OpenProcess(&H1F0FFF, False, ProcessID) If pHandle = 0 Then lbl01.Caption = "No process handle found!" Exit Sub End If
WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H42), 1, 0& WriteProcessMemory Handle, &H6F406FCE, ConvertNumberToString(&H70), 1, 0& WriteProcessMemory Handle, &H6F2A22A6, ConvertNumberToString(&H52), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&H75), 1, 0& WriteProcessMemory Handle, &H6F406FC9, ConvertNumberToString(&H48), 1, 0& WriteProcessMemory Handle, &H6F149D3C, ConvertNumberToString(&H75), 1, 0&
CloseHandle pHandle lbl01.Caption = "Hm, she's hating you again (deactivated)" End Sub |
Wie man sieht, schreibt er einige Speicherstellen um. Ich habe den Code in Delphi konvertiert, und er funktioniert. Aber ich habe absolut keine Ahnung, wie der Autor darauf kommt die Adresse xyz in $40 umzuschreiben...vielleicht kann mir ja jemand mal sagen, wie er vorgegangen ist, meine momentane Lösung funktioniert zwar, aber ich habe nicht ohne grund 4 Monate lang gesucht wie ein verrückter, nur um funktionierenden Code zu bekommen ohne zu verstehen wie er klappt
ICh bin dankbar für jede Hilfe.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 10.01.05 21:30
das sieht aber nicht nach einem dynamisch zugewiesenen speicherbereich aus
genau genommen macht der nichts anderes, als wir hier mit unserm code-schnipsel, wenn ich das richtig lese.
und die paar werte die der umschreibt sind vermutlich irgendwelche assemblerbefehle, die umgebogen werden ^^
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Mo 10.01.05 21:33
retnyg hat folgendes geschrieben: | das sieht aber nicht nach einem dynamisch zugewiesenen speicherbereich aus |
Ich kenne die Problematik aus meinem HL2 Waffencheat. Der Bereich in dem The-Fox's variable gespeichert wird, wird scheinbar schon dynamisch belegt, die Befehle (dir hier wohl umgeschrieben werden) scheinen gleich zu bleiben.
Naja, jetzt bleibt uns nur noch übrig darauf zu warten, was der Meister dazu meint 
|
|
en!gma 
      
Beiträge: 378
win xp
delphi 7.0
|
Verfasst: Mo 10.01.05 21:42
hmm hast du mal nachgeschaut
was die beiden codes machen?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| WriteProcessMemory Handle, &H6F406FCA, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F406FC9, ConvertNumberToString(&H41), 1, 0& WriteProcessMemory Handle, &H6F406FCE, ConvertNumberToString(&H46), 1, 0& WriteProcessMemory Handle, &H6F406FCF, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F406FD0, ConvertNumberToString(&HF6), 1, 0& WriteProcessMemory Handle, &H6F406FCB, ConvertNumberToString(&HC9), 1, 0& WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H40), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&HEB), 1, 0& WriteProcessMemory Handle, &H6F2A22A4, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F149D3C, ConvertNumberToString(&HEB), 1, 0& WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H40), 1, 0& WriteProcessMemory Handle, &H6F2A22A5, ConvertNumberToString(&HC0), 1, 0& WriteProcessMemory Handle, &H6F2A22A6, ConvertNumberToString(&H42), 1, 0& WriteProcessMemory Handle, &H6F2A22A7, ConvertNumberToString(&H33), 1, 0& WriteProcessMemory Handle, &H6F2A22A8, ConvertNumberToString(&HD2), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&HEB), 1, 0& |
und
Quelltext 1: 2: 3: 4: 5: 6:
| WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H42), 1, 0& WriteProcessMemory Handle, &H6F406FCE, ConvertNumberToString(&H70), 1, 0& WriteProcessMemory Handle, &H6F2A22A6, ConvertNumberToString(&H52), 1, 0& WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&H75), 1, 0& WriteProcessMemory Handle, &H6F406FC9, ConvertNumberToString(&H48), 1, 0& WriteProcessMemory Handle, &H6F149D3C, ConvertNumberToString(&H75), 1, 0& |
??
wenn ich das spiel hätte könnte das das villeicht mal nachschaun...
villeicht kannst du ja mal schaun was das erste teil macht was er verändert...
sieht ja fast so aus als wenn er einer variable einen statischen speicher zuweist und diesen dann umschreibt...
villeicht is der speicher von vorher einfach nur unbenutzt oder was auch immer
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 21:51
also ohne das ich das spiel habe
WriteProcessMemory Handle, &H6F406FC9, ConvertNumberToString(&H41), 1, 0&
WriteProcessMemory Handle, &H6F406FCA, ConvertNumberToString(&H33), 1, 0&
WriteProcessMemory Handle, &H6F406FCB, ConvertNumberToString(&HC9), 1, 0&
WriteProcessMemory Handle, &H6F406FCE, ConvertNumberToString(&H46), 1, 0&
WriteProcessMemory Handle, &H6F406FCF, ConvertNumberToString(&H33), 1, 0&
WriteProcessMemory Handle, &H6F406FD0, ConvertNumberToString(&HF6), 1, 0&
WriteProcessMemory Handle, &H6F2A22A3, ConvertNumberToString(&H40), 1, 0&
WriteProcessMemory Handle, &H6F2A22A4, ConvertNumberToString(&H33), 1, 0&
WriteProcessMemory Handle, &H6F2A22A5, ConvertNumberToString(&HC0), 1, 0&
WriteProcessMemory Handle, &H6F2A22A6, ConvertNumberToString(&H42), 1, 0&
WriteProcessMemory Handle, &H6F2A22A7, ConvertNumberToString(&H33), 1, 0&
WriteProcessMemory Handle, &H6F2A22A8, ConvertNumberToString(&HD2), 1, 0&
WriteProcessMemory Handle, &H6F148E58, ConvertNumberToString(&HEB), 1, 0&
WriteProcessMemory Handle, &H6F149D3C, ConvertNumberToString(&HEB), 1, 0&
ich hab das mal sortiert, einige WPM waren doppelt
es handelt sich dabei um eine dll die er wahrscheinlich patched
die beiden einzelnen EBs sind short jumps und verursachen im code das immer gesprungen wird, also wird davor etwas vom spiel
sehr wahrscheinlich geprüft mit cmp oder test
die 40 bzw 41 ist nen "inc Register" komischerweise wird aber beim 1. fall das register darauf wieder gexort also auf 0 gesetzt
33 steht für
xor register, register -> mov register, 0
auch ist mir gleich aufgefallen das beim 1 fall ne adresse fehlt -> an dieser wird wahrscheinlich ein einzelner byte befehl stehen wie push oder nop, schön ist es nicht wenn man den auch wenns sinnlos ist noch selber mal da reinschreibt
aber ohne dll bzw mehr infos kann ich dir da leider net weiterhelfen
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 10.01.05 21:56
hier www.google.at/search...WMINIMIZED&hl=de
gibts ein programm zum download, das den speicher eines prozesses abspeichert. wenn du einen Dump von deinem Sims-Spiel machst, könnten wir dir sicher weiterhelfen.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 10.01.05 22:21
uall@ogc hat folgendes geschrieben: |
es handelt sich dabei um eine dll die er wahrscheinlich patched
|
ich nehm mal an du erkennst das an der speicherposi, aber an was genau ?
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 10.01.05 22:37
naja da wo der das hinschreibt
6F2A22A8 z.b.
ne dll beginnt immer an einer adresse X*0x10000
in dem fall z.b. bei 0x6f2a0000 oder 0x6f200000 oder 0x6f100000 oder oder oder
das es patches sind die häufig vorkommen und sogar einen sinn ergeben
EB = jmp
xor eax, eax z.b.
wird es sich um assemblercodes handeln
und da exe speicher sehr wahrscheinlich an 0x00040000 gemaped wird kannes der net sein
und da es auch auf anderen PCs fuznt wirds nicht dynamisch sein
also wird die DLL ihre "richtige" image base adresse bekommen (ohne reloc patches) was bei dynamischen speicher über virtuallalloc z.b. nicht sein wird
also denk ich mal isses ne DLL das würde auch als einziges einen sinn ergeben
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Sa 15.01.05 16:41
Hab auch mal wider ne Frage, bei Virtua Tennis gibts manchmal ne zeitbeschränkung.
Die läuft dann etwa nach dem Schema 30:00 sec -> 29:99 -> 29:98 -> 29:97. Es läuft also mit 100'stel Sekunden nach unten.
Ich finde diesen wert aber einfach nicht mit TSearch. Weissjemand wie das Spiel die Zeit evt. speichern könnte?
Wenn ich nach 2999 suche, wenn die Zeit auf 29:99 steht findet er nichts.
Ebensowenig wie wenn ich nur nach 29 suche.
|
|
|