首页 文章

如何将shellcode反汇编成汇编指令? [重复]

提问于
浏览
0

这个问题在这里已有答案:

是否有一些工具可以将原始六角形拆卸成装配说明?例如:假设我们根据this在线反汇编程序将 \xeb\x1d 反汇编成 jmp 0x1f . 那么有一些离线工具吗?我试过ndisasm它没有给我正确的输出 .

ndisam -b32 foo给了我:

OUTPUT:

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

OUTPUT:

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,但我想要一些更灵活的东西 .

1 回答

  • 3

    正如评论所建议的那样,您的问题是您已将字符串 \xeb\x1d 作为ASCII输出到您尝试反汇编的文件中 . 你可能做过类似的事情:

    echo '\xeb\x1d' >foo
    

    你可以这样做但你想告诉 echo 来解释转义字符 \ . 这可以使用 -e 选项完成 .

    您希望它不使用 -n 选项在末尾添加换行符 . 这在ECHO手册页中有记录:

    -n不输出尾随换行符
    -e启用反斜杠转义的解释

    这可能有效:

    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行业! ;-)

相关问题