Dna 는 LLVM 위에 구축 된 정적 이진 분석 프레임 워크입니다. 특히 LLVM, Remill 및 Souper에 대한 관리 바인딩을 포함하여 거의 C#에 쓰여졌습니다.
Dna 토성 용지에 의해 크게 영감을 얻은 반복적 인 제어 흐름 그래프 재건을 구현합니다. 반복적으로 재귀 적 출신, 리미트 (Remill)를 사용하고 완전한 제어 흐름 그래프가 복구 될 때까지 경로 해결을 반복적으로 적용합니다. 점프 테이블의 경우 Souper 및 Z3을 기반으로 한 재귀 알고리즘을 사용하여 가능한 점프 테이블 목표 세트를 해결합니다. 여기에서는 반복 탐색 알고리즘과 점프 테이블 해결 알고리즘을 찾을 수 있습니다.
제어 흐름 그래프가 완전히 탐색되면 x86으로 재 컴파일하고 여기에서 알고리즘을 사용하여 바이너리로 다시 삽입 할 수 있습니다. 컴파일 된 코드는 어떤 식 으로든 예쁘지는 않지만 복구 된 제어 흐름 그래프가 올바른 한 실행해야합니다. 즉, 그것은 여전히 연구 프로토 타입입니다. 버그와 에지 사례가 예상됩니다. 제어 흐름 그래프 탐색은 무한한 점프 테이블 또는 리프트 불가능한 지침의 경우에 실패 할 수 있습니다.
다른 주목할만한 기능 :
try / catch 명령문 및 filter 내입 기관이 제어 흐름 그래프에 삽입됩니다. 리 컴파일러가 아직 SEH를 지원하지는 않지만 (SEH 항목은 고정되지 않았으므로 예외는 충돌을 일으킬 것입니다.MemorySSA , LoopInfo , Dominator Tree, Pass Pipeline Management 등에 대한 바인딩을 가지고 있습니다.일부 경고 :
Dna 현재 LLVM 17을 기반으로합니다.
Dna 상자에서 쌓이지 않습니다. Windows를 구축하려면 다시 연마 및 수퍼를위한 맞춤형 패치가 필요했습니다. DNA 작업을 원하시면 문제를 열거나 [email protected] 으로 이메일을 보내주십시오. 어느 시점에서 나는 적절한 빌드 단계를 게시 할 수 있지만 보장하지 않습니다.