吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2534|回复: 9
收起左侧

[求助] 读一个基于dll偏移的地址

[复制链接]
echo72 发表于 2022-2-25 22:29
地址是
xxx.dll + 0x40DF480, 偏移是offsets=[0x50, 0x408, 0x190, 0x88, 0x20, 0x18, 0x78]

我用python的pymem读xxx.dll的地址是 0x7ffccac40000

1.怎么会有这么大的物理地址?已经12位16进制了。
2.基于那个地址去读取的时候会报错,Int too long.

[Asm] 纯文本查看 复制代码
import pymem
# from ReadWriteMemory import ReadWriteMemory

pm = pymem.Pymem("abc.exe")
baseAddress = pymem.process.module_from_name(pm.process_handle, "assembly.dll").lpBaseOfDll

print(hex(baseAddress))   # 0x7ffccac40000

# rwm = ReadWriteMemory()
# process = rwm.get_process_by_id(17056)
# process.open()
# hp_pointer = process.get_pointer(0x7ffccac40000 + 0x40DF480, offsets=[0x50, 0x408, 0x190, 0x88, 0x20, 0x18, 0x78])
# hp = process.read(hp_pointer)
# print(hp)

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

黎昕 发表于 2022-2-25 23:29
64进程 地址就是这么大
 楼主| echo72 发表于 2022-2-25 23:36
黎昕 发表于 2022-2-25 23:29
64进程 地址就是这么大

不知道怎么ce读出来的地址和pymem不一样
quandu 发表于 2022-2-25 23:52
这个不是物理地址,这个是虚拟地址
int too long的意思是不是int只有4字节,读64位的可能需要long(8)字节这种
 楼主| echo72 发表于 2022-2-25 23:59
本帖最后由 echo72 于 2022-2-26 00:04 编辑
quandu 发表于 2022-2-25 23:52
这个不是物理地址,这个是虚拟地址
int too long的意思是不是int只有4字节,读64位的可能需要lon ...

cheat engine的第一个地址是 xxx.dll + 0x040d f480 = 0x 1f7 7ae2 0a80

用pymem读xxx.dll的 地址是 0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480

然后我就蒙蔽了,是差开一次地址转换么
黎昕 发表于 2022-2-26 14:09
echo72 发表于 2022-2-25 23:59
cheat engine的第一个地址是 xxx.dll + 0x040d f480 = 0x 1f7 7ae2 0a80

用pymem读xxx.dll的 地址是 0 ...

0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480 这个地址是对的 , 你还没读 要读这个地址的值才是
 楼主| echo72 发表于 2022-2-26 20:57
黎昕 发表于 2022-2-26 14:09
0x7ffccac40000 + 0x040df480 = 0x 7FFC CED1 F480 这个地址是对的 , 你还没读 要读这个地址的值才是

是的 ,谢谢 。你说的没错
我之前以为第一个第一个偏移不需要读来着。

现在还有一个问题就是,我这个多层偏移的指针,一直在抖动是怎么回事,有时候中间某一层会变不可读
黎昕 发表于 2022-2-26 22:28
echo72 发表于 2022-2-26 20:57
是的 ,谢谢 。你说的没错
我之前以为第一个第一个偏移不需要读来着。

因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 ,需要从你上面的偏移  重新读才能得到你想要的最终动态地址
 楼主| echo72 发表于 2022-2-26 23:50
黎昕 发表于 2022-2-26 22:28
因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 , ...

嗯,我知道是动态地址,但是在一局游戏里,那些中间偏移值的内存地址的读数也一直在变化,这样正常么。

[Asm] 纯文本查看 复制代码
address4 + offset = the value
address3 + offset -> address 4
address2 + offset -> address3
address1 + offset -> address2
xxx.dll + offset1 -> address1


就虽然 最终值是不变的,但是 address2,3,4 一直在变化(在一局游戏中),而且有时候会不可读。这就导致最终那个我想要的值,一直在反复出现又消失,虽然值是正确的。这种情况是正常的么?

谢谢
 楼主| echo72 发表于 2022-2-26 23:53
本帖最后由 echo72 于 2022-2-26 23:58 编辑
黎昕 发表于 2022-2-26 22:28
因为你最终的地址是动态地址,一直循环读就是了,比如新开一局游戏 这个地址就不是上一局的动态地址了 , ...

噢噢,你让我一直while True读到为止是吧? 我写了个连读20次循环,读不出再报错。读失败的机率还是很大。我怕写多了会死循环
因为我看别人视频里那些地址都没有这样”闪烁“,所以有点疑问
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-25 00:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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