2016-10-25 5 views
1

불필요하게 복잡해 보이는 코드를 어떻게 deobfuscate하는지 배우려고합니다.Deobfuscation : Python3 Express를 간소화하십시오.

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에 대한 소스 코드를 구문 분석하고 트리를 변형 한 다음 트리에서 유효한 소스 코드를 다시 생성하기위한 도구입니다. 배경에 대한 내 대답은 rewriting Python text입니다. 같은 PTS (내 회사) DMS 소프트웨어 리엔지니어링 Toolkiit와

, 당신은 본질적으로 컴파일시 연산을하는 것을 의미 상수 폴딩을 수행하는 규칙을 작성할 수 있습니다. 당신이 보여 예를 들어

는 다음과 같은 규칙이 영업 이익의 모범을 수행 할 수 있습니다
 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 추가 작업에 의해 결합 NATURAL 상수 쌍을 발견하고, 합에 의해 두 개의 값을 합산하여 합계를 포함하는 리터럴 값 노드를 생성하는 내장 함수를 사용하는 것으로 대체한다.

convert_chr_to_string은 chr (c)를 해당 문자열 리터럴로 변환합니다.

convert_character_to_string은 'C'를 해당 문자열 "C"로 변환합니다.

fold_concatenate_strings은 add 연산자로 구분 된 두 개의 리터럴 문자열을 결합합니다. fold_add_naturals가 작동하는 것과 유사하게 작동합니다.

subtract_naturalsconcatenate_strings은 DMS에 내장되어 있습니다. convert_chr_to_stringconvert_character_to_string은 DMS의 메타 프로그래밍 언어 PARLANSE로 사용자 정의 코딩해야하지만 이러한 루틴은 매우 간단합니다 (10 줄).

규칙 집합은 모든 규칙을 적용 할 수 있도록 패키지화합니다. 파일을 열거 나 파서를 호출하고 규칙 집합이 적용될 때까지 규칙을 적용하는 기본 코드는 표시되지 않습니다. 마지막 단계는 수정 된 AST를 다시 인쇄하기 위해 예비 테스터를 호출하는 것입니다.

다른 많은 PTS도 비슷한 기능을 제공합니다.