2016-10-25 2 views
1

Я пытаюсь узнать, как деобфусить какой-то код, который не так уж и сложный. Например, я хотел бы иметь возможность переписать эту строку кода:Deobfuscation: Упростить выражения Python3

return ('d' + chr(101) + chr(97) + chr(200 - 100)) # returns 'dead' 

к:

return 'dead' 

Так в основном, мне нужно оценить все литералы в файле ру, в том числе сложных выражений, Оценить простые целые числа. Как мне начать писать этот читатель/существует ли что-то, что может это сделать? Благодаря!

+2

https://docs.python.org/2/library/ast.html – Natecat

ответ

1

Что вы хотите, это система преобразования программ (PTS).

Это инструмент для анализа исходного кода в AST, преобразования дерева, а затем регенерации действующего исходного кода из дерева. См. Мой ответ SO на rewriting Python text для некоторого фона.

С помощью PTS, как (моя компания) DMS Software Reengineering Toolkiit, вы можете написать правила, чтобы сделать постоянным складыванием, что означает, по существу, выполнение арифметики времени компиляции.

Для примера вы показываете следующие правила могут выполнить пример OP еще:

 rule fold_subtract_naturals(n:NATURAL,m:NATURAL): sum->sum = 
     " \n + \m " -> " \subtract_naturals\(\n\,\m\) "; 

    rule convert_chr_to_string(c:NATURAL): term->term = 
     " chr(\c) " -> make_string_from_natural(c) ; 

    rule convert_character_literal_to_string(c:CHARACTER): term->term = 
     " \c " -> make_string_from_character(c) ; 

    rule fold_concatenate_strings(s1:STRING, s2:STRING): sum->sum = 
     " \s1 + \s2 " -> " \concatenate_strings\(\s1\,\s2\) "; 

    ruleset fold_strings = { 
      fold_subtract_naturals, 
      convert_chr_to_string, 
      convert_characater_to_string, 
      fold_concatenate_strings }; 

Каждый из отдельных правил соответствует соответствующих синтаксических/деревьев. Они написаны таким образом, что они применимы только к литеральным константам.

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

convert_chr_to_string преобразует chr (c) в соответствующий строковый литерал.

convert_character_to_string преобразует 'C' в соответствующую строку «C».

fold_concatenate_strings объединяет две строковые строки, разделенные оператором add. Он работает аналогично тому, как работает fold_add_naturals.

subtract_naturals и concatenate_strings встроены в DMS. convert_chr_to_string и convert_character_to_string необходимо настроить на языке метапрограммирования DMS, PARLANSE, но эти процедуры довольно просты (возможно, 10 строк).

Набор правил формирует набор правил, чтобы все они могли применяться. Не показан основной код, чтобы открыть файл, вызвать анализатор, вызвать преобразователь правил (который применяет правила до тех пор, пока не будет применено правило). Последний шаг - называть симпатичным принтером для перепечатки модифицированного АСТ.

Многие другие PTS предлагают аналогичные услуги.

Смежные вопросы