吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2378|回复: 22
收起左侧

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

[复制链接]
disllusion 发表于 2023-2-13 10:44
25吾爱币
最近在学习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,[rax+rcx+30]<<<<<<<<
7FED0154DD1 - mov al,01
7FED0154DD3 - movups [rdi],xmm0

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

最佳答案

查看完整内容

AOB 在得到代码模板后 你要自己再 字节数组 去搜一下 下面可读可写什么的 点成兼容。 然后 看是不是能搜到唯一地址。 至于你回贴问的,因为我没实操,所以也不知道你找的位置对不对。 有兴趣 你就 push rdx mov rdx,rcx add rdx,rax add rdx,30 mov [你新弄一个人造地址],rdx movups xmm0,[rax+rcx+30] pop rdx 然后添加地址 你新弄一个人造地址, 去看看到底是哪儿 是不是你想要的 是不是经常变。 这种 xmm0 ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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,[rax+rcx+30]
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
那么 根据 查找访问或写入定位的汇编 那就是 [rax+rcx+30] = 12ABAB678

也就应该 [12ABAB000+640+30] => [12ABAB670] 的值 是 12ABAB678

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

另外 因为你只贴了 文本 所以 我也不清楚具体的。
然后 你说的 变量地址的值 12AF21320 这个 到底是 rcx = 12AF21320 还是 [rcx] = 12AF21320 你要自己试试去。
最好就是 你定义两个 一个存 rcx 一个存 [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 [mpmax],rcx          (把rcx的地址保存到变量mpmax的值中 )
  movups xmm0,[rax+rcx+30]
这里保存的是rcx的地址到mpmax值中
手动添加地址[mpmax],显示的地址是:12AF21320。值为:73B82550(十六进制)
因为这是个中间量值这里就很懵,因为[mpmax]表示的是值,里面存的应该是RCX=12ABAB000
为什么限制地址变成:12AF21320很不理解。
另外想问下如果我想要得到最终的地址:12ABAB678。我该如何写指针?mpmax(无[])添加偏移→640(一级指针)添加偏移→30(二级指针)完全不对。最终指针地址为:73B82580和我想要的12ABAB678地址相差甚远。这里就太懵了。
手动添加地址不用指针:[mpmax]+640+30最终地址为:12AF21990值为0也不对。请大神帮忙看下。什么问题。
alicc 发表于 2023-2-13 11:48
本帖最后由 alicc 于 2023-2-13 11:51 编辑

[rax+rcx+30] 一般里面有多个地址   rax理解临时基质+rcx 比如1+30 =第一个地址  +2+30=第二个地址  具体偏移多数下断查看,rcx多数情况下当偏移使用 如果是特殊点的游戏可能位置不一样,原理是一样的
 楼主| disllusion 发表于 2023-2-13 11:53
alicc 发表于 2023-2-13 11:48
[rax+rcx+30] 一般里面有多个地址   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+30] 一般里面有多个地址   rax理解临时基质+rcx 比如1+30 =第一个地址  +2+30=第二个地址  具体偏 ...

并且我尝试用指针这么写[mpmax]+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。显示编译不通过,想想确实不能用地址保存地址。如果想保存的话肯定使用值保存那么[mpmax]在前面是肯定的。如果想保存rcx中的值的话只能用一个中间量。这个中间量就不太会写。看其他大神好像是用一个通用寄存器push 比如rax这种。之后用mov rax,[rcx]
mov [mpmax],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 [mpmax],rcx          (把rcx的地址保存到变量mpmax的值中 )
  movups xmm0,[rax+rcx+30]
所以才引发了,这个问题,我保存之后的[mpmax]手动添加地址地址显示的不如我所想的,值也不对。

另外偏移不是加法,rax+rcx+30这种。楼上有说用加法算的,我总觉得不太对劲。这种形式的不是应该用偏移表示吗?偏移是位计算和加法好像没什么关系吧。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表