MythicalCreature Posted April 10, 2016 Share Posted April 10, 2016 I've seen this being used in countless ASM based CLEO scripts, but I don't have that much of a clue as to what it is and what it does. So could someone please enlighten my ignorance? Thanks in advance. Link to comment Share on other sites More sharing options...
Silent Posted April 10, 2016 Share Posted April 10, 2016 BaseIP is the memory address of the beginning of your CLEO script. Therefore, jumps work by relocating CurrentIP to BaseIP+abs(label_offset) (label offsets are negative in CLEO scripts and external SCM scripts). You can use this to obtain the memory address of your specific label inside a CLEO script and use that to write to it or to relocate the game's code to this address (although the latter is very fishy and will be flagged by Data Execution Prevention if for some reason it's enabled on user's game EXE). MythicalCreature 1 Link to comment Share on other sites More sharing options...
MythicalCreature Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) So I can inject compiled C++ code into the game using this? If so, how? From what I can understand if this is how I can get the absolute address of a label: 0A9F: [email protected] = [email protected] += 160A8D: [email protected] = read_memory [email protected] size 4 vp 00A8F: [email protected] = [email protected] - @labelThen how do I execute the binary code after the label? Or is it done another way? I apologize for any mistakes in understanding, my knowledge of asm is pretty basic lol Edited April 10, 2016 by MythicalCreature Link to comment Share on other sites More sharing options...
Silent Posted April 10, 2016 Share Posted April 10, 2016 (edited) If you have a C++ code, why bother injecting with CLEO? It's hacky, error prone and hard to build upon, plus it's violating basic security concepts (executing data). Edited April 10, 2016 by Silent thehambone 1 Link to comment Share on other sites More sharing options...
MythicalCreature Posted April 10, 2016 Author Share Posted April 10, 2016 Actually my knowledge of C++ is even more mediocre than my knowledge of ASM atm (still learning the basics), and I just asked that question out of curiosity as to how other mod creators do it as I thought it might be useful to know if I do ever feel the need to use it sometime in the future for any scripts. But the Base IP feature is still going to be very useful for me nonetheless. Thanks. Link to comment Share on other sites More sharing options...
Silent Posted April 10, 2016 Share Posted April 10, 2016 Basing on my own experience, if you're capable of writing a simple C++ plugin which injects itself into the game then it's not worth investing time into learning on how to do it with SCM. It's just not worth it. MythicalCreature and thehambone 2 Link to comment Share on other sites More sharing options...
fastman92 Posted April 11, 2016 Share Posted April 11, 2016 If you have a C++ code, why bother injecting with CLEO? It's hacky, error prone and hard to build upon, plus it's violating basic security concepts (executing data). Deji should make a memory for CLEO scripts being allocated with the PAGE_EXECUTE permission. Link to comment Share on other sites More sharing options...
goodidea82 Posted April 11, 2016 Share Posted April 11, 2016 One of the reasons I really like CLEO is because it is relatively easy to analyze if it has a virus. If if has no direct memory manipulation, hex-end sections, or file access, then it can be assumed to be safe. Analysing ASI in this respect is much more difficult (too difficult for me). From this perspective PAGE_EXECUTE prevention can also be seen as a feature. Link to comment Share on other sites More sharing options...
Seemann Posted April 11, 2016 Share Posted April 11, 2016 So I can inject compiled C++ code into the game using this? If so, how? From what I can understand if this is how I can get the absolute address of a label: 0A9F: [email protected] = [email protected] += 160A8D: [email protected] = read_memory [email protected] size 4 vp 00A8F: [email protected] = [email protected] - @labelThen how do I execute the binary code after the label? Or is it done another way? I apologize for any mistakes in understanding, my knowledge of asm is pretty basic lol Put your C++ code into a dll, then load and execute its code from a CLEO script using opcodes: 0AA2: $hLIB = load_library "CLEO\version.dll" // IF and SET 0AA4: $hPROC = get_proc_address "GetVersion" library $hLIB // IF and SET 0AA5: call $hPROC num_params 1 pop 1 $param MythicalCreature 1 Sanny Builder 3 • SA Memory Handling • OpenIV • gtamodding.com CLEO.li - The CLEO Library - Official site Link to comment Share on other sites More sharing options...
MythicalCreature Posted April 12, 2016 Author Share Posted April 12, 2016 Oh, I see. Thanks for the help man. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now