自定义解码脚本:扫描字符串文字时的EOL

时间:2014-07-23 07:42:52

标签: python decoder panda3d

我制作了一个脚本来解码几年前制作的文件,我在进行第二次解码测试时遇到了问题。

我的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from decoder.encodings import *

#Toontown Online Encoded Script Decoder

"""
##########################################
# Decoder was built to decompile         #
# Team Pawz Multihack v2.0               #
##########################################
"""
input = "Text can be located here: http://pastebin.com/rdeAhyar ";
def decode():
    print input.decode('latin_1')
decode()

当我执行代码时,我得到了

  

SyntaxError:扫描字符串文字时的EOL

     

SyntaxError:扫描字符串文字时的EOL

     

按任意键继续。 。

如果这有助于我使用Panda3D中分发的Python版本。

1 个答案:

答案 0 :(得分:1)

问题是只需粘贴二进制数据就可以在源代码中嵌入。该错误出现在Windows上,因为Windows将字节值26(十六进制1A)视为文本文件的末尾,并在此字节值之前停止读取文本文件。 Linux不受此影响,这就是我无法重现问题的原因。

观察Windows下“完整”read()返回的文件大小和字节数的差异:

>>> os.path.getsize('test.py')
49297L
>>> len(open('test.py', 'r').read()) # text mode
1100
>>> len(open('test.py', 'rb').read()) # binary mode
49297

解决方案不是将二进制数据嵌入源代码中,而是从额外的文件中加载它。确保以二进制模式而不是文本模式打开它。

或者您必须对二进制数据进行编码,使其不再包含“异国情调”字节值。 Base64编码是一个很好的选择。