我有2个. pyo python文件可以转换成. py源文件,但是它们不能像decompyle的verify所暗示的那样完美地编译。
因此,查看源代码,我可以看出config. pyo只是在数组中包含变量:
管理员用户ID =[116901、141、349244、39、1159488]
我想采取原来的。pyo和拆卸或任何我需要做的,以改变这些ID之一。
或者...
在model.pyo中,源代码表示
如果(产品开发者ID!=自身.获取用户ID()):
所有我想做的是十六进制编辑!=成为一个==.....简单的windows exe程序,但我找不到一个好的python反汇编程序的任何地方。
欢迎任何建议...我是字节码的新手,也是Python的新手。
4条答案
按热度按时间dgtucam11#
将.pyo文件转换为.py,然后编辑.py,然后在.py文件上运行python。Python将重新生成.pyo文件。不要编辑pyo
我不知道python的字节码,但我怀疑字符串==或1=是否会出现在.pyo文件中
虽然一个更好的方法是获得原始的.py文件并使用它们。如果他们给予了错误的程序,因为他们想要改变!=到==,那么你可以要求供应商修复这个bug。
iovurdzv2#
IDA 6.0之前的版本没有.pyc反编译模块。
2j4z5cfb3#
我不知道这是否能直接帮助你,但是Python already has a bytecode disassembler。
对于相反的操作,即生成字节码,有两种选择:一方面是the standard compiler package,另一方面是BytecodeAssembler library,它们可能更适合您的需要。
roqulrg34#
最近,我开发了一些工具,应该可以帮助解决这类问题,有些东西仍然是非常初级的,但是经过一些工作,你可以在这里使用它。
有几个反汇编器,它们通常出现在反编译器中。当然,我偏爱的是我写的一个叫做xdis的,因为它提供了关于字节码文件中内容的最多信息。还有一个叫做pycdas的,用C++写的,在包含pycdc反编译器的项目中。所以这部分并不新鲜。
另外,正如你所说,你使用了一个反编译器,但它并不完美。希望在以后的版本uncompyle6中这些bug已经得到解决。但如果没有,请提交一个github问题。
好了,现在说说新的东西吧,最近我修改了反汇编器,使其易于修改,并编写了一个Python汇编器,将其存储回pyc字节码格式。在http://github.com/rocky/python-xasm处找到它。
这样你就可以对常量和条件测试进行简单的修改。
现在让我们进入条件测试,因为您特别问到了这一点,这里还没有完全回答。
考虑下面这个简单的Python代码:
让我们用pydisasm分解它:
好的,我们看到
==
是COMPARE_OP
指令的操作数,编码为2。查看www.example.com的文档https://docs.python.org/3.6/library/dis.html#opcode-COMPARE_OP(这是Python 3.6的文档,但几乎所有Python版本都是一样的),有一个稍微有帮助的解释:
但要获得秘密解码器环的信息,你必须访问Python源代码,网址是opcode.py,你可能在磁盘上的某个地方找到了它,这里有一个链接:https://github.com/python/cpython/blob/master/Lib/opcode.py#L24,我们在这里有
你会看到
==
是2,而!=
是3。至于修改常量
[116901, 141, 349244, 39, 1159488]
,它会出现在我的反汇编程序中,叫做Constants
的部分,你基本上会修改那里的数字,然后运行汇编程序。