将编译后的 C 程序转换为 shellcode (Hex)

问题描述

所以我想把一个编译好的C程序转换成Hex格式,这样我就可以将它注入到内存中。我目前面临的问题是我不知道如何将编译的 C 文件转换为十六进制。有人可以告诉我它是如何完成的吗?

我的 C 代码 (temp.c):

#include <stdio.h>

void main(){
printf("Working!");
}

使用gcc编译: gcc -g temp.c -o temp -m32

解决方法

您可以使用 write(); 系统调用和 exit(); 系统调用在汇编中编写。

这里是我写的代码,文件 w.asm :

global _start
section .text

_start:

    push    byte  0x0a    
    push    dword "ing!"
    push    dword "Work"
    inc     ebx
    mov     ecx,esp
    mov     dl,9
    mov     al,4
    int     0x80

    xor     ebx,ebx
    mov     al,1
    int     0x80

使用 nasmld 进行组装和链接:

nasm -f elf w.asm && ld -o w w.o

像这样使用 objdump one-liner 将二进制文件转储为十六进制(shellcode 样式):

objdump -d ./w | grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g' 

你会得到这样的结果:

"\x6a\x0a\x68\x69\x6e\x67\x21\x68\x57\x6f\x72\x6b\x43\x89\xe1\xb2\x09\xb0\x04\xcd\x80\x31\xdb\xb0\x01\xcd\x80"

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...