Pet*_*ter 2 c++ 64-bit x86 winapi inject
我正在使用x86 dll注入器,我想将x86代码注入到x64进程线程中并执行它。首先,我在x64进程上调用CreateRemoteThread失败,从而导致错误代码5。然后,我找到了这个技巧,并且能够使用它创建远程线程。但是,当我尝试使用ResumeThread并在x64进程内执行该x86代码时,整个进程将崩溃。
将x86注入x86效果很好,问题仅在于x86到x64。
所以,我的问题是-是否可以模拟并运行在x64进程中复制的x86代码?我知道执行此操作的一种方法是拥有相同代码的两个版本,然后根据远程进程的体系结构选择一个版本,但是我认为这样做并不是最好的方法。
谢谢。
段选择器确定位数,因此您要做的就是使用正确的段选择器进行“某种形式的远跳”。当使用64位时,已经没有太多方法可以做到这一点。retf仍然有效。
未经测试,但您明白了:
sub rsp, 8
mov dword [rsp+4], 0x23   // 32 bit segment selector
mov dword [rsp], offset some32bitcode
retf
就是这样,您现在处于32位模式。这可能会导致严重损坏(尤其是如果您尝试调用任何Windows函数),但是您可以- 可以做到(只是不要这样做)。
您可以更轻松地切换回:
jmp far 33h:some64bitcode // 64 bit segment selector
在64位模式下,无法直接跳远。间接的远距离跳转/远距离调用仍然存在,并且远距离返回也很明显是间接的。
23h和33h是windows的值,在其他操作系统上可能是(可能是)不同。
当然,这仍然意味着您必须以不同的方式处理64位进程。
| 归档时间: | 
 | 
| 查看次数: | 2376 次 | 
| 最近记录: |