如何在shellcode

时间:2017-08-12 13:24:08

标签: windows 64-bit nasm shellcode

我想使用以下NASM代码生成shellcode:

global _start
extern exit

section .text
_start:
    xor     rcx, rcx
    or      rcx, 10
    call    exit

这里的问题是我不能使用它,因为exit函数的地址不能被硬编码。那么,如何使用库函数而不必使用系统调用重新实现它们呢?

我能想到的一种方法是使用exit在预处理程序中检索GetProcAddress函数的地址,并将其替换为适当位置的shellcode。

但是,此方法不会生成可以按原样运行的shellcode。我确信必须有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

我不是编写shellcode的专家,但你可以尝试找到目标程序的导入地址表(IAT),并使用存储的函数指针来调用windows函数。 请注意,您将受限于目标程序使用的功能。 此外,由于重定位,您必须让shellcode计算IAT相对于进程基址的位置。当然,您可以依赖Windows不重定位,但这可能会在少数情况下导致错误。 另一个问题是您必须从外部找到目标进程的基址。 一个完全不同的尝试是使用系统调用,但它们真的很难使用,而不是在谈论使用它们的危险。

有关PE文件结构的信息: https://msdn.microsoft.com/en-us/library/ms809762.aspx

相关问题