将exe转换为要由Python运行的十六进制

将exe转换为要由Python运行的十六进制,python,hex,byte,Python,Hex,Byte,我希望将应用程序存储为十六进制编码的字节数组,以便使用python执行它。传统上,我是使用msfencode创建的,但后来它被弃用了。我知道有msfvenom,但我想做我自己的,这样我就不必依赖其他程序了 基本上,我想做的是读取一个文件并将其存储为十六进制编码的二进制数组 例如,这是作为字节编码字节数组的Windows计算器(可在线找到): 我希望能够给它一个文件,并将其格式化为上述格式。您可以使用Python内置例程之一来完成此操作。以下假设数据包含.exe文件的(二进制)内容 import

我希望将应用程序存储为十六进制编码的字节数组,以便使用python执行它。传统上,我是使用msfencode创建的,但后来它被弃用了。我知道有msfvenom,但我想做我自己的,这样我就不必依赖其他程序了

基本上,我想做的是读取一个文件并将其存储为十六进制编码的二进制数组

例如,这是作为字节编码字节数组的Windows计算器(可在线找到):


我希望能够给它一个文件,并将其格式化为上述格式。

您可以使用Python内置例程之一来完成此操作。以下假设
数据
包含.exe文件的(二进制)内容

import binascii

def pairwise(iterable):
    "s -> (s0,s1), (s2,s3), (s4, s5), ..."
    a = iter(iterable)
    return zip(a, a)

hex_encoded = '\\x' + '\\x'.join(pair[0]+pair[1]
                                    for pair in pairwise(binascii.hexlify(data)))
print('data length: {}'.format(len(data)))
print('hex_encoded length: {}, "{}"'.format(len(hex_encoded), hex_encoded))
输出:

数据长度:227
十六进制编码长度:908,"\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x7\x7\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x4\x4\x4\x4\x4\x4\x4\x4\x4\x4\x4\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x\ x1f\x4a\xf1\xa1\xd0\x9f\xf0\xe6\x0c\x6f\xa0\xbf\x5b\xc2\x55\xcb\x19\xdf\x54\x1b\x16\x5f\x2f\x1e\X8\X8 8\X8 8 8\X8 8 8 8\X8 8 8 8 8 \X8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 \X8 8 8 8 8 8 8 8 8 8 8 \X8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 \X8 8 8 8 8 8 8 \X8 8 8 8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 4 4 4 4 4 4 4 4 4 4 4 \X4 4 4 4 4 4 4 4 4 4 4 4 4 \X8 8 8 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1\xd1\x2e\xdc\x75\xba\xf5\x7d\x2f\x66\x5b\x81\x2f\xce\x04\x27\x3b\xfc\x51\x51\x66\x6a\xa7\xd3\x1c\xd3\xa7\xeb\x1e\x73\X80\xda\x95\x1c\x97\xe2\x7f\x59\x67\Xa2\xcb\xe0\x74\xb7\x4e\x6d\X8D\x88\x04\x84\x6c\x6f\x14\x69\x2b\x92\x1d\x03\x24\x24\X27\x22\X72\x41\x57\x45\X8E\x88\X82\X42\X64
不过,它将更加紧凑和高效:

输出:

【代码>基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,编码编码,编码长度,编码,编码,编码,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,基本上,编码,基本上,基本上,基本上,编码,基本上,Q=”
为什么不把二进制数据存储在一个文件中?这种用四个字节编码一个字节的编码方式有什么好处?@Sven:也许这样二进制数据就可以像Python脚本一样存储在一个文本文件中。@martineau我可以想象一些原因,但我想知道能够给出有用答案的具体原因。我的感觉ng是无论OP试图解决什么问题,都有可能有更好的解决方案,但我们需要首先了解问题。例如,如果只是将其存储在文本文件中,我建议base64作为一种更简单、更高效的解决方案(但我还想问,将二进制数据存储在文本文件中的具体优势是什么)@Sven:啊,是的,那……正是我要找的。
import binascii

def pairwise(iterable):
    "s -> (s0,s1), (s2,s3), (s4, s5), ..."
    a = iter(iterable)
    return zip(a, a)

hex_encoded = '\\x' + '\\x'.join(pair[0]+pair[1]
                                    for pair in pairwise(binascii.hexlify(data)))
print('data length: {}'.format(len(data)))
print('hex_encoded length: {}, "{}"'.format(len(hex_encoded), hex_encoded))
import base64

base64_encoded = base64.b64encode(data)
print('base64_encoded length: {}, "{}"'.format(len(base64_encoded), base64_encoded))