我有2个.pyo python文件,我可以将其转换为.py源文件,但它们不能完全编译,如convertyle的验证暗示。
因此,查看源代码,我可以看出config.pyo只是在数组中有变量:
ADMIN_USERIDS = [116901, 141, 349244, 39, 1159488]
我想采取原始的.pyo和反汇编或我需要做的任何事情,以便更改其中一个ID。
或者....
在model.pyo中,源代表
if(productsDeveloperId!= self.getUserId()):
所有我想做的是十六进制编辑!=是一个== .....简单的Windows exe程序,但我找不到一个好的python反汇编程序。
欢迎任何建议......我不熟悉读取字节码和新的python。
答案 0 :(得分:0)
将.pyo文件转换为.py,然后编辑.py,然后在.py文件上运行python。 Python将重新生成.pyo文件不要编辑pyo
我不知道python字节码,但我怀疑字符串==或1 =会出现在.pyo文件中
虽然更好的方法是获取原始的.py文件并使用它们。如果他们给出错误的程序,如果想要改变!= to ==那么你可以要求供应商修复错误。
答案 1 :(得分:0)
这是提问者布莱恩。
我已经通过试错和十六进制编辑,十六进制编辑完成了我需要做的事情......然后转换源...看看我改变了什么..直到我最终缩小了我想要的东西。常量(管理员ID)在十六进制文件中作为转换的十六进制(显然)但向后。
我仍然不知道我怎么或在哪里找到!=
我听说IDA Pro最新版本支持python,但我还没有学会如何让python工作。
答案 2 :(得分:0)
IDA高达6.0没有.pyc反编译模块。
答案 3 :(得分:0)
我不知道这是否会直接帮助你,但Python already has a bytecode disassembler。
对于相反的操作,即生成字节码,有几种选择。一方面你有the standard compiler package,然后还有BytecodeAssembler library,这可能更适合你的需要。
答案 4 :(得分:0)
最近我开发了可以帮助解决这类问题的工具。有些东西仍然非常多,但有些工作你可以在这里使用它。
周围有几个反汇编程序,它们通常出现在反编译器中。我当然偏爱的那个是我写的xdis,因为它提供了有关字节码文件中的内容的最多信息。还有一个用C ++编写的pycdas,它位于具有pycdc反编译器的项目中。所以那部分不是新的。
另外,正如您所指出的那样,您使用的是反编译器,但它并不完美。希望在后来的版本uncompyle6中,这些错误已得到解决。但如果没有,请提交github问题。
确定。所以现在是新的。最近我修改了反汇编程序,使其易于修改,编写了一个Python汇编程序,将其存储回pyc字节码格式。这个东西仍然是阿尔法;在http://github.com/rocky/python-xasm找到它。
因此,您可以对常量和条件测试进行简单的更改。
所以现在让我进入条件测试,因为你专门询问了这个问题,而且这里还没有完全回答。
考虑这个简单的Python代码:
___file__ == '__main'
让我们用pydisasm反汇编:
...
# Constants:
# 0: '__main'
# 1: None
# Names:
# 0: ___file__
1: 0 LOAD_NAME 0 (___file__)
3 LOAD_CONST 0 ('__main')
6 COMPARE_OP 2 (==)
9 POP_TOP
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
确定。所以我们看到==
是COMPARE_OP
的操作数
编码为2的指令。
查看这个https://docs.python.org/3.6/library/dis.html#opcode-COMPARE_OP的文档(这是针对Python 3.6,但几乎所有Python版本都是一样的),有一些有用的解释:
The operation name can be found in cmp_op[opname].
但是对于秘密的解码器响铃信息,你必须去 你可能在你的磁盘上的opcode.py的Python源代码,但是这里有一个链接:https://github.com/python/cpython/blob/master/Lib/opcode.py#L24我们有
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', ...
当==
为2时,您会看到!=
为3。
至于更改在我的反汇编程序中出现的常量[116901, 141, 349244, 39, 1159488]
,在Constants
一节中你基本上改变那里的数字,然后运行汇编程序。