| View previous topic :: View next topic |
| Author |
Message |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Sun Jun 12, 2016 9:12 am Post subject: Pointer scanning Dragon Age: Inquisition |
|
|
I don't know if I should address both issues here or make a second topic because I've run into many different problems. What I am currently trying to do is find the base address for Main Hand Attack Damage. I started the pointer scan with 10,000 offset and level 10 at normal thread. It's been 7 hours and the path count is 5,686,612,176,272 (im sure everyone can count but thats 5 trillion) is this normal? also my cpu is at 100% running this scan.
Above is what I'm currently attempting. The bigger mission was to find a way to script the Main Hand Attack Damage value (float) to stick; even through loading screens and game restart. Issue with that was the instruction that was writing to MH att Damage was: (off the top of my head) movss [rbx+30],xmm6. I injected with mov [rbx+30],#700. Crashed my game to kingdom come. (I have a lot more detailed info on this topic; should I make another post elsewhere for this?)
|
|
| Back to top |
|
 |
ulysse31 Master Cheater
Reputation: 2
Joined: 19 Mar 2015 Posts: 324 Location: Paris
|
Posted: Sun Jun 12, 2016 10:04 am Post subject: |
|
|
Why do you go 10 level deep and with 10 k offset?
Did you not find any pointer with the default value that CE pre-fills ?
How many addresses is movss [rbx+30],xmm6 accessing ?
(memory view right click the opcode and chose "find out what address this instruction accesses").
IF it access only one you should hook it and retrieve the MH attack address, if it accesses more than one it would be another reason for your game crash.
refer to : http://forum.cheatengine.org/viewtopic.php?t=572465
Finally why would you move an integer into a float ? (ie you know it's float and yet you move #700 to it)
Ps :
000002BC translates to decimal 700 for an integer variable
442F0000 translates to decimal 700 for a float variable
and finally integer decimal 700 translates into a 9.80 x 10^-43 float variable
|
|
| Back to top |
|
 |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Sun Jun 12, 2016 12:40 pm Post subject: |
|
|
| Quote: | | Why do you go 10 level deep and with 10 k offset? |
I tried other presets including the default and none worked including the level 10 one (it crashed before it can finish)
| Quote: | | why would you move an integer into a float ? |
My mistake I'm a little new to scripting I thought it just changes the value to 700. Do you know where I can get a command list for the assembler?
| Quote: | | How many addresses is movss [rbx+30],xmm6 accessing ? |
See the image link below. Thanks for the reference I will read up on it and try it out. I respond with an update.
i.imgur(dot)com/MSPk2W1.jpg
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4710
|
Posted: Sun Jun 12, 2016 1:24 pm Post subject: |
|
|
I'm not surprised at all you're getting 5 trillion+ pointer paths found with those settings. In that image you posted, all the offsets were +30, so the last offset of a real pointer path is probably going to be 30. Also, set "Max different offsets per node" to 3. If the scan completes too quickly with those settings, raise max different offsets per node or turn it off completely.
You can get the last few offsets (not just the last one) usually by trying to find the pointer path manually. Look at the CE tutorial for information on that. If you know how to read assembly, you can also usually look before one of the instructions that accesses your address and figure out the pointer path that way.
Writing to disk is usually the biggest bottleneck in the scan. Use a couple pointermaps at least. This will also help save on disk space a lot.
IMO code injection w/ AoB scan is usually a better way of getting a consistent reference to an address than pointers, but if you don't know assembly, it's difficult.
ulysse3131 asked how many addresses that instruction accesses, not how many instructions access that address. Right click on the instruction movss [rbx+30] in the disassembler and select "Find out what addresses this instruction accesses" to do exactly as it says.
You can use mov [rbx+30],(float)700 if you want. Technically, it's more appropriate to move the floating point number into an xmm register (when using SSE) and move that into an address, but whatever works. Here's an example of what I just said in case you didn't understand:
| Code: | ...
alloc(newmem,1024)
label(num)
newmem:
movss xmm6,[num]
movss [rbx+30],xmm6
jmp return
num:
dd (float)700
... |
Of course, if the instruction movss [rbx+30],xmm6 accesses more than one address, this code injection will also affect those addresses, potentially crashing the game.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Sun Jun 12, 2016 2:44 pm Post subject: |
|
|
| Quote: | | ulysse3131 asked how many addresses that instruction accesses |
There is 3 addresses that the instruction is accessing and the count keeps going up automaticly i.imgur(dot)com/7jSqXcS.jpg
I've done the tutorial a few days ago (been trying to hack this since lol) but when I attempted the manual pointer path method as soon as I do a mem search for rbx value it comes up with 0 found which is another issue I actually wanted to bring up. Why does that happen is the value hidden/encrypted? i.imgur(dot)com/2UW2o2T.jpg
I actually want to learn the assembly I don't mind the study
I appreciate both of your help you've given me new things to try. I will be home later; I'm still going through what ulysse3131 ref me earlier, I also want to give your code a try see what happens.
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4710
|
Posted: Sun Jun 12, 2016 3:13 pm Post subject: |
|
|
First of all, you should be using an 8 byte value type search instead of 4 byte since you're in a 64-bit process. 32-bit process = 32-bit address space = 2^32 possible addresses = 32 bits (4 bytes) needed to represent an address. Similar for a 64-bit process, but you should get the idea you need 8 bytes to represent an address.
However, that shouldn't be the thing causing any problems since the upper 4 bytes are 0. Either that offset is wrong or for some reason the next node is in read-only memory. I highly doubt the game encrypts pointer nodes; you shouldn't be concerned with that.
Sometimes, it doesn't matter if an instruction accesses more than one address. Seemingly more often than not, however, it will do something you don't want it to do. See this topic for information on that.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
ulysse31 Master Cheater
Reputation: 2
Joined: 19 Mar 2015 Posts: 324 Location: Paris
|
Posted: Sun Jun 12, 2016 4:26 pm Post subject: |
|
|
AOBscan and address hooking would be nice.
Don't forget to fill the dots (...) in the above posted code (select the opcode you wanna inject and press ctrl+A ctrl+I for auto assemble injection pattern, it will fill the dots for you).
However for now you probably wanna find an instruction that only accesses your MH address or you wanna find a marker such as a register value that indicates the opcodes are currently accessing the MH address (something like eax == specific value)
|
|
| Back to top |
|
 |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Mon Jun 13, 2016 1:49 am Post subject: |
|
|
OK so we made progress! I used the below code which kind of works. it brings my MH att dmg to 700 and stays! but it also changes crit chance, xp rate, mana, 3 attributes, and other stats to 700 as well. So i believe you guys are right, I possibly have the wrong address? but how? I can manually change the address to 700 and freeze it and it works but when I load or restart address is lost. an alternative if easier; have the script allow me to alter the address manually.
| Code: | [ENABLE]
aobscanmodule(INJECT,DragonAgeInquisition.exe,F3 0F 11 73 30 90) // should be unique
alloc(newmem,$1000,"DragonAgeInquisition.exe"+36BEE5D)
label(code)
label(return)
newmem:
code:
movss [rbx+30],xmm6
mov [rbx+30],(float)700
jmp return
INJECT:
jmp code
return:
registersymbol(INJECT)
[DISABLE]
INJECT:
db F3 0F 11 73 30
unregistersymbol(INJECT)
dealloc(newmem) |
So if possible to make something like the below image (not to that extreme though (at least not now lol)).
i.imgur(dot)com/1l3trNa.jpg
Its an outdated cheat table made by many people but posted by olegbl the op forum.cheatengine(dot)org/viewtopic.php?t=578120
I tried understanding how the scripts were accomplished at the time but I couldn't connect the dots.
|
|
| Back to top |
|
 |
ulysse31 Master Cheater
Reputation: 2
Joined: 19 Mar 2015 Posts: 324 Location: Paris
|
Posted: Mon Jun 13, 2016 5:55 am Post subject: |
|
|
you have several choices among which :
1) you take the MH address and find out what writes (or access) to it, you see several opcodes that you then follow in disassembler and you check what addresses these opcodes access, your goal is to find an opcode that *only* access the MH address because then when you inject your code you will only change MH value, by now you have understood that the reason you changed crit rate etc values is that the opcode you hooked not only access MH address but also crit rate address etc..
2) you set a breakpoint on the opcode you are currently hooking, and every time it accesses an address you take note of the registers, especially when it accesses MH address. You then restart the game and do it again and ideally you wanna find a key value within a register (rax rbx rcx rdx..) which means that the opcode is currently accessing MH address. If you can find that value I'll provide you a piece of code which you'll then understand.
Note that 1) is imo better than 2) and most likely 1 if well done is also patch-proof.
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4710
|
Posted: Mon Jun 13, 2016 8:15 am Post subject: |
|
|
| Hoittoru wrote: | | but it also changes crit chance, xp rate, mana, 3 attributes, and other stats to 700 as well. |
| ParkourPenguin wrote: | | Of course, if the instruction movss [rbx+30],xmm6 accesses more than one address, this code injection will also affect those addresses |
See this topic for information on dealing with instructions that access multiple addresses.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Mon Jun 13, 2016 1:35 pm Post subject: |
|
|
guys im stumped.
| Quote: | | you see several opcodes that you then follow in disassembler and you check what addresses these opcodes access |
I understand that may have worked but in the disassembler it does not give me the option to "follow" | Code: | | movss [rbx+30],xmm6 |
| Quote: | | information on dealing with instructions that access multiple addresses. |
I went through those steps, but when I "Find what addresses this code accesses" 3 codes show up not 1 i.imgur(dot)com/lT8WXZe.jpg however when I do something in the game to change my MH dmg; all these values show up like health, crit, etc. i.imgur(dot)com/xhiOx9Z.jpg I'm probably over look something basic ugh.. which part of that topic tutorial were you referring to (I went through all them anyway, but still...)
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4710
|
Posted: Mon Jun 13, 2016 1:42 pm Post subject: |
|
|
That instruction accesses multiple addresses. That's just how the game is programmed. You can't (easily) change that. It's not that you're missing anything; you're just overthinking this entire situation and making it more complicated than it actually is.
I was referring to the entire first post. Go through step 9 of the CE tutorial if you want to practice in an easier environment.
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
Hoittoru How do I cheat?
Reputation: 0
Joined: 12 Jun 2016 Posts: 9
|
Posted: Mon Jun 13, 2016 2:48 pm Post subject: |
|
|
| Quote: | | That instruction accesses multiple addresses. That's just how the game is programmed. |
Do you know where to go from that point? I don't see it in that topic, but I'll refer to step 9 in CET for now and see what I can workout from that to assist with this. Thanks
|
|
| Back to top |
|
 |
ParkourPenguin I post too much
Reputation: 152
Joined: 06 Jul 2014 Posts: 4710
|
Posted: Mon Jun 13, 2016 2:58 pm Post subject: |
|
|
| ParkourPenguin wrote: | | See this topic for information on dealing with instructions that access multiple addresses. |
I assume you're talking about this. If so, you should read the topic before you say it doesn't have any information on instructions that access multiple addresses, since that's the only thing it talks about.
TLDR summaries of the sections:
First section, "Target Unique Reads"- find an instruction which only accesses that address.
Second section, "Hack A Different Mechanic"- check if you can change something else that ends up having the same effect.
Third section, "Check The Player Structure"- look in the structure of that address to see if you can find some information (i.e. a string or some integer ID) you can use to segregate the address you're concerned with from other addresses. You might also be able to use registers or the stack, so take note of that too (use breakpoints).
_________________
I don't know where I'm going, but I'll figure it out when I get there. |
|
| Back to top |
|
 |
ulysse31 Master Cheater
Reputation: 2
Joined: 19 Mar 2015 Posts: 324 Location: Paris
|
Posted: Mon Jun 13, 2016 3:50 pm Post subject: |
|
|
| I launched the game actually and checked the opcodes, it doesn't access only 3 addresses.. it does so only when u dont use the game and u are on stat screen at which point if u do nothing it does access 3 addresses... among which your main hand attack is not, but actually this opcode accesses thousands of addresses, all the opcode which work with main hand attack damage access thousands of addresses unfortunately. It kind of makes it a pain to work with it.
|
|
| Back to top |
|
 |
|