如何将shellcode反汇编成汇编指令?
How to disassemble a shellcode into assembly instruction?
是否有一些工具可以将原始十六进制反汇编成汇编指令?例如:假设我们有 \xeb\x1d 根据 this 在线反汇编器反汇编成 jmp 0x1f。那么有没有一些离线工具?我试过 ndisasm 它没有给我正确的输出。
ndisam -b32
foo 给我:
输出:
00000000 5C pop esp<br>
00000001 7833 js 0x36<br>
00000003 315C7865 xor [eax+edi*2+0x65],ebx<br>
00000007 620A bound ecx,[edx]
应该是jmp 0x1f。
我也试过像这样的objdump:
objdump -D -b binary -mi386 -M intel foo
输出:
00000000 <.data>:<br>
0: 5c pop esp <br>
1: 78 33 js 0x36 <br>
3: 31 5c 78 65 xor DWORD PTR [eax+edi*2+0x65],ebx<br>
7: 62 0a bound ecx,QWORD PTR [edx]<br>
你能告诉我一些可以将原始十六进制代码反汇编成汇编语言的工具吗?
我也尝试过 gdb,但我想要更灵活的东西。
正如评论所建议的那样,您的问题是您已将字符串 \xeb\x1d
作为 ASCII 输出到您试图反汇编的文件中。您可能做过类似的事情:
echo '\xeb\x1d' >foo
您可以这样做,但您需要告诉 echo
解释转义字符 \
。这可以通过 -e
选项来完成。
你会希望它不使用 -n
选项在末尾附加换行符。这记录在 ECHO 手册页中:
-n do not output the trailing newline
-e enable interpretation of backslash escapes
这可能有效:
echo -ne '\xeb\x1d' >foo
使用NDISASM反汇编字节:
ndisasm -b32 foo
现在应该产生:
00000000 EB1D jmp short 0x1f
不使用中间文件(如foo
)你可以通过管道将ECHO输出到NDISASM并以这种方式反汇编.此行将采用 shell 代码字符串并输出反汇编:
echo -ne '\xeb\x1d' | ndisasm -b32 -
末尾的 -
需要告诉 NDISASM 从标准输入而不是显式文件反汇编输入。
我们现在已经彻底改变了 IT 行业! ;-)
是否有一些工具可以将原始十六进制反汇编成汇编指令?例如:假设我们有 \xeb\x1d 根据 this 在线反汇编器反汇编成 jmp 0x1f。那么有没有一些离线工具?我试过 ndisasm 它没有给我正确的输出。
ndisam -b32
foo 给我:
输出:
00000000 5C pop esp<br>
00000001 7833 js 0x36<br>
00000003 315C7865 xor [eax+edi*2+0x65],ebx<br>
00000007 620A bound ecx,[edx]
应该是jmp 0x1f。 我也试过像这样的objdump:
objdump -D -b binary -mi386 -M intel foo
输出:
00000000 <.data>:<br>
0: 5c pop esp <br>
1: 78 33 js 0x36 <br>
3: 31 5c 78 65 xor DWORD PTR [eax+edi*2+0x65],ebx<br>
7: 62 0a bound ecx,QWORD PTR [edx]<br>
你能告诉我一些可以将原始十六进制代码反汇编成汇编语言的工具吗?
我也尝试过 gdb,但我想要更灵活的东西。
正如评论所建议的那样,您的问题是您已将字符串 \xeb\x1d
作为 ASCII 输出到您试图反汇编的文件中。您可能做过类似的事情:
echo '\xeb\x1d' >foo
您可以这样做,但您需要告诉 echo
解释转义字符 \
。这可以通过 -e
选项来完成。
你会希望它不使用 -n
选项在末尾附加换行符。这记录在 ECHO 手册页中:
-n do not output the trailing newline -e enable interpretation of backslash escapes
这可能有效:
echo -ne '\xeb\x1d' >foo
使用NDISASM反汇编字节:
ndisasm -b32 foo
现在应该产生:
00000000 EB1D jmp short 0x1f
不使用中间文件(如foo
)你可以通过管道将ECHO输出到NDISASM并以这种方式反汇编.此行将采用 shell 代码字符串并输出反汇编:
echo -ne '\xeb\x1d' | ndisasm -b32 -
末尾的 -
需要告诉 NDISASM 从标准输入而不是显式文件反汇编输入。
我们现在已经彻底改变了 IT 行业! ;-)