Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 15:49

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Frage wegen Speicherzugriffen

Discussion on Frage wegen Speicherzugriffen within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Hallo,

ich habe mir vor ca einer woche ne Logitech G15 (die Gamer Tastatur mit dem LCD ^^) gekauft und wollte mir nen 'brauchbares' Applet für wow schreiben da das standart ding von wow **** ist

nun ist meine frage wie kann ich mit meinem programm (in c/c++) auf speicher adressen anderer programme zugreifen? so wie programme wie zb CheatEngine es machen. und desweiteren würde ich gerne wissen wie ich an ne statische adresse komme wo die stats (stärke, beweglichkeit, int usw) undauch sache wie rüstung usw gespeichert sind? mit cheatengine habe ich zwar adressen gefunden die die entsprehcendne werte haben aber beim umloggen uaf nen anderen char haben die sich die adressen geändert =/

und bwh (oder bhw oder wie der hack/bot auch immer heist) kann ja zb für das WallClimb ne feste adresse die unabhängig von char immer die selbe ist ausgeben, sowas bäuchte ich für die adnern werte auch ^^



wäre cool wenn mir jemand helfen könnte ^^

MfG DodgeX
Dodge is offline  
Old 08/27/2006, 12:49   #2
 
elite*gold: 0
Join Date: May 2005
Posts: 4,620
Received Thanks: 104
Solltest du es auf einen offizielen Server machen, würde ich dir raten es bei anderen minispielchen zu probieren solltest du was falsch machen kann das zu einen Account Ban führen.
Die Pointer bekommst du zu 90% wenn du in Cheatengine rechtsklick auf die Adresse machst und "See what writes to this adress" klickst, dann musst du ingame irgendwas machen was den Stat verändert oder synchronisiert. Dann machst du ein doppelklick auf die neue adresse und füge sie der Codelist hinzu, bzw du musst überprüfen obs wirklich diese ist indem du auf information drückst und nachschaust ob der Wert für den Stat da drinne steht hinter den asm befehlen, selten kanns auch sein das es eine berechnung ist. Schau dich einfach auf Extalia (google.de) um und mach das Tutorial.exe im CheatEngine Ordner.
Maybe It's Maybelline is offline  
Old 08/27/2006, 12:59   #3
 
mr.rattlz's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 896
Received Thanks: 334
Ich habe so was geschrieben als ich meine G15 bekommen habe, da sich aber bei jedem größeren Patch im Code von WoW etwas verschiebt musste ich mein Programm immer wieder anpassen und das wurde mir dann irgendwann einfach zu ätzend.
Ich weiß schon nicht mal mehr mit welcher Version von WoW es funktioniert hat :P
Falls du Lust hast dich ohne meine Unterstützung durch den Assemblercode zu wühlen kann ich es vielleicht
mal zu Anschauungszwecken hochladen.
mr.rattlz is offline  
Old 08/27/2006, 15:06   #4
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Quote:
Falls du Lust hast dich ohne meine Unterstützung durch den Assemblercode zu wühlen kann ich es vielleicht mal zu Anschauungszwecken hochladen.
Auch wenn ich eigentlich keine ahnung von Assembler habe wäre es nett wenn du es mal uppen könntest^^

ODER wenn du zeit und lust hast mir das nötigste raussuchen und vlt auch so zusammen packen das ich es in c/c++ als funktion verwenden kann (soweit ich weiß kann man asm irgendwie in c/c++ verwenden ) wo ich als parameter einfach nur die adresse angebe und die mir am besten das ergebniss direkt ausspuckt
zb:
Code:
11aa66ff -> 1337
int x = die_asm_func(11aa66ff);
cout << x; //ausgabe 1337
ja ok denke mal sooo easy wirds net gehn xD


Ich hab übrings eben ma das tutorial durchgemacht und muss das tutorial is irgendwie sau einfach o.o

Extalia guck ich mir später mal an wenn ich wieder nen 'vernüpnftigen' Pc zu verfügung habe da auf diesem pc irgendwie alles laggt xD (400MHz mit 128mb ram^^)


MfG DodgeX


PS: danke für die schnellen antworten
Dodge is offline  
Old 08/27/2006, 16:17   #5
 
mr.rattlz's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 896
Received Thanks: 334
Dein Problem mit den Adressen finden löst mein Code nicht
Ich habe lediglich so ein Programm geschrieben wie du es vorhast, die Adressen habe ich selber von Hand reingeschrieben :P
Zum schreiben habe ich PSPad benutzt:
Und als Assembler solltest du goasm benutzen wenn du das in Maschinencode umwandeln willst
Attached Files
File Type: ibf post-136-1156688229.ibf (6.2 KB, 19 views)
mr.rattlz is offline  
Old 08/27/2006, 17:07   #6
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Quote:
Dein Problem mit den Adressen finden löst mein Code nicht
das finden der adressen ist auch nciht mein problem^^

sondern das auslesen



ich hab mir dein code mal geladen und werde ihn mir jetzt "antun" denke ich versteh zwar eh nur <50% aber mit etwas glück (und kommentaren von dir) sollte ich vlt ein kleines bisschen durchblicken ^^

und wenn nicht.... ich weiß wo du wohnst *muahahaha*

ne scherz xD
wenn ich net durchblick nerv ich dich soooo lange bis ichs kapiert hab (durch deine hilfe *gg*)



also gut...


Lets fetz


MfG DodgeX^^

[Edit]
kriegst ma bissl +karma sofern ich das auf die reihe krieg xD

[Edit²]
Juhu ich habs geschaft^^
Hast dein karma ^^
Dodge is offline  
Old 08/29/2006, 16:56   #7
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Huhu,

hab mir inzwischen dein code angeguckt (ca 50mal xD) und denke mal das ich es 'verstanden' habe ^^

1) Process erzeugen/starten (wow.exe)
2) "warten" bis eingeloggt
3) infos lesen
4) infos aufs lcd posten xD
...


soweit so gut, jetz stellt sich mir die frage, muss man den process erstellen um die speicheradressen lesen zu können?

wenn ja würd mich intressieren ob man das
Code:
call kernel32&#58;CreateProcessA
in gewisser weise mit
Code:
prozessid=_spawnl&#40;_P_NOWAIT,&#34;wow.exe&#34;,&#34;wow.exe&#34;,NULL&#41;;
vergleichen kann?

denn ich denke mal das mit
Code:
 mov eax,&#91;wow_process_information.hProcess&#93;
 mov &#91;wow_ph&#93;,eax
wow_ph die prozess id von der gestarteten wow.exe zugewiesen bekommt^^

wenn das soweit stimmen sollte und es in c/c++ funktionen gibt die das selbe machen wie
Code:
 call kernel32.dll&#58;WriteProcessMemory
 call kernel32.dll&#58;ReadProcessMemory
dürfte es doch (fast) kein problem sein das gesammte programm in c/c++ umzuschreiben oder?^^



Wieso ich das prog in c/c++ umschreiben will?
ganz einfach weil ich zusätzlich noch winamp infos anzeigen will und ich net in der lage bin die mit asm zu bekommen und ich dann auch das aussehn einfacher meinen wnschen anpassen kann (wegen mehr ahnung und so ^^)

[EDIT]
wozu ist
Code:
patch_memory&#58;
  push 0
  push 35
  push addr code2
  push 0x007CD8FE
  push &#91;wow_ph&#93;
 call kernel32.dll&#58;WriteProcessMemory
 cmp eax,0
 je >error_wpm
  push 0
  push 7
  push addr code1
  push 0x0045E19C
  push &#91;wow_ph&#93;
 call kernel32.dll&#58;WriteProcessMemory
 cmp eax,0
 je >error_wpm
 ret
da? bzw was macht es genau?^^
[/EDIT]

Ich hoffe ich höre nochmal was von dir,
ich werd mich (nachdem ich gleich zum pc laden geh fragen ob mein netzteil da is) im inet auf die suche nach lese/schreib funktionen machen wie sie von dir verwendet wurden nur für c/c++^^

MfG DodgeX


PS: Sry wegen doppelpost
bei der menge is ein 2ter post einfach übersichtlicher
[img]text2schild.php?smilienummer=1&text=eigene Meinung 4tw xD' border='0' alt='eigene Meinung 4tw xD' />
Dodge is offline  
Old 08/30/2006, 08:55   #8
 
elite*gold: 0
Join Date: Aug 2005
Posts: 443
Received Thanks: 72
Hi,

das Prozesshandle kannst du mit der API-funktion
bekommen.

Speicher lesen/schreiben kannst du in C/C++ genauso wie in ASM mit den API's und

Wie du an der Funktion siehst :

Code:
BOOL WriteProcessMemory&#40;
 HANDLE hProcess,
 LPVOID lpBaseAddress,
 LPCVOID lpBuffer,
 SIZE_T nSize,
 SIZE_T* lpNumberOfBytesWritten
&#41;;
werden 5 Parameter übergeben : Das Prozesshandle zum Prozess wo geschrieben werden soll,
die Adresse wo geschrieben werden soll,
was geschrieben werden soll,
die größe des zu schreibenden und einen Pointer auf eine Variable , die die Anzahl der bytes, die in den Zielprocess übertragen werden empfängt.

Code:
patch_memory&#58;
  push 0
  push 35
  push addr code2
  push 0x007CD8FE
  push &#91;wow_ph&#93;
 call kernel32.dll&#58;WriteProcessMemory
 cmp eax,0
 je >error_wpm
  push 0
  push 7
  push addr code1
  push 0x0045E19C
  push &#91;wow_ph&#93;
 call kernel32.dll&#58;WriteProcessMemory
 cmp eax,0
 je >error_wpm
 ret
das wird dann auch gleich viel klarer.
mit den Pushes werden die Parameter übergeben (und zwar von hinten nach vorn, also zuerst der letzte param, dann der vorletzte etc)
mit dem Call wird dann die Funktion aufgerufen

Richtig gerum heisst das also Writeprocessmemory([wow_ph],0x0x007CD8FE,code1,35,0)
wobei [wow_ph] eben das Prozesshandle beinhaltet, 0x007CD8FE die Adresse ist an der geschrieben werden soll, code1 beinhaltet den Wert der geschrieben werden soll, 35 Bytes sollen geschrieben werden

der letzte Parameter ist optional. Da er hier also nicht benötigt wird, hat er einfach 0 übergeben

Mit
Code:
cmp eax, 0
je >error_wpm
überprüft er den Rückgabewert der Funktion, also ob die Funktion erfolgreich durchgeführt werden konnte oder nicht. Ist der Rückgabewert in eax = 0 , wenn also die Funktion nicht korrekt ausgeführt werden konnte, dann wird zu error_wpm gesprungen (wenn ich hier falsch liege, bitte berichtigen)
neji is offline  
Old 08/30/2006, 15:56   #9
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
thx für die erklärung =D

alerdings muss ich zu meiner schande gestehen das die frage von mir absolut mies formuliert war^^

weil das mit dem push und call hab ich soweit verstanden die frage sollte eher in die richtung gehen "wieso schreibt der die 7 bzw 35 byte an die bestimmten stellen?" und ich bezweifel das da jemand anderes als mr.rattlz mir helfen kann^^


MfG Dodge

PS: danke trotzdem, die links sind hilfreich
Dodge is offline  
Old 08/30/2006, 16:20   #10
 
elite*gold: 0
Join Date: Aug 2005
Posts: 443
Received Thanks: 72
Quote:

code1 db 0xE9,0x5D,0xF7,0x36,0x00
db 0x90
db 0x90
soweit ich noch weiss ist E9 ein Near Jump
90 ist ein NOP (No Operation)

Mein Tipp ist, dass er einen oder 2 Befehle (7 Byte) an dieser adresse mit einem Jump zu einer anderen adresse überschreibt....evtl eine Art CodeCave wo er selber Code implementiert hat.

der ersetzte Jump müsste so heißen: JMP 0xF75D

da der Jump nur 5 Bytes groß ist, er aber 7 überschrieben muss, fügt er noch 2 NOP's die jeweils 1 byte groß sind an.
neji is offline  
Old 08/30/2006, 16:26   #11
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
wow kling irgendwie so als könnte es stimmen ^^


weist du vlt noch was der code2 teil dann bewirkt?^^

Code:
code2 db 0x50
   db 0x51
   db 0x81,0xFA,0xD8,0xFD,0x7F,0x00
   db 0x74,0x0A
   db 0xE8,0x33,0xCE,0xC8,0xFF
   db 0xE9,0x91,0x08,0xC9,0xFF
   db 0xE8,0x29,0xCE,0xC8,0xFF
   db 0xA3,0xF0,0xB0,0xC9,0x00
   db 0xE9,0x82,0x08,0xC9,0xFF
btw: thx 4 hlp (gibt +karma )


MfG DodgeX
Dodge is offline  
Old 08/30/2006, 16:40   #12
 
elite*gold: 0
Join Date: Aug 2005
Posts: 443
Received Thanks: 72
so gut is mein asm net -.-

mein hiew sagt mir dass er folgendes machen soll :

Code:
 push ax
 push cx
 cmp dx, 0x0FDD8
 jg 0x08
 je 0x14
 call 0xCE40
 enter 0x0E9FF, 0x91 //Enter ??? keinen plan was HIEW mir damit sagen will
 or cl, cl
 jmp ax
 sub si, cx
 enter 0x0A3FF, 0x0F0
 mov al, 0xC9
 add ch, ch
 or b, &#91;bx&#93;&#91;si&#93;, 0xC9
 inc w, &#91;bx&#93;&#91;si&#93;
aber das macht für mich gar keinen Sinn -.-
neji is offline  
Old 08/30/2006, 17:07   #13
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Quote:
aber das macht für mich gar keinen Sinn -.-
dito ._.


mr.rattlz we need your help =/
Dodge is offline  
Old 08/30/2006, 20:58   #14
 
mr.rattlz's Avatar
 
elite*gold: 0
Join Date: Aug 2005
Posts: 896
Received Thanks: 334
Joa, dann will ich das mal gerade was aufklären, bin eben aus Luxemburg heimgekommen :>

Code:
0045E19C * * E9 5DF73600 * *JMP WoW.007CD8FE
0045E1A1 * * 90 * * * * * * NOP
0045E1A2 * * 90 * * * * * * NOP
Einfach nur der Sprung in meinen Code den ich ans Ende der Codesection einfüge :>
Dieser Sprung wurde (diese Stelle war in 1.10 korrekt glaube ich) nach einer Funktion ausgeführt,
die in eax einen Pointer zurückgibt der auf eine Struktur enthält, die den Charakter beschreibt.


Code:
007CD8FE * * 50 * * * * * * PUSH EAX
007CD8FF * * 51 * * * * * * PUSH ECX
007CD900 * * 81FA D8FD7F00 *CMP EDX,WoW.007FFDD8 * * * * * * * * * *; *ASCII &#34;..&#092;Object/ObjectClient/Player_C.h&#34;
007CD906 * * 74 0A * * * * *JE SHORT WoW.007CD912
007CD908 * * E8 33CEC8FF * *CALL WoW.0045A740
007CD90D * *^E9 9108C9FF * *JMP WoW.0045E1A3
007CD912 * * E8 29CEC8FF * *CALL WoW.0045A740
007CD917 * * A3 F0B0C900 * *MOV &#91;DWORD DS&#58;C9B0F0&#93;,EAX
007CD91C * *^E9 8208C9FF * *JMP WoW.0045E1A3
Der code den ich oben überschrieben hatte waren die zwei Pushs und der call.
Ich überprüfe dort mit Hilfe des Registers edx, ob wirklich ein Charakter vorhanden ist und wenn ja wird der Pointer zur Struktur an eine feste Adresse in WoW geschrieben, wo mein Programm sie dann bequem auslesen kann



edit:
Ist dir übrigens mal aufgefallen, dass dein Hiew dir nur 16-Bit code anzeigt neji :P ?
mr.rattlz is offline  
Old 08/30/2006, 21:43   #15
 
elite*gold: 0
Join Date: Mar 2006
Posts: 145
Received Thanks: 14
Juhu!!
Mein Retter


Ob mans glaubt oder nicht, ich hab schon wieder neue fragen

Quote:
Dieser Sprung wurde (diese Stelle war in 1.10 korrekt glaube ich) nach einer Funktion ausgeführt,
die in eax einen Pointer zurückgibt der auf eine Struktur enthält, die den Charakter beschreibt.
Wie kann ich die stelle jetzt (Patch 1.12) bzw bei späteren Patches finden?
Ebenso für den 2ten teil wo das 'große' hingeschrieben wird^^


Und noch was was evtl wichtig sein wird^^
Mit sicherheit muss das was an die entsprechenden stellen kopiert wird ja irgendwie an die neuen adressen angepasst werde, wie mache ich es wenn es soweit ist?



So und nu eine letzte frage (die mir jetzt im moment einfällt^^)
Kannst du mir evtl sagen wie ich die daten die ich in den speicher schreibe in c/c++ in ner variable unterbringen kann?

also welcher datentyp usw

[edit]
und da is mir noch was eingefallen^^
was macht das enableremoteprivileges (im detail, das gehört zu den dingen die ich noch immer net versteh )?
weil das fummelt ja fröhlich am eigenen process rumm


MfG DodgeX


PS: Fragen über fragen ^^
aber bald sollte alles ich alles kapiert haben :err:
Dodge is offline  
Reply


Similar Threads Similar Threads
[Frage]Longjuyt2 Frage .. wegen Seelies
06/23/2009 - Metin2 Private Server - 13 Replies
Hi ich hab ne Frage ich kenn mich mit Seelis nicht so gut aus aber immer wenn ich eins lese, kommt das hier http://img25.imageshack.us/img25/9453/unben1annt. png dann klick ich auf ok und nichts verändert sich aura bleibt immer noch auf g6
[FRAGE] Frage wegen Moblock, WICHTIG !
04/26/2009 - Metin2 - 4 Replies
Hey Gibt es momentan einen Moblock der funktioniert? Danke im vorraus !
Frage zum 173mt2 geht net regestrieren wegen Zeichnung oder ist das frage.
04/02/2009 - Metin2 Private Server - 2 Replies
es geht einfach net.kann jemand helfen oder übersetzung geben bitte.



All times are GMT +1. The time now is 15:49.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.