【发布时间】:2021-08-05 23:03:28
【问题描述】:
所以我想把一个编译好的 C 程序转换成 Hex 格式,这样我就可以把它注入到内存中。我目前面临的问题是我不知道如何将编译的 C 文件转换为十六进制。谁能告诉我它是怎么做的?
我的 C 代码 (temp.c):
#include <stdio.h>
void main(){
printf("Working!");
}
使用 gcc 编译:
gcc -g temp.c -o temp -m32
【问题讨论】:
-
您可以为此使用
objcopy实用程序。但请记住,仅将 C 程序注入内存对于 shellcode 目的并不是特别有用。 Shellcode 通常需要根据环境要求专门编写才能有用。 C 编译器无法做到这一点。您必须在汇编中编写它并学习如何做到这一点。 -
你不会知道
printf在目标进程的虚拟地址空间中的位置,无论是绝对地址还是相对距离,所以没有实用的方法来调用它。您需要内联系统调用。同样,您要使用的内存中的任何数据(例如"Working!")都需要与您的代码连续或在堆栈上构造,而不是在.rodata中。