disllusion 发表于 2023-2-13 10:44

小白问题关于CE地址偏移计算,想学习CE请大神们给指指路。

最近在学习CE,稍微懂点但没基础,很多东西都不懂,望大神们有空帮忙看一眼。
搜索到的需要的地址为:12ABAB678
地址访问记录:
RAX=00000640
RBX=0014D820
RCX=12ABAB000
RDX=12B0F4C00
RSI=12B0F4C00
RDI=0014D7C0
RBP=0014D849
RSP=0014D770
RIP=7FED0154DD1

Label1
7FED0154DC8 - shl rax,05
7FED0154DCC - movups xmm0,<<<<<<<<
7FED0154DD1 - mov al,01
7FED0154DD3 - movups ,xmm0

xmm0在以往的经验中是肯定不能保存在自己创建的变量中的。的地址是我需要的。其他值已知,不知道怎么读取的地址值,于是自动汇编中定义了一个变量保存rcx的地址值。
问题1:
但是手动添加自己保存这rcx的变量显示这个变量地址的值:12AF21320。这里就不太懂了,我保存的是RCX,讲道理变量保存的是rcx的值我手动添加变量地址值不是应该显示变量的地址为12ABAB000吗?为什么是12AF21320?
问题2:
当这些寄存器的值都已知的情况下,我该如何用指针表示这些偏移量让他最终指向我想要的?
问题3:
没什么基础,又想学CE和OD什么的,现在主流汇编教程又太绕了,我该从哪里学习才能最快的达到我的使用目的请大神们给点意见。

pjy612 发表于 2023-2-13 10:44

本帖最后由 pjy612 于 2023-2-14 08:58 编辑

disllusion 发表于 2023-2-13 21:43
首先十分感谢您的认真回答。
问题1,
按照你的方法,我尝试

AOB 在得到代码模板后 你要自己再 字节数组 去搜一下 下面可读可写什么的 点成兼容。
然后 看是不是能搜到唯一地址。

至于你回贴问的,因为我没实操,所以也不知道你找的位置对不对。
有兴趣 你就

push rdx
mov rdx,rcx
add rdx,rax
add rdx,30
mov [你新弄一个人造地址],rdx
movups xmm0,
pop rdx

然后添加地址 你新弄一个人造地址, 去看看到底是哪儿 是不是你想要的 是不是经常变。
这种 xmm0 只知道适合浮点数相关但是一般不会直接改的好像。
具体的让其他大佬来回答你吧。

结合你最开始帖子,我估计你最后需要的地址可能是你新弄一个人造地址+0x8

pjy612 发表于 2023-2-13 11:22

本帖最后由 pjy612 于 2023-2-13 11:24 编辑

RAX=00000640
RCX=12ABAB000
12ABAB000+640+30 = 12ABAB670

距离你要查的是 12ABAB678 好像还差了 8 ?
如果 你搜的 十六进制 就是 12ABAB678
那么 根据 查找访问或写入定位的汇编 那就是 = 12ABAB678

也就应该 => 的值 是 12ABAB678

具体的你 下了断点后 多添加地址或指针看看 多搜搜看看 怎么算能和你想要的数据对上,
地址 xxxx 就是 xxxx 存的值
指针 xxxx 就是 的值 也就是 xxxx 下面的 地址 在下面 存的值
大概就是
地址是 400001 存的 0x500000
地址是 500000 存的 100
那么 400001 => 0x500000 , => 100

另外 因为你只贴了 文本 所以 我也不清楚具体的。
然后 你说的 变量地址的值 12AF21320 这个 到底是 rcx = 12AF21320 还是 = 12AF21320 你要自己试试去。
最好就是 你定义两个 一个存 rcx 一个存 看看哪个是你要的,推荐 存 rcx。

disllusion 发表于 2023-2-13 11:46

pjy612 发表于 2023-2-13 11:22
RAX=00000640
RCX=12ABAB000
12ABAB000+640+30 = 12ABAB670


自动汇编中:
registersymbol(mpmax)
alloc(mpmax,$8)
mov ,rcx          (把rcx的地址保存到变量mpmax的值中 )
movups xmm0,
这里保存的是rcx的地址到mpmax值中
手动添加地址,显示的地址是:12AF21320。值为:73B82550(十六进制)
因为这是个中间量值这里就很懵,因为表示的是值,里面存的应该是RCX=12ABAB000
为什么限制地址变成:12AF21320很不理解。
另外想问下如果我想要得到最终的地址:12ABAB678。我该如何写指针?mpmax(无[])添加偏移→640(一级指针)添加偏移→30(二级指针)完全不对。最终指针地址为:73B82580和我想要的12ABAB678地址相差甚远。这里就太懵了。
手动添加地址不用指针:+640+30最终地址为:12AF21990值为0也不对。请大神帮忙看下。什么问题。

alicc 发表于 2023-2-13 11:48

本帖最后由 alicc 于 2023-2-13 11:51 编辑

一般里面有多个地址   rax理解临时基质+rcx 比如1+30 =第一个地址+2+30=第二个地址具体偏移多数下断查看,rcx多数情况下当偏移使用 如果是特殊点的游戏可能位置不一样,原理是一样的

disllusion 发表于 2023-2-13 11:53

alicc 发表于 2023-2-13 11:48
一般里面有多个地址   rax理解临时基质+rcx 比如1+30 =第一个地址+2+30=第二个地址具体偏 ...

但rax现在显示为RAX=00000640。这明显不是一个有效内存地址,更不可能作为基质使用。讲道理这里指针应该写成rax添加偏移rcx添加偏移30.但我实际添加地址最终指针状态是:
地址:p→?????????
值:??

disllusion 发表于 2023-2-13 12:02

alicc 发表于 2023-2-13 11:48
一般里面有多个地址   rax理解临时基质+rcx 比如1+30 =第一个地址+2+30=第二个地址具体偏 ...

并且我尝试用指针这么写+640添加偏移30也不对。如果说下断的话这里就不太会了,只有一个偏移勉强很能理解,这2个变量的偏移我都不知道该追rax的基质还是rcx的基质。并且ce下断只能往下找。往上翻下断用CE的话出了本函数都没显示,如果用OD的话,初学完全不理解2个变量的的汇编代码代表什么,这就是我这个问题让我最懵的地方,想补课查了些资料,讲的都是其他东西。就没找到对应的教程。

disllusion 发表于 2023-2-13 12:15

pjy612 发表于 2023-2-13 11:22
RAX=00000640
RCX=12ABAB000
12ABAB000+640+30 = 12ABAB670


另外自动汇编自定义变量 mov mpmax,rcx。显示编译不通过,想想确实不能用地址保存地址。如果想保存的话肯定使用值保存那么在前面是肯定的。如果想保存rcx中的值的话只能用一个中间量。这个中间量就不太会写。看其他大神好像是用一个通用寄存器push 比如rax这种。之后用mov rax,
mov ,rax pop rax.但这里又不理解,rax中存在一个值,如果这么压栈赋值传递肯定会导致程序崩溃。

alicc 发表于 2023-2-13 12:21

本帖最后由 alicc 于 2023-2-13 12:25 编辑

disllusion 发表于 2023-2-13 11:53
但rax现在显示为RAX=00000640。这明显不是一个有效内存地址,更不可能作为基质使用。讲道理这里指针应该 ...
那就找rcx的来源。数组一般不会变这临时rcx的+多少偏移等于下个地址。

disllusion 发表于 2023-2-13 12:25

本帖最后由 disllusion 于 2023-2-13 12:27 编辑

alicc 发表于 2023-2-13 12:21
那就找rcx的基质。
因为找基质麻烦,所以,我用自动汇编定义了一个变量想保存rcx,像这样
registersymbol(mpmax)
alloc(mpmax,$8)
mov ,rcx          (把rcx的地址保存到变量mpmax的值中 )
movups xmm0,
所以才引发了,这个问题,我保存之后的手动添加地址地址显示的不如我所想的,值也不对。

另外偏移不是加法,rax+rcx+30这种。楼上有说用加法算的,我总觉得不太对劲。这种形式的不是应该用偏移表示吗?偏移是位计算和加法好像没什么关系吧。
页: [1] 2 3
查看完整版本: 小白问题关于CE地址偏移计算,想学习CE请大神们给指指路。