如何将0x前缀十六进制序列转换为标准shellcode字节格式
十六进制转Python shellcode格式实现方法
方法1:Python脚本自动转换(推荐,零出错)
这是效率最高、不会漏字节错字节的方案,步骤如下:
- 把你原始的逗号分隔带0x前缀的十六进制内容,完整粘贴到脚本的
raw_hex变量里 - 运行脚本直接输出符合目标格式的结果,脚本会自动处理换行、多余空格,还可以自定义每行输出的字节数
# 粘贴原始十六进制内容到此处 raw_hex = """0x62, 0x75, 0x66, 0x20, 0x3d, 0x20, 0x20, 0x62, 0x22, 0x22, 0x0a, 0xeb, 0x7c, 0x38, 0x5c, 0x78, 0x34, 0x65, 0x5c, 0x78, 0x32, 0x39, 0x5c, 0x78, 0x31, 0x35, 0x5c, 0x78, 0x39, 0x39, 0x5c, 0xeb, 0x34, 0xeb, 0x27, 0x65, 0x5c, 0x78, 0x64, 0x36, 0x5c, 0x0f, 0x88, 0x34, 0x04, 0x00, 0x00, 0x38, 0x5c, 0x78, 0x38, 0x34, 0x5c, 0x78, 0x63, 0x31, 0x22, 0x0a, 0x62, 0x75, 0x66, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x22, 0x5c, 0xe9, 0x1c, 0x03, 0x00, 0x00""" # 核心转换逻辑 hex_list = [item.strip().removeprefix('0x') for item in raw_hex.replace('\n', '').split(',') if item.strip()] per_line_byte = 12 # 可自定义每行输出的字节数,和参考格式对齐 print('buf = b""') for idx in range(0, len(hex_list), per_line_byte): line_content = '\\x' + '\\x'.join(hex_list[idx:idx+per_line_byte]) print(f'buf += b"{line_content}"')
针对你给出的样例输入,脚本运行后输出的结果如下:
buf = b"" buf += b"\x62\x75\x66\x20\x3d\x20\x20\x62\x22\x22\x0a\xeb" buf += b"\x7c\x38\x5c\x78\x34\x65\x5c\x78\x32\x39\x5c\x78" buf += b"\x31\x35\x5c\x78\x39\x39\x5c\xeb\x34\xeb\x27\x65" buf += b"\x5c\x78\x64\x36\x5c\x0f\x88\x34\x04\x00\x00\x38" buf += b"\x5c\x78\x38\x34\x5c\x78\x63\x31\x22\x0a\x62\x75" buf += b"\x66\x20\x2b\x3d\x20\x62\x22\x5c\xe9\x1c\x03\x00" buf += b"\x00"
方法2:编辑器正则快速替换(无需写脚本)
如果不想运行Python脚本,可以用支持正则替换的编辑器(VS Code、Notepad++等)快速处理:
- 第一步:把所有十六进制内容粘贴到编辑器中,先全局删除所有换行、多余空格,整理成单行逗号分隔的格式
- 第二步:打开正则替换功能,填写以下规则执行全局替换:
- 查找内容:
0x([0-9a-fA-F]{2}),?\s* - 替换为:
\\x$1
- 查找内容:
- 第三步:手动在内容最开头加上
buf = b"",再把替换后得到的长转义字符串按需要的长度拆分成多行,每行前后包裹buf += b"和"即可。
注意:转换过程中不要手动增删字符,尤其是0x00这类不可见字节,漏改会直接导致shellcode运行失效。
内容的提问来源于stack exchange,提问作者Ben kubi
相关产品推荐
相关产品推荐

