Обратный Инженер. Python файл Python - PullRequest
3 голосов
/ 11 мая 2010

У меня есть 2 Python-файла Python, которые я могу преобразовать в исходные файлы .py, но они не компилируются идеально, как намекает проверка decompyle.

Поэтому, глядя на исходный код, я могу сказать, что config.pyo просто имел переменные в массиве:

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

Я хотел бы взять исходный .pyo и разборку или все, что мне нужно сделать, чтобы изменить один из этих идентификаторов.

Или ....

в model.pyo источник указывает

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

Все, что я хотел бы сделать - это отредактировать в шестнадцатеричном виде! =, Чтобы быть == ..... Простым с программой Windows EXE, но я нигде не могу найти хорошего дизассемблера на python.

Любые предложения приветствуются ... Я новичок в чтении байт-кода и новичок в python.

Ответы [ 5 ]

0 голосов
/ 07 июля 2017

Совсем недавно я разработал инструменты, которые должны помочь с такими вещами. Некоторые вещи все еще очень альфа, но с некоторыми работами вы могли бы использовать их здесь.

Вокруг несколько дизассемблеров, и они обычно появляются в декомпиляторе. Тот, к которому я неравнодушен, конечно, тот, который я написал, называется xdis , потому что он дает большую информацию о том, что находится в файле байт-кода. Существует также один, называемый pycdas, написанный на C ++, и он находится в проекте, который имеет декомпилятор pycdc. Так что эта часть не нова.

Кроме того, как вы указали, вы использовали декомпилятор, но он не был идеальным. Надеюсь, в более поздних версиях под названием uncompyle6 эти ошибки были устранены. Но если нет, подайте проблему с github.

Ok. Так что теперь на то, что является новым. Недавно я изменил дизассемблер, чтобы сделать его пригодным для модификации, и написал ассемблер 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

Ok. Итак, мы видим, что == является операндом 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].

Но для получения информации о секретном кольце декодера вы должны перейти к Исходный код Python для opcode.py, который у вас, вероятно, есть где-то на вашем диске, но вот ссылка: 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, и вы в основном измените числа там, а затем запустите ассемблер.

0 голосов
/ 11 сентября 2012

Я не знаю, поможет ли это вам напрямую, но Python уже имеет дизассемблер байт-кода .

Для противоположной операции, то есть генерации байт-кода, есть пара альтернатив. С одной стороны, у вас есть стандартный пакет компилятора , а также есть библиотека BytecodeAssembler , которая может более соответствовать вашим потребностям.

0 голосов
/ 12 мая 2010

Это Брайан, задающий вопрос.

Я выполнил то, что мне нужно было сделать, просто методом проб и ошибок и редактированием в шестнадцатеричном формате, редактированием в шестнадцатеричном формате ... затем преобразовав исходный код ... посмотрим, что я изменил ... пока я наконец не сузил то, что искал. Константы (идентификаторы администратора) были в шестнадцатеричном файле как преобразованные шестнадцатеричные (очевидно), но в обратном направлении.

Я до сих пор не знаю, как и где я найду! =

Я слышал, что новейшая версия IDA Pro поддерживает Python, но я не узнал, как заставить Python работать на нем.

0 голосов
/ 09 октября 2010

IDA до 6.0 не имеет модуля декомпиляции .pyc.

0 голосов
/ 11 мая 2010

Преобразуйте файлы .pyo в .py, затем отредактируйте файл .py и затем запустите python для файлов .py. Python регенерирует файлы .pyo Не редактируйте pyo

Я не знаю байт-код python, но сомневаюсь, что строки == или 1 = появятся в файле .pyo

Хотя гораздо лучший способ - получить оригинальные файлы .py и использовать их. Если они дают неправильную программу, подразумеваемую желанием изменить! = На ==, вы можете попросить поставщика исправить ошибку.

...