Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


What methods to update my table to a newer version?

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Sun Mar 13, 2016 8:20 pm    Post subject: What methods to update my table to a newer version? Reply with quote

I just spent foreever creating a huge table for a game with scripts, pointers, a few static addresses, Drop down boxes, editors, etc. I did this in the standard way. I am a huge newb and know next to nothing about scripting or asm but copied and took from the examples I found on this forum.

Well, there is an updated version out now and I don't want ALL that hard work gone! What ways can I use to update the table to the next version of the game? I did a search but did not exactly see a tutorial. Whats the best, fastest, working method(s) to use?

Please be as specific as you can be. Thanks!
Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Sun Mar 13, 2016 8:37 pm    Post subject: Reply with quote

The best way to reduce the amount of work that may be involved with updating tables/trainers, is to use scripts. The best way for those scripts to be updated and/or automatically applicable for future versions, is to utilize array of byte signatures for determining your injection locations. You can let CE automatically create scripts with those signatures by selecting the AOB injection template from the auto assembly window when you create your scripts. You can improve the signatures by incorporating wild card entries for bytes that might change during target updates/patches (e.g. bytes relating to values and not specific, machine instructions like push, mov, add etc.).

If you have scripts already written that do not include AOB signatures, you can still incorporate the AOB signatures without having to rewrite all of your scripts. If you are already making use of AOB signatures, but they still fail, you'll have to fix them manually.
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Sun Mar 13, 2016 8:45 pm    Post subject: Reply with quote

++METHOS wrote:
The best way to reduce the amount of work that may be involved with updating tables/trainers, is to use scripts. The best way for those scripts to be updated and/or automatically applicable for future versions, is to utilize array of byte signatures for determining your injection locations. You can let CE automatically create scripts with those signatures by selecting the AOB injection template from the auto assembly window when you create your scripts. You can improve the signatures by incorporating wild card entries for bytes that might change during target updates/patches (e.g. bytes relating to values and not specific, machine instructions like push, mov, add etc.).

If you have scripts already written that do not include AOB signatures, you can still incorporate the AOB signatures without having to rewrite all of your scripts. If you are already making use of AOB signatures, but they still fail, you'll have to fix them manually.


Ah, I was afraid it would be AOB. I have seen it talked about in the forum. Do you know of any AOB tutorials that are more specific to what I need to do? Thanks!
Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Sun Mar 13, 2016 8:54 pm    Post subject: Reply with quote

CE does everything for you when you make use of the AOB injection template, inside of the auto assembly window, when building your script. If your scripts have already been written, you'll have to change your scripts a little in order to make use of the AOB signature scanning feature. Here is an example of a script with and without AOB:

Without AOB:
Code:
[ENABLE]

alloc(newmem,2048)

label(return)

newmem:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00
jmp return

"firefox.exe"+250A:
jmp newmem
nop
nop
return:

[DISABLE]

dealloc(newmem)

"firefox.exe"+250A:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00



With AOB:
Code:
[ENABLE]

aobscanmodule(INJECT,firefox.exe,8B 4D 08 C6 46 0C 00)
alloc(newmem,$1000)

label(return)

registersymbol(INJECT)

newmem:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00
jmp return

INJECT:
jmp newmem
nop
nop
return:

[DISABLE]

dealloc(newmem)

INJECT:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00

unregistersymbol(INJECT)


With that said, all you should have to do is find the injection location of one of the scripts that you want to update, let CE build a script with AOB for you, then, just replace/add the items that are needed to your old script. You may notice that 'INJECT' is a custom label that you can choose. I would recommend using different labels for each script...so, change 'INJECT' to 'ammo', 'health', 'cash' etc.. Every instance of 'INJECT' will need to be changed, obviously.
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Mon Mar 14, 2016 3:01 am    Post subject: Reply with quote

What about my basic pointer entries that let you edit the vaules, static addresses that let you edit values, etc. How to convert those to AOB if its not in a script?
Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Mon Mar 14, 2016 3:28 am    Post subject: Reply with quote

These days, I use scripts for everything. I recommend doing the same, if possible. You can store addresses using custom symbols and manipulate them just as you would any other address. With scripts, you don't have to waste time with the pointer scanner or worry as much about pointers breaking etc..
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Mon Mar 14, 2016 5:28 am    Post subject: Reply with quote

++METHOS wrote:
These days, I use scripts for everything. I recommend doing the same, if possible. You can store addresses using custom symbols and manipulate them just as you would any other address. With scripts, you don't have to waste time with the pointer scanner or worry as much about pointers breaking etc..


well in my table it lets you edit the loadout weapons on your ship. I have setup drop down selections with the names of each weapon so you can pull a drop down box down. Given my newb status when it comes to scripts, trying to figure out how to convert THAT to a script?

Here is a screenshot. These are static but I will get pointers for them if needed. Note the pulldown box on Ship slector and Weapon Loadout:



Also Let me attach the table just so you can look if you want:



fs2_open_3_7_2.CT
 Description:

Download
 Filename:  fs2_open_3_7_2.CT
 Filesize:  556.18 KB
 Downloaded:  787 Time(s)

Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Mon Mar 14, 2016 12:33 pm    Post subject: Reply with quote

I didn't check out your table, but the addresses that you save off using custom symbols should work in the same way. You can add them to your table as pointer addresses and assign hotkeys to them. Instead of the base addresses being 12A4E109 or game.exe+4112, the base address will be ammo_address or health_address (or, whatever custom label that you decide on).
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Wed Mar 16, 2016 12:44 am    Post subject: Reply with quote

++METHOS wrote:
I didn't check out your table, but the addresses that you save off using custom symbols should work in the same way. You can add them to your table as pointer addresses and assign hotkeys to them. Instead of the base addresses being 12A4E109 or game.exe+4112, the base address will be ammo_address or health_address (or, whatever custom label that you decide on).


Well, lets say I have a pointer that lets you edit something. Normally its just an entry in the table and I can just edit the value. The example you gave was replacing some code or changing an existing script. So I have this entry:

Afterburner Speed P->0115F650 Float [value I can edit]

The pointer is: ["fs2_open_3_7_2.exe"+00CE82E8]+58

Basically a standard table entry with a pointer. I have MANY of these. So you say I need to somehow assign them to symbols in a script and then use them in a table and can then edit them? Can you give me an example of using the above pointer in a script that is NOT an injection process or changing assembly? But that just sets it up to be used to create a standard table entry? Thanks!
Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Wed Mar 16, 2016 1:55 pm    Post subject: Reply with quote

You asked how you could eliminate or minimize the update process for tables/trainers in the event that the target process gets patched or receives an update etc.. I explained to you the best methods for doing that. If you do not want to use injection, then don't...but don't be upset if/when you have to do all of your work over again because the target changes during an update. Not only that, but your pointers may or may not be stable on other computers. Using injection also helps to eliminate those potential issues. Additionally, if your pointers are part of the same structure, one injection will work for them all.
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Wed Mar 16, 2016 4:36 pm    Post subject: Reply with quote

++METHOS wrote:
You asked how you could eliminate or minimize the update process for tables/trainers in the event that the target process gets patched or receives an update etc.. I explained to you the best methods for doing that....


Well, I know I need to use AOB and do this like you said:
Quote:

You can store addresses using custom symbols and manipulate them just as you would any other address.


So lets say I have this in my table:
Afterburner Speed P->0115F650 Float [value I can edit]
It lets you set the speed of the afterburner to whatever you like. Ok so I need to get the pointer p->P->0115F650, like you said "stored to a custom symbol" so I can manipulate it. So I should still set up an AOB injection and just leave the newmem blank like this??
Code:

[ENABLE]

aobscanmodule(Afterburner,fs2_open_3_7_2.exe,00 00 00 20 43 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  add [eax],al
  and [ebx+00],al
  jmp return

Afterburner+01:
  jmp code
return:
registersymbol(Afterburner)

[DISABLE]

Afterburner+01:
  db 00 00 20 43 00

unregistersymbol(Afterburner)
dealloc(newmem)

Then I can add address manually to the table and put in "Afterburner" as my address and then I can edit it?
Is there any way to set multiple AOBscans and multiple pointers with thier symbols in one script so it registers multiple symbols that I can use? That way I can have a single option that sets up multiple symbols/pointers to add to the table to edit? Thanks!
Back to top
View user's profile Send private message
++METHOS
I post too much
Reputation: 92

Joined: 29 Oct 2010
Posts: 4197

PostPosted: Wed Mar 16, 2016 4:55 pm    Post subject: Reply with quote

You must declare the symbol and make allocations for it. Here is an example script:

Code:
//Target:  firefox.exe
//Author:  ++METHOS

[ENABLE]

{====================  ammo  ====================}

aobscanmodule(aob_ammo,firefox.exe,8B 4D 08 C6 46 0C 00)
alloc(newmem_ammo,1024,firefox.exe)

label(return_ammo)
label(originalcode_ammo)
label(ammo_address)

registersymbol(aob_ammo)
registersymbol(ammo_address)


newmem_ammo:
push edi
lea edi,[ebp+08]
mov [ammo_address],edi
pop edi

originalcode_ammo:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00
jmp return_ammo

ammo_address:
dd 0

aob_ammo:
jmp newmem_ammo
db 90 90
return_ammo:


[DISABLE]
dealloc(newmem_ammo)
aob_ammo:
db 8B 4D 08 C6 46 0C 00

unregistersymbol(aob_ammo)
unregistersymbol(ammo_address)


Using the above script as an example, after activating this script, I can add an address to my table, click on the pointer checkbox, and set the base address as ammo_address. Doing so will allow me to manipulate the ammo as I see fit, set up hotkeys etc.. In this case, my ammo value is at offset +8. Let's say that my projectile velocity is at offset +C. I could add another address to my cheat table, set it as a pointer, set the base address as ammo_address, and add an offset of +4.

Now, if I were going to make a table with several values from the same structure like this, I might not store the ammo_address with the +8 offset, I would probably just store the base address, that way, any additional values that I add to my table will have the correct offset so as to not make things confusing (i.e. the value for projectile velocity would actually be ammo_address with an offset of +C.

To do so, I would just need to change a portion of the above code to this:

Code:
push edi
lea edi,[ebp]
mov [ammo_address],edi
pop edi



gid2525 wrote:
Is there any way to set multiple AOBscans and multiple pointers with thier symbols in one script so it registers multiple symbols that I can use? That way I can have a single option that sets up multiple symbols/pointers to add to the table to edit?
-Yes. You can combine as many scripts as you want.

Here is an example of two scripts, combined:

Code:
//Target:  firefox.exe
//Author:  ++METHOS

[ENABLE]

{====================  ammo  ====================}

aobscanmodule(aob_ammo,firefox.exe,8B 4D 08 C6 46 0C 00)
alloc(newmem_ammo,1024,firefox.exe)

label(return_ammo)
label(originalcode_ammo)
label(ammo_address)

registersymbol(aob_ammo)
registersymbol(ammo_address)


newmem_ammo:
push edi
lea edi,[ebp+08]
mov [ammo_address],edi
pop edi

originalcode_ammo:
mov ecx,[ebp+08]
mov byte ptr [esi+0C],00
jmp return_ammo

ammo_address:
dd 0

aob_ammo:
jmp newmem_ammo
db 90 90
return_ammo:




{====================  cash  ====================}

aobscanmodule(aob_cash,firefox.exe,8B 46 04 5F 3B 05 04 B7 17 01)
alloc(newmem_cash,1024,firefox.exe)

label(return_cash)
label(originalcode_cash)
label(cash_address)

registersymbol(aob_cash)
registersymbol(cash_address)


newmem_cash:
push edi
lea edi,[esi+04]
mov [cash_address],edi
pop edi

originalcode_cash:
mov eax,[esi+04]
pop edi
cmp eax,[firefox.exe+1B704]
jmp return_cash

cash_address:
dd 0

aob_cash:
jmp newmem_cash
db 90 90 90 90 90
return_cash:


[DISABLE]
dealloc(newmem_ammo)
aob_ammo:
db 8B 4D 08 C6 46 0C 00

unregistersymbol(aob_ammo)
unregistersymbol(ammo_address)

dealloc(newmem_cash)
aob_cash:
db 8B 46 04 5F 3B 05 04 B7 17 01

unregistersymbol(aob_cash)
unregistersymbol(cash_address)


CE will create and combine scripts, automatically. In fact, everything in the above scripts was done, automatically, with the exception of the naming procedure for 'cash' and 'ammo' (which took me about 2 seconds, as all I had to do was type 'cash/ammo' in a text field once, and it was done). I used mgr.inz.Player's LUA plugin and a custom template that I created for the above scripts, but CE can create and combine scripts automatically, without any additional tools required.
Back to top
View user's profile Send private message
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 103

PostPosted: Thu Mar 17, 2016 3:48 pm    Post subject: Reply with quote

Great ill give that a shot. thanks!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites