바이너리를 다른 표현으로 옮기기
소스 없이 실행 코드를 분석하려면 기존 분석 도구가 이해하는 표현으로 변환하는 경로가 필요할 수 있다. McSema는 기계 명령을 LLVM 비트코드로 옮긴다. 이는 원래 고수준 소스를 복구하는 디컴파일과 구별되는 작업이다.
두 단계의 처리
mcsema-disass는 제어 흐름을 복원하고 mcsema-lift는 그 결과를 비트코드로 변환한다. 명령어의 의미 변환에는 Remill 라이브러리를 활용한다. 앞 단계가 잘못 복원한 경로나 함수 경계는 뒤의 분석에도 영향을 줄 수 있다.
분석과 재컴파일 활용
변환한 표현을 기호 실행이나 퍼징, LLVM 변환과 연결할 수 있다. 다시 실행 파일로 컴파일하는 바이너리 재작성 경로도 있다. 대상 아키텍처와 명령 지원, 제어 흐름 복원 도구 및 LLVM 버전의 조합을 함께 확인한다.