Jump to content

MemoryRead Healthpoints?


Recommended Posts

hello! i would like to memory read the health points of my archlord charakter. i could not find much information about this, so i better ask bevor i waste more time. :) is this possible and if yes, is it hard to do? there are so many progamms i have seen, that can read a charakters hp, that really must be doable. :party: i allready downloaded NomandMemory, but i think i dont understand for what exactly this is. can someone help me out with maybe a piece of code or something? thank you very much! :idea:

Link to comment
Share on other sites

You have to do a lot more work than you have so far.

You'll need to get a memory searching program and search for your current health. Record the address. Close the program and run it a few more times searching for your health value. If you get the same address each time, you then take that to Nomad. You'll have to get someone else's help since I don't know how to use it.

Link to comment
Share on other sites

Simple example on reading a 4 byte value into an autoit variable from specified process and pointer.

#include <winapi.au3>
Global Const $PROCESS_VM_OPERATION = (0x0008)
Global Const $PROCESS_VM_READ = (0x0010)

Global $Process="someprocess.exe"
Global $Pointer = 0xDEADBEEF; replace of course

$handle=_WinAPI_OpenProcess(BitOR($PROCESS_VM_OPERATION,$PROCESS_VM_READ),False,ProcessExists($Process))

$s=DllStructCreate("int")
Local $read
_WinAPI_ReadProcessMemory($handle,$Pointer,DllStructGetPtr($s),DllStructGetSize($s),$read)

MsGbox(0,"Read value",DllStructGetData($s,1))


_WinAPI_CloseHandle($handle)
Edited by monoceres

Broken link? PM me and I'll send you the file!

Link to comment
Share on other sites

Simple example on reading a 4 byte value into an autoit variable from specified process and pointer.

#include <winapi.au3>
Global Const $PROCESS_VM_OPERATION = (0x0008)
Global Const $PROCESS_VM_READ = (0x0010)

Global $Process="someprocess.exe"
Global $Pointer = 0xDEADBEEF; replace of course

$handle=_WinAPI_OpenProcess(BitOR($PROCESS_VM_OPERATION,$PROCESS_VM_READ),False,ProcessExists($Process))

$s=DllStructCreate("int")
Local $read
_WinAPI_ReadProcessMemory($handle,$Pointer,DllStructGetPtr($s),DllStructGetSize($s),$read)

MsGbox(0,"Read value",DllStructGetData($s,1))


_WinAPI_CloseHandle($handle)
this helped me alot, thanks! :) another question: it looks like the memory adresses(for example of my current hp) are changing after i restart the game, is this normal? :party:

EDIT: i found this delphi code, that is definitly able to read a monsters hp. can someone explain this to me or even translate it into autoit(if it dosnt take to much work)?

var
  BufferStr : array[0..100] of AnsiChar;
  BufferP: cardinal;
  BufferInt:Integer;
  BytesRead:Cardinal;
  BasePointer:cardinal;
  TempPointer:cardinal;
begin
  BasePointer:=9023416;

  ReadProcessMemory(hProc, Pointer(BasePointer), @BufferP, SizeOf(BufferP), BytesRead);
  edtBasPointer.Text :=IntToHex(BufferP,8);
  TempPointer:=BufferP;

  ReadProcessMemory(hProc, Pointer(TempPointer+1188), @BufferP, SizeOf(BufferP), BytesRead);
  TempPointer:=BufferP;

  ReadProcessMemory(hProc, Pointer(TempPointer+92), @BufferP, SizeOf(BufferP), BytesRead);
  TempPointer:=BufferP;

  ReadProcessMemory(hProc, Pointer(TempPointer+36), @BufferP, SizeOf(BufferP), BytesRead);
  TempPointer:=BufferP;


  ReadProcessMemory(hProc, Pointer(TempPointer+116), @BufferP, SizeOf(BufferP), BytesRead);
  TempPointer:=BufferP;
  edtTargetidptr.Text:=IntToHex(BufferP,8);


  ReadProcessMemory(hProc, Pointer(TempPointer+1824), @BufferInt, SizeOf(BufferInt), BytesRead);
  edtTargetid.Text := IntToStr(BufferInt);

end;
Edited by Tinutron
Link to comment
Share on other sites

its a dynamic adress

so you'll get something like this:

offset1-->offset2-->health

in this case you have to read the offset on the baseadress and you'll get offset2

now read the value on offset (offset2+constant) to read the health

Global Const $PROCESS_VM_OPERATION = (0x0008)
Global Const $PROCESS_VM_READ = (0x0010)

Global $Process="someprocess.exe"
Global $Pointer = 0xDEADBEEF; replace of course

$handle=_WinAPI_OpenProcess(BitOR($PROCESS_VM_OPERATION,$PROCESS_VM_READ),False,ProcessExists($Process))

$s=DllStructCreate("int")
Local $read
_WinAPI_ReadProcessMemory($handle,$Pointer,DllStructGetPtr($s),DllStructGetSize($s),$read)

MsGbox(0,"Base",DllStructGetData($s,1))
Local $health
_WinAPI_ReadProcessMemory($handle,$read+0xAFFFF,DllStructGetPtr($s),DllStructGetSize($s),$health)


_WinAPI_CloseHandle($handle)

Now just fill up your values

Link to comment
Share on other sites

oh men, this makes me sick... -.- i cant find an offset that isnt changing or maybe i dont get this in my brain at all. can someone give me some instructions how to walk forward?

edit: i just dont know, how to get this static adress. it is no more problem to find the adress, that shows my current hp but it changes with every game-restart. where is the way to the static adress now? :)

Edited by Tinutron
Link to comment
Share on other sites

It's very likely that there is no static address. That's why I originally said check it a few times...

incase your still trying to do this

find and use cheatengine

(complete the tutorials) even if it takes you a few goes

read everything more than once.

come back and look into other memory read bots on these forums learn from the code

once you have what you think is a working understanding build your code (the wrong way)

post an example of your work and ask specific questions

i know you belive your questions are specific but they are actualy very very broad

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...