보안성 점검 이나 정형화된 테스팅 등을 위하여 소스가 공개되지 않는 바이너리 소프트웨어의 구조를 유추하는 방법이 주목받고 있다. 많은 효과적인 소프트웨어의 구조 유추 방법이 연구되고 있다. 하지만, 많이 사용되는 DFG(Data Flow Graph), CFG(Control Flow Graph) 이나 CFA(Control Flow Automata)와 같은 그래프나 트리 방식은 소프트웨어 모델을 구조적으로 표현하지 못하기 어려우며 복잡한 구조를 가진 모델을 표현하기 어렵다는 단점을 가진다.
본 논문에서는 이러한 단점을 극복할 수 있는 방법을 제시한다. 제시된 방법은 바이너리 코드에 Sully로 생성한 다양한 입력 데이터들을 부여하고 바이너리 코드의 행동을 기반으로 점진적으로 CFG를 생성한다. 또한 생성된 CFG에서 분기가 유추되면, 그 분기로부터 또 다른 구조들 생성 시켜 CFG가 게층적으로 생성되게 하는 계층적 제어 흐름 그래프(Hierarchical Control Flow Graph, HCFG)를 생성한다. 제안하는 방법은 입력 수행 결과를 기반으로 점진적으로 CFG를 생성하여 기존 방법들의 문제점인 구조 복잡도에 따른 메모리 폭발 및 구조화 문제를 해결한다.
제안한 방법은 공개된 SMTP(Simple Mail Transfer Protocol) 서버 프로그램의 구조 유추 실험을 통해 그 성능을 점검한다. 마이크로 소프트가 소프트웨어 시뮬레이션에 사용하도록 제공하는 PIN을 이용하여 입력 변화에 따른 SMTP의 동작 상태 변수를 확인하여 HCFG를 생성한다. 생성된 모델과 실제 소프트웨어 구조를 비교 분석하여 제안된 방법의 효용성을 증명한다.