3

我有 2 个 .pyo python 文件,我可以将它们转换为 .py 源文件,但它们不能像 decompyle 的验证所暗示的那样完美编译。

因此查看源代码,我可以看出 config.pyo 只是在数组中包含变量:

ADMIN_USERIDS = [116901、141、349244、39、1159488]

我想采用原始的 .pyo 和反汇编或任何我需要做的事情来更改这些 ID 之一。

或者....

在 model.pyo 中,来源表示

if (productsDeveloperId != self.getUserId()):

我想做的就是将 != 十六进制编辑为 == ..... 使用 windows exe 程序很简单,但我在任何地方都找不到好的 python 反汇编程序。

欢迎任何建议......我是阅读字节码的新手,也是 python 的新手。

4

5 回答 5

0

我不知道这是否直接对您有帮助,但 Python已经有一个 bytecode disassembler

对于相反的操作,即生成字节码,有几种选择。一方面,您拥有标准编译器包,然后还有BytecodeAssembler 库,它可能更适合您的需求。

于 2012-09-11T10:20:09.793 回答
0

将 .pyo 文件转换为 .py,然后编辑 .py,然后在 .py 文件上运行 python。Python 将重新生成 .pyo 文件 不要编辑 pyo

我不知道 python 字节码,但我怀疑字符串 == 或 1= 是否会出现在 .pyo 文件中

尽管更好的方法是获取原始 .py 文件并使用它们。如果他们通过将 != 更改为 == 而给出了错误的程序,那么您可以要求供应商修复错误。

于 2010-05-11T10:03:31.220 回答
0

我是提问者布赖恩。

我已经通过反复试验和十六进制编辑、十六进制编辑完成了我需要做的事情......然后转换源......看看我改变了什么......直到我最终缩小了我正在寻找的东西。常量(管理员 ID)在十六进制文件中作为转换的十六进制(显然)但向后。

我仍然不知道如何或在哪里找到!=

我听说 IDA Pro 最新版本支持 python,但我还没有学会如何让 python 工作。

于 2010-05-11T21:40:28.683 回答
0

IDA 高达 6.0 没有 .pyc 反编译模块。

于 2010-10-09T01:10:14.487 回答
0

最近,我开发了可以帮助解决此类问题的工具。有些东西仍然是 Alpha 版,但通过一些工作你可以在这里使用它。

周围有几个反汇编器,它们通常出现在反编译器中。我偏爱的当然是我写的称为xdis的那个,因为它提供了有关字节码文件中内容的最多信息。还有一个叫做 pycdas 用 C++ 编写,并且在具有 pycdc 反编译器的项目中。所以那部分并不新鲜。

此外,正如您所指出的,您使用了反编译器,但它并不完美。希望在名为uncompyle6的更高版本中,这些错误已得到解决。但如果没有,请提交 github 问题。

好的。所以现在来看看有什么东西。最近我修改了反汇编程序以使其易于修改,并编写了一个 Python 汇编程序将其存储回 pyc 字节码格式。这些东西仍处于 alpha 阶段;在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

好的。所以我们看到 是编码为 2==的指令的操作数。COMPARE_OP

查看此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', ...

你会看到 while==是 2,!=是 3。

至于更改[116901, 141, 349244, 39, 1159488]将出现在我的反汇编程序中调用的部分中的常量,Constants您基本上会更改那里的数字,然后运行汇编程序。

于 2017-07-07T06:10:08.283 回答