关于64位程序内存HOOK的问题
本帖最后由 xiatianwl 于 2021-11-19 01:53 编辑如题,有一个8字节的64位内存基址,现在需要对这个基址写一系列赋值,mov eax XXXXXXXX等 但是写出赋值后的字节远超8字节
只能申请内存,然后跳过去在跳过来(就直接说HOOK了)但用易语言直接写jmp的话 因为是64位内存,直接写jmp{233}出来后有十
四个字节,完全8行,然后网上搜寻半天,搞到了{233}+跳到地址-内存地址-5的方法,写出来后是五个字节,然后从申请的内存跳回来到ret
的时候出问题了,直接崩了(咳咳,也可能是跳的时候崩了),后来有大佬指导说是高位内存这么写可以是五个字节,地位内存需要
用到FF2500000+到字节集(跳回地址)这个东西,否则跳回的地址就是错的,然后...程序崩了,查看基址的时候确实是跳到了一个??的区域
但是跳转的不是当时申请的内存区域,遇到这种情况应该怎么办,能不能求大佬给个思路
emmmmm或者给个申请高位内存的模块? 偏移不知道算对没,手机敲得,也不好测试
push 0
push rax
mov rax,addr
mov ,rax
pop rax
retn
附上你的例子啊不然谁知道你要跳到哪
首先,敏感肌能用吗?
然后
push 跳转地址
ret
x64尽量少用jmp进行跨模块跳转 spcTas 发表于 2021-11-19 09:02
首先,敏感肌能用吗?
然后
push 跳转地址
好的 谢谢大佬 另外敏感肌是啥 spcTas 发表于 2021-11-19 09:02
首先,敏感肌能用吗?
然后
push 跳转地址
好像不太行 PUSH 后边只能push四个字节的 要跳的基址是7FFC5B92EE18 这种需要八个字节的 Shark_鹏 发表于 2021-11-19 08:25
附上你的例子啊不然谁知道你要跳到哪
我写的例子都是错的....属实传上来也没啥用,就这么说吧我要从基址跳到申请的内存的地方,因为申请的内存是低位内存,所以需要使用FF25这种长跳才能跳过去,但是这段基址只能写进去8个字节,因为基址+8是个RET,这个RET不能动,一动这个ret程序就崩了,但是FF2500000000加上被跳的地址就需要14个字节了,但是我在一个讲HOOK帖子上看到一个大佬讲 FF25 00 00 00 00是jmp的写法 后边00 00 00 00四个字节是内存偏移,就是找一个有八字节的临近空内存地址,把需要跳的内存地址写进去,再把偏移写道00 00 00 00这四个字节里,就可以实现六字节长跳,但是我不会,所以来请教一下需要怎么搞 mov rax,xxxxxxxx
jmp rax
xxxxxxxx 这个就是要跳到的内存地址
dword64addr=0x12345678//
mov rax,addr
jmp rax
把地址赋值给rax 在jump rax
哇 还是新鲜的
页:
[1]