|
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Sat Mar 12, 2011 11:05 am Post subject: help in using pointers in delphi |
|
|
ok first thanks for admin for this advanced furom
if i have a game named test
and my tries adress is 12345678
and i wana make tries = 9
i think it will be easy like that
Code: | var
// assign needed variables
WIN : integer;
PID : integer;
TID : integer;
HND : integer;
WRT : cardinal;
BUF : pchar;
const
// assign needed constants
Caption = 'test';
Addr0 = $12345678;
Poke0 = $09;
Bytes = 1;
begin
// find window from process caption
WIN := FindWindow(nil,Caption);
// get process id after window was found
TID := GetWindowThreadProcessId(WIN,@PID);
// create handle to gain access to the process
HND := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
// create pointer for the value
GetMem(BUF,1);
// setup address value and write it to the process
BUF^ := Chr(Poke0);
WriteProcessMemory(HND,ptr(Addr0),BUF,Bytes,WRT);
// finally free memory and terminate handle
FreeMem(BUF);
closehandle(HND);
|
so my question is
if this value is behined a pointer with this offsets
like that
test.exe+0002E7AC
+7c +21c +8
how wil the code should be in delphi??
|
|
Back to top |
|
|
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Wed Mar 23, 2011 4:45 pm Post subject: |
|
|
so is it so hard ??
or it is a secret ??
i want know just how to put a multi level pointer in delphi
is it posible or not ??
plz help
|
|
Back to top |
|
|
Krähne Expert Cheater Reputation: 0
Joined: 06 Jun 2010 Posts: 108 Location: Inside of my Kernel
|
Posted: Wed Mar 23, 2011 5:26 pm Post subject: |
|
|
Yep, is posible, just use ReadProcessMemory the necesary times for find the pointer, i mean... read the base pointer in 4 bytes, add the first offset to result, scan/read the result (again with the RPM API), and add the next offset, make it again, blah, blah, blah...
PD: Don't make re-post.
_________________
Excuse me if you don't understand what I just said, but "english" isn't my native language. |
|
Back to top |
|
|
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Fri Mar 25, 2011 11:28 am Post subject: |
|
|
DaasCook wrote: | Yep, is posible, just use ReadProcessMemory the necesary times for find the pointer, i mean... read the base pointer in 4 bytes, add the first offset to result, scan/read the result (again with the RPM API), and add the next offset, make it again, blah, blah, blah...
PD: Don't make re-post. |
thanks for replay
but i need an example in delphi please please
for remember
the game data was :
the game name is test
adress
test.exe+0002E7AC
offsets
+7c +21c +8
|
|
Back to top |
|
|
Innovation Grandmaster Cheater Reputation: 12
Joined: 14 Aug 2008 Posts: 617
|
Posted: Fri Mar 25, 2011 4:37 pm Post subject: |
|
|
elshabory wrote: | thanks for replay
but i need an example in delphi please please
for remember
the game data was :
the game name is test
adress
test.exe+0002E7AC
offsets
+7c +21c +8 |
Code: | var
WindowHandle: HWND;
ProcessIdentifier: DWORD;
ProcessHandle: THandle;
ModuleHandle: HMODULE;
MemoryBuffer: DWORD;
NumberOfBytesRead: Integer;
begin
WindowHandle := FindWindow(nil, 'Window Name');
ProcessIdentifier := GetWindowThreadProcessId(WindowHandle, @ProcessIdentifier);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessIdentifier);
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, 'test.exe', @ModuleHandle);
ReadProcessMemory(ProcessHandle, Ptr(ModuleHandle + $2E7AC), @MemoryBuffer, SizeOf(MemoryBuffer), NumberOfBytesRead);
ReadProcessMemory(ProcessHandle, Ptr(MemoryBuffer + $7C), @MemoryBuffer, SizeOf(MemoryBuffer), NumberOfBytesRead);
ReadProcessMemory(ProcessHandle, Ptr(MemoryBuffer + $21C), @MemoryBuffer, SizeOf(MemoryBuffer), NumberOfBytesRead);
ReadProcessMemory(ProcessHandle, Ptr(MemoryBuffer + $8), @MemoryBuffer, SizeOf(MemoryBuffer), NumberOfBytesRead);
// Do what you want with the value held by MemoryBuffer here...
CloseHandle(ProcessHandle);
end; |
Last edited by Innovation on Sun Mar 27, 2011 10:39 am; edited 5 times in total |
|
Back to top |
|
|
Krähne Expert Cheater Reputation: 0
Joined: 06 Jun 2010 Posts: 108 Location: Inside of my Kernel
|
|
Back to top |
|
|
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Sun Mar 27, 2011 7:05 am Post subject: |
|
|
first thanks mr. Innovation and mr. DaasCook
but i got errors
Code: | [Error] Unit1.pas(38): Undeclared identifier: 'GetModuleHandleEx'
[Error] Unit1.pas(38): Undeclared identifier: 'GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT'
[Error] Unit1.pas(39): Undeclared identifier: 'ReadProcessMemoryBuffer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' |
forgive me i am new in delphi
and i will be so glade if you help us with this source mr. DaasCook
i am waitng for this
thanks all
|
|
Back to top |
|
|
Krähne Expert Cheater Reputation: 0
Joined: 06 Jun 2010 Posts: 108 Location: Inside of my Kernel
|
Posted: Sun Mar 27, 2011 7:53 am Post subject: |
|
|
elshabory wrote: | first thanks mr. Innovation and mr. DaasCook
but i got errors
Code: | [Error] Unit1.pas(38): Undeclared identifier: 'GetModuleHandleEx'
[Error] Unit1.pas(38): Undeclared identifier: 'GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT'
[Error] Unit1.pas(39): Undeclared identifier: 'ReadProcessMemoryBuffer'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' |
forgive me i am new in delphi
and i will be so glade if you help us with this source mr. DaasCook
i am waitng for this
thanks all |
Ok, before everything, tell me something...
What is the really process name you want to edit?, Maybe counter strike?.
_________________
Excuse me if you don't understand what I just said, but "english" isn't my native language. |
|
Back to top |
|
|
Innovation Grandmaster Cheater Reputation: 12
Joined: 14 Aug 2008 Posts: 617
|
Posted: Sun Mar 27, 2011 8:52 am Post subject: |
|
|
elshabory wrote: | but i got errors |
Those were because I accidentally mass-replaced some terms when refactoring the code in Notepad (I fixed it now) and because Delphi's Windows API packages don't have declarations for GetModuleHandleEx and GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT.
Code: | function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: PAnsiChar; var hModule: HMODULE): BOOL; stdcall; external 'kernel32.dll' name 'GetModuleHandleExA';
...
const
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT: DWORD = $2; |
|
|
Back to top |
|
|
atom0s Moderator Reputation: 198
Joined: 25 Jan 2006 Posts: 8517 Location: 127.0.0.1
|
Posted: Sun Mar 27, 2011 9:22 am Post subject: |
|
|
DaasCook wrote: | [
Ok, before everything, tell me something...
What is the really process name you want to edit?, Maybe counter strike?. |
Please stop using small font sizes, it's annoying to people to have to resize your messages just to read them.
_________________
- Retired. |
|
Back to top |
|
|
Krähne Expert Cheater Reputation: 0
Joined: 06 Jun 2010 Posts: 108 Location: Inside of my Kernel
|
Posted: Sun Mar 27, 2011 9:27 am Post subject: |
|
|
Innovation wrote: | elshabory wrote: | but i got errors |
Those were because I accidentally mass-replaced some terms when refactoring the code in Notepad (I fixed it now) and because Delphi's Windows API packages don't have declarations for GetModuleHandleEx and GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT.
Code: | function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: PAnsiChar; var hModule: HMODULE): BOOL; stdcall; external 'kernel32.dll' name 'GetModuleHandleExA';
...
const
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT: DWORD = $2; |
|
Remember: The module must have been loaded by the calling process.
So, as him are getting the module of another process, will doesn't work.
I'm developing another way for get the module base, take a while...
Wiccaan wrote: | DaasCook wrote: | [
Ok, before everything, tell me something...
What is the really process name you want to edit?, Maybe counter strike?. |
Please stop using small font sizes, it's annoying to people to have to resize your messages just to read them. |
Ok... (?) Excuse me.
Anyways, i think is a personal choice.
_________________
Excuse me if you don't understand what I just said, but "english" isn't my native language. |
|
Back to top |
|
|
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Sun Mar 27, 2011 10:19 am Post subject: |
|
|
thanks alot
but i am a new as i told you
can you give me a full source
this wil be a template for me
not just for this example
but for evry trainer i will make
so this data i wrote are not belong to any game
just example
i hope fore a full code to be a template for me when i build a multilevel pointer trainer in delphi
sory for my many questions
but this is important not only for me but for hundred programmers
which are new commers to delphi
so in few words :
i need a template for multilevel pointers trainer with the given data or any data !!
i wile be glade to read your replay
whatever its font size will be !!!
gold is posting here !!!
and i will use my magnifier to read it if needed !!!
Last edited by elshabory on Sun Mar 27, 2011 10:31 am; edited 1 time in total |
|
Back to top |
|
|
Innovation Grandmaster Cheater Reputation: 12
Joined: 14 Aug 2008 Posts: 617
|
Posted: Sun Mar 27, 2011 10:29 am Post subject: |
|
|
DaasCook wrote: | Remember: The module must have been loaded by the calling process.
So, as him are getting the module of another process, will doesn't work.
I'm developing another way for get the module base, take a while... |
No, it works assuming that "test.exe" is the main module. The main module is always loaded.
|
|
Back to top |
|
|
Krähne Expert Cheater Reputation: 0
Joined: 06 Jun 2010 Posts: 108 Location: Inside of my Kernel
|
Posted: Sun Mar 27, 2011 10:49 am Post subject: |
|
|
Innovation wrote: | DaasCook wrote: | Remember: The module must have been loaded by the calling process.
So, as him are getting the module of another process, will doesn't work.
I'm developing another way for get the module base, take a while... |
No, it works assuming that "text.exe" is the main module. The main module is always loaded. |
Yes, but... The module must have been loaded by the calling process. as i told you.
So... him are making a trainer, for that reason, the "tester.exe" isn't obviously the main module, i think you don't get it me.
Check you GetModuleHandleEx function, and will see that you can't get the module base from another process, just check it with the notepad.
elshabory wrote: | thanks alot
but i am a new as i told you
can you give me a full source
this wil be a template for me
not just for this example
but for evry trainer i will make
so this data i wrote are not belong to any game
just example
i hope fore a full code to be a template for me when i build a multilevel pointer trainer in delphi
sory for my many questions
but this is important not only for me but for hundred programmers
which are new commers to delphi
so in few words :
i need a template for multilevel pointers trainer with the given data or any data !!
i wile be glade to read your replay
whatever its font size will be !!!
gold is posting here !!!
and i will use my magnifier to read it if needed !!! |
Ok dude, here's my progress, isn't complete, because i'm making a function for get the module base (i mean "test.exe"+offset) blah blah...
But the other function (reading the multi-level pointers is finally complete, you can check it out and use for you needs).
Don't forget, the example isn't complete, and i'm not a delphi coder, but that example should be enough for you understand some basic things.
PD: You should initialize the value of "ModuleBase" TEdit control, for works correctly.
hope this helps, and... wait a little more, while i'm finishing the getmodulebase function.
Here's the example running an testing it with counter strike:
_________________
Excuse me if you don't understand what I just said, but "english" isn't my native language.
Last edited by Krähne on Sun Mar 27, 2011 10:24 pm; edited 1 time in total |
|
Back to top |
|
|
elshabory Newbie cheater Reputation: 0
Joined: 02 Mar 2011 Posts: 20
|
Posted: Sun Mar 27, 2011 10:57 am Post subject: |
|
|
thanks but the link did not work
gives :
"Sorry, the file you requested is not available."
"The file has been deleted by the uploader. sendspace is not able to help you in this matter"
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|