Closed TaihouKai closed 4 months ago
因为key是个32位的字节串
因为key是个32位的字节串
感谢回复。如果按照代码里的话,get_exe_bit会返回64吧?(因为是64位的exe) 那样的话addr_len就得是64了……?
(get_wx_info.py
)
addrLen = get_exe_bit(process.exe())
...
...
if rd['filePath'] != "None" and rd['key'] == "None" and not isKey:
rd['key'] = get_key(rd['pid'], rd['filePath'], addrLen)
这个和系统位数以及内存读写方式有关。 32位系统和64位系统,对内存读写单元大小不同。
这个和系统位数以及内存读写方式有关。 32位系统和64位系统,对内存读写单元大小不同。
感谢回复。
这样的话,如果我要手动复现遍历,请问这个地方的for j in range(i, i - 2000, -addr_len):
是不是该改成-int(addr_len/8)
,以匹配读写单元的大小(4/8 bytes)?我试了下,不改成/8的话在我的电脑上遍历不着key
for i in type_addrs[::-1]:
for j in range(i, i - 2000, -addr_len):
key_bytes = read_key_bytes(pm.process_handle, j, addr_len)
if key_bytes == "None":
continue
# print(key_bytes.hex())
if verify_key(key_bytes, MicroMsg_path):
key = key_bytes.hex()
@TaihouKai 所以你已经有了结论。
我自己手动写代码测试了这个遍历找key的
get_key
function:我发现
addr_len=64
的情况下找不到key,只有在addr_len=16
或者8
的情况下可以。 (我试过get_exe_bit,确实返回的是64) 请问这是为什么?