反向工程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]))