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 


Failer assembling error (reassemble command) ce 7.5

 
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: 101

PostPosted: Sat Feb 25, 2023 11:50 pm    Post subject: Failer assembling error (reassemble command) ce 7.5 Reply with quote

Hi, I am trying to use reassemble but im getting failure assembling error. Im trying to reassemble a jne address:
blah,blah - jne TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2290
or
jne 1992BC5ADB0

However, this unity game requires far/long jumps. The question is: Can CE 7.5 calculate when the code cave is a far/long jump away? I can't seem to get it to work.. Maybe something is wrong with my script?

Code:

[ENABLE]

define(checkroyal_two,TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224c)
alloc(newmem4,$100)

label(code4)
label(return4)
label(readjump)
registersymbol(readjump)

newmem4:
code4:
  cmp eax,ecx
  reassemble(checkroyal_two+2)
  jmp return4

readjump:
   reassemble(checkroyal_two+2)

checkroyal_two:
  jmp!near newmem4; 00 00* 55     
  nop 3
return4:
registersymbol(checkroyal_two)

[DISABLE]

checkroyal_two:
  db 85 C0
  reassemble(readjump)

unregistersymbol(*)
dealloc(*)


I have jmp!near newmem4; 00 00* 55 there cause Im using panravens great trampoline script for unity games. jmp newmem4 doesn't work either though. If reassemble has not been fixed for far jumps is there an alternative cause with unity the jump address will definitely change when loading savegames and what not so pretty sure readmem won't work. Thanks!
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 467

Joined: 09 May 2003
Posts: 25698
Location: The netherlands

PostPosted: Sun Feb 26, 2023 2:26 am    Post subject: Reply with quote

i can't quickly see, but readjump should be filled with readmem not reassemble as reassemble may return more than 1 instruction
_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 101

PostPosted: Sun Feb 26, 2023 3:12 am    Post subject: Reply with quote

Dark Byte wrote:
i can't quickly see, but readjump should be filled with readmem not reassemble as reassemble may return more than 1 instruction


I thought reassemble only assembled one line of code? Here is the injection point:

Code:

{
// ORIGINAL CODE - INJECTION POINT: TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224c

TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+221d: 48 8B 85 18 FF FF FF              - mov rax,[rbp-000000E8]
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2224: 48 85 C0                          - test rax,rax
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2227: 74 12                             - je TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+223b
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2229: 48 8D 64 24 00                    - lea rsp,[rsp+00]
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+222e: 49 BB 8B 5C 92 2D 99 01 00 00     - mov r11,000001992D925C8B
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2238: 41 FF D3                          - call r11
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+223b: E9 00 16 00 00                    - jmp TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+3840
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2240: 48 8B CE                          - mov rcx,rsi
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2243: 48 8B 06                          - mov rax,[rsi]
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2246: FF 90 C8 09 00 00                 - call qword ptr [rax+000009C8]
// ---------- INJECTING HERE ----------
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224c: 85 C0                             - test eax,eax
// ---------- DONE INJECTING  ----------
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224e: 0F 85 3C 00 00 00                 - jne TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2290
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2254: 33 C0                             - xor eax,eax
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2256: 4C 0F B6 E8                       - movzx r13,al
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+225a: 48 C7 85 18 FF FF FF 00 00 00 00  - mov qword ptr [rbp-000000E8],00000000
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2265: 48 83 EC 08                       - sub rsp,08
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2269: E8 B7 15 00 00                    - call TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+3825
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+226e: 48 83 C4 08                       - add rsp,08
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2272: 48 8B 85 18 FF FF FF              - mov rax,[rbp-000000E8]
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+2279: 48 85 C0                          - test rax,rax
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+227c: 74 0D                             - je TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+228b
}


I tried like this as well:
Code:

define(checkroyal_two,TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224c)
alloc(newmem4,$100)

label(code4)
label(return4)

newmem4:
code4:
  cmp eax,ecx
  reassemble(checkroyal_two+2)
  jmp return4

checkroyal_two:
  jmp!near newmem4; 00 00* 55
  nop 3
return4:
registersymbol(checkroyal_two)

[DISABLE]

checkroyal_two:
  db 85 C0
  reassemble(checkroyal_two+2)

unregistersymbol(*)
dealloc(*)
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 467

Joined: 09 May 2003
Posts: 25698
Location: The netherlands

PostPosted: Sun Feb 26, 2023 3:22 am    Post subject: Reply with quote

Have you tried doing a normal 14 byte or 1 byre large distance codeinjection template script?

I don't think reassemble is even needed here with the new template

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 101

PostPosted: Sun Feb 26, 2023 3:46 am    Post subject: Reply with quote

Dark Byte wrote:
Have you tried doing a normal 14 byte or 1 byre large distance codeinjection template script?

I don't think reassemble is even needed here with the new template


Ah, yes in this particular instance the 14byte jump should work fine as there aren't any movs or anything with offsets (that can change from mov to lea with unity) in the 14 bytes. I usually avoid the 14 byte jumps and opt for panravens trampoline script due to that fact. The smaller the injection bytes the better. In this case though I don't need a readmem or anything I guess? Given that reassemble won't work with far jumps though, you are saying basically that reassemble isn't needed anymore for jumps due to the new templates in 7.5?
What about calls? Thanks!
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 467

Joined: 09 May 2003
Posts: 25698
Location: The netherlands

PostPosted: Sun Feb 26, 2023 4:00 am    Post subject: Reply with quote

ce 7.5: j* and call instructions outside of their range will generate multiline code that does the same

and the template will rewrite instructions like mov [addressbeyond2gb],reg into a suitable replacement

As for reassemble, it does look like there is an issue (not new, also in 7.4 and earlier) when used with case sensitive symbol names instead of addresses you get from AOB's (Of course, that's another reason why I said that this script doesn't need reassemble, because if you use the exact unchangable symbolname, then reassemble is not useful anymore)

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 101

PostPosted: Sun Feb 26, 2023 4:47 am    Post subject: Reply with quote

Dark Byte wrote:
ce 7.5: j* and call instructions outside of their range will generate multiline code that does the same

and the template will rewrite instructions like mov [addressbeyond2gb],reg into a suitable replacement

As for reassemble, it does look like there is an issue (not new, also in 7.4 and earlier) when used with case sensitive symbol names instead of addresses you get from AOB's (Of course, that's another reason why I said that this script doesn't need reassemble, because if you use the exact unchangable symbolname, then reassemble is not useful anymore)


I decided to try to use a readmem because I wanted to use aobscanregion in case the offset for the jump changed with an update or on another persons pc when unity does its JIT. Readmem definitely will not reassemble the jne properly. And I can't use reassemble with the far jumps, but even then I could never get reassemble to work with an aobscanregion and unity.

Hm, I guess Ill just backtrace and throw the code onto the end of the structure that was called. Much simpler. Thanks!
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 467

Joined: 09 May 2003
Posts: 25698
Location: The netherlands

PostPosted: Sun Feb 26, 2023 5:20 am    Post subject: Reply with quote

in your original script your readjmp didn't need reassemble, because it's a store of the original code and you do not want to modify that

but in code4 you would need to use reassemble, if you use an AOB scan to find it

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
gid2525
Expert Cheater
Reputation: 2

Joined: 21 Oct 2013
Posts: 101

PostPosted: Sun Feb 26, 2023 5:42 am    Post subject: Reply with quote

Dark Byte wrote:
in your original script your readjmp didn't need reassemble, because it's a store of the original code and you do not want to modify that

but in code4 you would need to use reassemble, if you use an AOB scan to find it


Ah but it appears reassemble won't work with 14 byte jumps in unity. Also, since unity, then would need aobscanregion NOT aobscan. Not sure if Aobscanregion would even work with reassemble either in unity. But its a mute point since reassemble doesn't work with far jumps. I was able to just change a value of the function that was called just before the compare and used that instead as an injection point. So its all good. Would be nice if reassemble was fixed for 14 byte jumps and tested to work with aobscanregion also in unity at some point though.

Thanks!
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 467

Joined: 09 May 2003
Posts: 25698
Location: The netherlands

PostPosted: Sun Feb 26, 2023 6:04 am    Post subject: Reply with quote

reassemble works, but you can not give it a string/symbol which is case sensitive like mono, it has to be an address, like the result of an aob

e.g it can reassemble
23fe8224c+2
but not
TenCrowns.GameCore.Player:isValidSubjectAnyCharacter+224c+2

Of course, knowing the EXACT address means reassemble isn't needed. You can just use the j* <symbolname> notation and CE will assemble it correctly for you regardless of the destination distance

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
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