反向工程python 3

反向工程python 3,python,python-3.x,Python,Python 3.x,我想知道是否有办法绕过这个错误。任何帮助都将不胜感激 TypeError: can't concat bytes to str '\0'*4是一个str,请使用b'\0'*4获取所需的字节值。您的问题是试图将两个字节和一个str串联起来。这在python3中是不可能的,因为python3对字节和字符串进行了明确的区分(考虑到python2中str和unicode之间的模糊区别,这是一件好事)。我想你想要的可能是: import marshal, imp f=open('PYTHONSCRIP

我想知道是否有办法绕过这个错误。任何帮助都将不胜感激

TypeError: can't concat bytes to str

'\0'*4
是一个
str
,请使用
b'\0'*4
获取所需的
字节
值。

您的问题是试图将两个
字节
和一个
str
串联起来。这在python3中是不可能的,因为python3对字节和字符串进行了明确的区分(考虑到python2中
str
unicode
之间的模糊区别,这是一件好事)。我想你想要的可能是:

import marshal, imp

f=open('PYTHONSCRIPT','rb')
f.seek(28)  # Skip the header, you have to know the header size beforehand

ob=marshal.load(f)

for i in range(0,len(ob)):
    with open(str(i)+'.pyc','wb') as my_file:
        my_file.write(imp.get_magic() + b'\0'*4 + marshal.dumps(ob[i]))

f.close()

with open(str(i)+'.pyc','wb') as my_file:
    my_file.write(imp.get_magic() + b'\0'*4 + marshal.dumps(ob[i]))
字符串前面的
b
是一个标记,它告诉python字符串是
byte
字符串,而不是
str
字符串


还要注意的是,我添加了
和。。。as…:
这将确保即使在非CPython实现(PyPy、Jython、IronPython等)中,您的文件也会立即被决定性地关闭。

的可能副本请提供完整的堆栈跟踪。
str
bytes
类型不兼容。您必须转换其中一个。上面的答案应该会提供您所需的信息和详细信息。@即使不是这样,您也需要使用
str
+
bytes
使用
提供良好的一般建议,但是除了CPython之外,此代码肯定不会在其他任何东西上运行:D@AnttiHaapala我不明白。它看起来像是相当标准的python,至少可以在pypy上运行(我不能代表Jython或IronPython,因为我对它们不够了解)。你知道关于提问者的应用程序的一些我不知道的东西吗?它会弄乱CPython.pyc文件,当然不会在使用java.classes的Jython上工作。至少Jython 2.7似乎有
imp.get_magic
返回CPython get_magic,但封送不兼容。啊,Jython上的封送不能封送函数/代码对象,所以这绝对不能运行。@AnttiHaapala我很确定,即使是CPython也不能封送函数/代码对象。
import marshal, imp

f=open('PYTHONSCRIPT','rb')
f.seek(28)  # Skip the header, you have to know the header size beforehand

ob=marshal.load(f)

for i in range(0,len(ob)):
    with open(str(i)+'.pyc','wb') as my_file:
        my_file.write(imp.get_magic() + b'\0'*4 + marshal.dumps(ob[i]))

f.close()

with open(str(i)+'.pyc','wb') as my_file:
    my_file.write(imp.get_magic() + b'\0'*4 + marshal.dumps(ob[i]))