atom0s Moderator
  Reputation: 205
  Joined: 25 Jan 2006 Posts: 8587 Location: 127.0.0.1
  | 
		
			
				 Posted: Sun Dec 09, 2012 1:57 pm    Post subject: Convert Pointer To Code Script | 
				       | 
			 
			
				
  | 
			 
			
				I wrote this for the beta of Cheat Engine 6.x a while ago and kinda forgot about it. It was released in the beta section for testing but I don't think many really checked it out. So I'm uploading the last released version here for others to check out.
 
 
The purpose of this script is it will allow you to convert a pointer in your table to a programming language. Currently I coded support for C++ and C# but I left the script modular to make adding new languages very easy. You can check the converters out in the code on how to make your own.
 
 
Download
 
http://www.mediafire.com/?guk1il8fq968j59
 
 
Installation
 
Drop the converter.lua into your autorun folder in your Cheat Engine folder.
 
 
Default locations for this are:
 
32bit: C:\Program Files\Cheat Engine 6.2\autorun
 
64bit: C:\Program Files (x86)\Cheat Engine 6.2\autorun
 
 
And drop the converters folder into the autorun folder so the folder structure remains in tact.
 
 
Usage
 
This script adds a new menu to your right-click menu when you right-click entries in your table(s).
 
 
Simply right-click a pointer, and choose a sub-option which will be a language to convert it to. Once the script finishes the newly generated code will be pasted into your clipboard.
 
 
The converters DO work with scripts that use registered globals as addresses too. For example I have:
 
 	  | Code: | 	 		  
 
[ENABLE]
 
REGISTERSYMBOL(player_x)
 
REGISTERSYMBOL(player_y)
 
REGISTERSYMBOL(player_z)
 
alloc(player_x,4)
 
alloc(player_y,4)
 
alloc(player_z,4)
 
alloc(newmem,2048) //2kb should be enough
 
label(returnhere)
 
label(originalcode)
 
label(exit)
 
 
newmem: //this is allocated memory, you have read,write,execute access
 
//place your code here
 
 
originalcode:
 
push eax
 
push ecx
 
mov ecx, eax
 
 
lea eax, dword ptr[ecx+04]
 
mov [player_y], eax
 
 
lea eax, [ecx+08]
 
mov [player_z], eax
 
 
lea eax, [ecx+00]
 
mov [player_x], eax
 
 
pop ecx
 
pop eax
 
 
fld dword ptr [eax+04]
 
fadd dword ptr [ebp-08]
 
 
exit:
 
jmp returnhere
 
 
"DBProBasic3DDebug.dll"+1E2E7:
 
jmp newmem
 
nop
 
returnhere:
 
 
[DISABLE]
 
"DBProBasic3DDebug.dll"+1E2E7:
 
fld dword ptr [eax+04]
 
fadd dword ptr [ebp-08]
 
dealloc(player_x)
 
dealloc(player_y)
 
dealloc(player_z)
 
dealloc(cave)
 
UNREGISTERSYMBOL(player_x)
 
UNREGISTERSYMBOL(player_y)
 
UNREGISTERSYMBOL(player_z)
 
 | 	  
 
 
And I have a pointer for the z coord:
 
Address: player_z
 
Offset 1: 0
 
 
I convert this to C++ using converter and get:
 
 	  | Code: | 	 		  
 
    DWORD dwBaseAddress = 0x02EB0008;
 
    DWORD dwCurrValue   = NULL;
 
    float flResult = 0.0f;
 
    DWORD dwOffsets[]   = { 0x0 };
 
    DWORD dwOffsetCount = sizeof( dwOffsets ) / sizeof( dwOffsets[ 0 ] );
 
 
    ReadProcessMemory( hProcess, (LPVOID)dwBaseAddress, &dwCurrValue, 4, NULL );
 
 
    for( unsigned int x = 0; x < ( dwOffsetCount - 1 ); x++ )
 
    {
 
        dwBaseAddress = dwCurrValue + dwOffsets[ x ];
 
        ReadProcessMemory( hProcess, (LPVOID)dwBaseAddress, &dwCurrValue, 4, NULL ); 
 
    }
 
 
    dwBaseAddress = dwCurrValue + dwOffsets[ dwOffsetCount - 1 ];
 
    ReadProcessMemory( hProcess, (LPVOID)dwBaseAddress, &flResult, sizeof( flResult ), NULL ); 
 
 | 	  
 
 
 
Notice
 
The code produced by both the included converts can be written differently / better. 
 
They are not recommended code.
 
They are simply examples to show you how to use this script to write your own converters for your favorite language.
 _________________
 - Retired.  | 
			 
		  |