如何解决将编译后的 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
使用 nasm
和 ld
进行组装和链接:
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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。