所有,
我已经尝试了几天了,我需要一些帮助。
对于一个工作研究项目,我编写了一些自定义恶意软件,该恶意软件本身不是这里的问题,我不会共享任何代码,但是我确实需要有关实际注入(inject)器的帮助。
我在尝试完全理解如何以及何时需要执行手动重定位时遇到一些问题。我现在不在重定位,而是使用virtualallocex中的随机地址,一切正常。我的恶意软件exe运行,并且没有问题,除非将远程进程PE加载到的内存位置与我的恶意软件PE首选基址重叠。
我没有使用NtUnmapViewOfSection,因为它已被AntiVirus检测到,并且基本上只是一个随机无效的废话功能,所以我的计划是仅使用VirtualAllocEx提供的随机地址,并在需要时进行重新定位(我不理解) ,请参阅下面的问题)。
这是我当前的工作方法(除非目标过程与preferredbase重叠):
因此,请帮助我了解以下内容:
希望有人可以帮助我理解,因为这让我发疯了:)。
最好的祝福!
最佳答案
1:这是因为汇编代码的工作方式。大多数jmp都相对于当前地址,因此无论代码位于何处都可以工作。一旦您要查找变量/从IAT解析dll导入地址,就会出现问题。这是因为这些操作需要MOV指令,并且通常编译器会将地址硬化为这些函数的源操作数。然后的问题是它将指向某个随机位置,因此将导致访问冲突/不确定的行为。
我认为对您而言,主机进程和有效负载都具有相同的首选基址。这意味着它不会因访问冲突而失败,因为该位置恰好有一些随机数据。
如果始终将有效负载加载到首选的基地址,则无需进行手动重定位。
2:不确定你的意思
3:对于普通的简单应用程序,您不必更改首选的基地址。当您的有效负载需要访问其重定位表时(例如,在部署rootkit或w / e时),问题就出现了。这取决于病毒的构建方式。如果将首选基址与实际基址进行比较应该不会有任何问题。
对于您的CREATE_SUSPENDED问题:几周前,我也遇到了同样的问题。似乎一旦恢复使用CREATE_SUSPENDED创建的线程,它就会覆盖其寄存器或w / e。我不知道为什么这个问题到来。但是,您可以做些什么来克服这个问题,根本不要恢复主线程。相反,只需使用CreateRemoteThreadEx创建一个新线程。
编辑:在阅读了您的其他问题之一之后,您实际上为我解决了这个问题。我正在更改EIP而不是EAX。我不知道PE加载程序称为eax,而不仅仅是在指令指针处恢复代码。
如果您需要任何帮助,HMU。我已经完成了有关恶意软件开发的大量研究,并且喜欢分享知识。
关于c++ - PE注入(inject)图像重定位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42567410/