Ris*_*att 6 x86 assembly disassembly shellcode
是否有一些工具可以将原始十六进制分解为汇编指令?例如:假设我们有\xeb\x1d根据这个在线反汇编程序反汇编成jmp 0x1f。那么有没有一些离线工具?我试过 ndasm 它没有给我正确的输出。
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]
Run Code Online (Sandbox Code Playgroud)
它应该是 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>
Run Code Online (Sandbox Code Playgroud)
所以你能告诉我一些将原始十六进制代码反汇编成汇编语言的工具吗?
我也尝试过 gdb,但我想要更灵活的东西。
Mic*_*tch 11
正如评论所建议的那样,您的问题是您已将字符串\xeb\x1d作为 ASCII输出到您尝试反汇编的文件中。你可能做过类似的事情:
echo '\xeb\x1d' >foo
Run Code Online (Sandbox Code Playgroud)
您可以这样做,但您需要告诉echo解释转义字符\。这可以通过-e选项来完成。
您会希望它不使用该-n选项在末尾附加换行符。这记录在ECHO手册页中:
Run Code Online (Sandbox Code Playgroud)-n do not output the trailing newline -e enable interpretation of backslash escapes
这可能有效:
echo -ne '\xeb\x1d' >foo
Run Code Online (Sandbox Code Playgroud)
使用NDISASM反汇编字节:
ndisasm -b32 foo
Run Code Online (Sandbox Code Playgroud)
现在应该产生:
Run Code Online (Sandbox Code Playgroud)00000000 EB1D jmp short 0x1f
在不使用中间文件(如foo)的情况下,您可以将ECHO输出通过管道传输到NDISASM并以这种方式反汇编。这一行将采用一个 shell 代码字符串并输出反汇编:
echo -ne '\xeb\x1d' | ndisasm -b32 -
Run Code Online (Sandbox Code Playgroud)
在-上到底是要告诉NDISASM从标准输入,而不是明确的文件拆机输入。
我们现在彻底改变了 IT 行业!;-)