Jump to content

Recommended Posts

Posted

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:

Posted

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.

Posted (edited)

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!

Posted (edited)

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
Posted

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

Posted (edited)

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
Posted

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

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
×
×
  • Create New...