Despite the availability of various dynamic binary analysis frameworks, developing complex binary analyses such as dynamic taint analysis or dynamic symbolic execution remains challenging. The challenges arise from several factors. Firstly, the intermediate representations (IRs) used in existing frameworks do not accurately represent instruction semantics. For example, in QEMU, the semantics of certain instructions are expressed through external function calls rather than solely within the IR. Secondly, many frameworks are limited to Linux environments, making them platform-dependent. Thirdly, implementing dynamic binary analysis using existing frameworks incurs significant costs. This is because the primary focus of the IRs in these frameworks is on program execution rather than providing concise syntax suitable for binary analysis. In this thesis, we propose BRemu, a platform-independent emulator that utilizes a concise IR capable of expressing precise semantics. BRemu performs emulation in a platform-independent runtime through a dual Just-In-Time (JIT) compilation. This involves translating the IR to another IR and further compiling it into machine code. Benchmarking BRemu against existing frameworks using NBench and SPEC CPU 2017 shows its suitability for dynamic binary analysis, albeit with slower performance (2.4x slower than QEMU in NBench and 5.4x slower in SPEC CPU 201) still sufficient for effective analysis.
다양한 동적 바이너리 분석 프레임워크가 존재해왔지만 동적 오염 분석이나 동적 기호 실행 등 복잡한 동적 바이너리 분석기를 작성하는 것은 여전히 쉽지 않다. 첫째, 기존 프레임워크에서 사용하고 있는 중간 언어는 명령어의 시맨틱을 정밀하게 표현하지 않기 때문이다. 예를 들어 QEMU의 경우 일부 명령어의 시맨틱을 순전히 중간 언어로만 표현하지 않고 외부 함수 호출을 통해 처리한다. 둘째, 많은 프레임워크가 오직 리눅스 환경에서만 동작하는 등 플랫폼에 종속적이다. 셋째, 기존 프레임워크는 바이너리 동적 분석을 구현하기 위한 비용이 크다. 왜냐하면 기존 프레임워크의 중간 언어는 프로그램의 실행에만 초점이 맞춰져 있어 중간 언어 자체가 간결하지 않기 때문이다. 이러한 문제점들을 해결하기 위해 우리는 간결하면서도 시맨틱을 정밀하게 표현하는 중간 언어를 사용하는 플랫폼 독립적 에뮬레이터인 BRemu를 제안한다. BRemu는 중간 언어를 다른 중간 언어로 변환하고, 이를 다시 기계어로 변환하는 이중 Just-In-Time (JIT) 컴파일을 통해 플랫폼 독립적인 런타임에서의 에뮬레이션을 효과적으로 수행한다. NBench, SPEC 2017 벤치마크를 사 용하여 BRemu와 기존 프레임워크의 성능을 비교한 결과 QEMU에 비해 NBench 벤치마크 기준 약 2.4배, SPEC CPU 2017 벤치마크 기준 5.4배 느린 성능을 보여주었다.