Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-为读入的每个十六进制字节重写0x00字节数组_Python - Fatal编程技术网

Python-为读入的每个十六进制字节重写0x00字节数组

Python-为读入的每个十六进制字节重写0x00字节数组,python,Python,我目前正在研究绕过防病毒产品基本特征检测的方法。现在,我正试图用0x00填充来分解一个文件(也许NOPs更好?),但我不知道怎么做。我正在编写一个非常简单的Python脚本来自动对二进制文件进行模糊处理,从而绕过基本检测(以证明本文中的观点),这是最后一段代码 到目前为止,我只将可执行文件读入bytearray,我现在试图弄清楚如何读取每个十六进制值,将其写入新数组,写入0x00,从第一个数组中获取下一个十六进制值并继续 Example a = 54 68 69 73 20 70 72 6F 6

我目前正在研究绕过防病毒产品基本特征检测的方法。现在,我正试图用0x00填充来分解一个文件(也许NOPs更好?),但我不知道怎么做。我正在编写一个非常简单的Python脚本来自动对二进制文件进行模糊处理,从而绕过基本检测(以证明本文中的观点),这是最后一段代码

到目前为止,我只将可执行文件读入bytearray,我现在试图弄清楚如何读取每个十六进制值,将其写入新数组,写入0x00,从第一个数组中获取下一个十六进制值并继续

Example
a = 54 68 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 6D 6F 64 65 (DOS stub)
我希望在每个十六进制值之间填充/插入00,以具有以下内容

b = 54 00 68 00 69 00 73 00 20 00 70 etc.

有一种简单的方法可以做到这一点吗?

b'。连接(zip(a,itertools.repeat(0))中x的字节(x))

b'。连接(zip(a,itertools.repeat(0))中x的字节(x))
'00'连接十六进制值列表。

# when type of a is of <type 'bytearray'> 
>>> b = ' 00 '.join(str(a).split())
>>> print b
54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65
>>> b = bytearray(b) 
>>> print b
bytearray(b'54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65')
#当a的类型为
>>>b='00'.join(str(a).split())
>>>打印b
54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6 F 00 64 00 65
>>>b=字节数组(b)
>>>打印b
bytearray(b'54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6D 00 6 F 00 64 00 65')

希望有帮助

'00'
加入十六进制值列表

# when type of a is of <type 'bytearray'> 
>>> b = ' 00 '.join(str(a).split())
>>> print b
54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65
>>> b = bytearray(b) 
>>> print b
bytearray(b'54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65')
#当a的类型为
>>>b='00'.join(str(a).split())
>>>打印b
54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6 F 00 64 00 65
>>>b=字节数组(b)
>>>打印b
bytearray(b'54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6D 00 6 F 00 64 00 65')

希望有帮助

[zip中的x代表t(a[0]*len(a))代表t中的x]
像这样吗?你能发布有效的python吗?这样我们就可以得到一些关于你使用的类型的提示了?a和b应该是python2字符串、python3字节还是整数列表?您还可以指出您使用的是python 2还是python 3,因为bytestring处理在这两者之间是不同的。
[x代表zip中的t(a,[0]*len(a))代表t中的x]
如下所示?您可以发布有效的python,以便我们可以得到一些关于您使用的类型的提示吗?a和b应该是python2字符串、python3字节还是整数列表?您还可以指出您使用的是Python2还是Python3,因为bytestring处理在这两者之间是不同的。它不是也为00吗?这只与Python3兼容,对于Python2,您需要(类似于)
'.join(str(bytearray(a))作为一个in-zip(x,itertools.repeat(0))
,这方面有一些问题。它不也是00吗?这只与Python3兼容,对于Python2,您需要(类似于)
“”。在zip中加入(str(bytearray(a))(x,itertools.repeat(0))
,这是有意义的。不过,我在您的示例中看到了“a”。在您的示例中,“a”的定义是什么?TypeError:“bytearray”对象是不可调用的。需要记住,bytearray是由类似文件中的十六进制字节填充的。b=bytearray(open(“C:/Users/Analysis/Desktop/spora”,“rb”).read())我想我必须在这里进行某种数据转换?编辑:我也刚刚意识到,这不是读取文件并将其保存为单个十六进制字节。您的输入类型是什么(您在问题中给出的是
a
)?我的问题中没有“a”,只有“b”是bytearray。从阅读的角度来看,将其改为“a”更有意义。我会把它清理干净。你可以把它作为字符串,然后把它转换成想要的类型!也许
res.split()
可以将其作为str列表,甚至
bytearray(res)
这样做是有意义的。不过,我在您的示例中看到了“a”。在您的示例中,“a”的定义是什么?TypeError:“bytearray”对象是不可调用的。需要记住,bytearray是由类似文件中的十六进制字节填充的。b=bytearray(open(“C:/Users/Analysis/Desktop/spora”,“rb”).read())我想我必须在这里进行某种数据转换?编辑:我也刚刚意识到,这不是读取文件并将其保存为单个十六进制字节。您的输入类型是什么(您在问题中给出的是
a
)?我的问题中没有“a”,只有“b”是bytearray。从阅读的角度来看,将其改为“a”更有意义。我会把它清理干净。你可以把它作为字符串,然后把它转换成想要的类型!可能
res.split()
将其作为str列表,甚至
bytearray(res)