2013-04-03 2 views
0

C++ 파서를 검색하여 최근에 아래의 프로젝트를 우연히 발견했습니다. 그 안에는 내 요구에 매우 잘 맞는 파서가 있지만 저자가 코드의 핵심 부분을 의도적으로 모호하게 만들었 기 때문에 코드를 조금만 검토하게됩니다. 거기에 일반 deobfuscated 버전 인에 대한 파일의 설명과 저자의 웹 사이트가있다Deobfuscating C++ 소스 코드

https://github.com/ArashPartow/math-parser-benchmark-project/blob/master/fparser/fpoptimizer.cc

그러나 표시된 사이트 만 dead-link을 갖고있는 것 같아요과 보람 있었다 저자을 시도합니다.

동료 SOers가 위에서 언급 한 파일의 난독 화를 신속하고 쉬운 방법으로 되돌릴 수 있는지 궁금합니다.

저는 C++ 전문가가 아니기 때문에 확신 할 수 없지만 코드의 형식이 맞는 이유가있을 수 있습니다. 아마도 파일 이름에서 알 수 있듯이 성능상의 이유로.

+8

"참고 :이 파일에는 최적화 된 소스 코드가 포함되어 있으며 은 직접 수정할 수 없습니다. 최적화 도구 은 라이브러리의 개발 버전을 다운로드합니다. " – Mysticial

+6

@Mysticial : 그러나 표시된 사이트는 죽은 링크 만 있고 작성자에게 연락하려는 시도는 효과가 없습니다. –

+0

매크로를 없애기 시작합니다. http://stackoverflow.com/questions/277258/cc-source-file-after-preprocessing # 나는 그 코드가 의도적으로 난독 화되었다고 생각한다. 그 코드의 성능을 향상시키는 것은 아무것도 없다. – Kupto

답변

6

project page, with the latest devel files이 링크를 시도해 볼 수 있습니다. 버전이 잘못되었습니다. 링크에 4.5가 나와 있고 현재 버전이 4.5.2입니다. 그들은 구버전을 지키지 않아서 최신 버전을 가지고 있지 않습니다.

4

대부분의 컴파일러에는 & 코드에서 전처리기만 실행하여 전 처리기 출력을 생성하는 옵션이 있습니다. 그러면 #defines을 사용하여 수행 된 난독 화가 제거됩니다.

예 : MSVC에서 cl /P fpoptimizer.cc을 실행할 수 있습니다. 그러면 사전 처리 된 파일이 포함될 fpoptimizer.i라는 파일이 생성됩니다.

이 작업을 수행하기 전에 프로그램에서 #includes을 제거하면 프로그램의 #define 만 처리되고 다른 작업은 수행되지 않습니다.

gcc는 비슷한 것을하기 위해 -E 옵션을 제공합니다.

+1

나는 1.8 MB 파일을 만들어 냈다. 다른 모든 것들을 포함했다. 파일 자체에있는 내용 만 포함시키는 방법이 있습니까? 이 같은 물건을 생산 btw, 거기에 명령 옵션을 통해 좀 더 형식을 만들 수있는 방법은 무엇입니까? TailCall_cLessOrEq; Ljh : this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cLess ;; goto TailCall_cLess; Lji : this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cGreaterOrEq ;; goto TailCall_cGreaterOrEq; Ljj : this-> ByteCode.pop_back(); ByteCodePtr- = 1; opcode = cGreater ;; goto TailCall_cGreater; Ljk : this-> ByteCode.pop_back(); – Gerdiner

+0

@Gerdiner - 이렇게하기 전에 파일에서 #includes를 제거한다고 말했기 때문에 파일에서'#defined'에 대해서만 전처리가 수행됩니다. – user93353