-
[리버싱] lighthouse + DynamoRIO - 프로그램 실행 흐름 확인# 시스템 해킹 공부중 2020. 2. 26. 22:19
프로그램을 리버싱할 때, 프로그램이 어떤 block 들을 거쳐서 실행되는지 그 실행 흐름을 확인할 수 있고 그 흐름이 일정하다면 리버싱할 때 좀 더 효율적으로 할 수 있고, 분석의 정확도를 높일 수 있다. 이 때 사용할 수 있는 유용한 플러그인과 도구가 있어 간단하게 기록한다.
1. DynamoRIO
DynamoRIO는 DBI(Dynamic Binary Instrumentation) Framework중 하나로, 프로세스에 동적으로 명령어를 삽입해서, 정보를 얻거나 특정 행위를 할 수 있도록 하는 시스템이다. 다운로드는 아래 링크를 통해서, 실행환경에 맞는 버전을 받아서 압축을 해제하면 된다.
https://github.com/DynamoRIO/dynamorio/wiki/Downloads
DynamoRIO에는 기본적으로 제공되는 도구들이 있는데, 여기서 우리가 사용할 도구는 drrun.exe 라는 도구이다. 프로그램이 실행될 때 Code Coverage 를 분석해주는 도구로, 실행 중 어떤 block 들을 거쳐갔는지 로깅(logging)을 해준다. 사용방법은 명령프롬프트를 이용해서 아래와 같이 입력하면 된다. 실행환경에 따라 bin32와 bin64는 구분해야한다.
C:\path\to\DynamoRIO\bin64\drrun.exe -t drcov -- "\path\to\binary\test.exe\ [..arguments]
그러면 해당 프로그램이 실행되고 (위 예시의 경우 test.exe) code coverage를 수집한다. 프로그램에서 원하는 동작을 수행한 다음, 종료하면 명령 프롬프트의 현재 디렉토리에 log파일이 생성된다.
2. lighthouse plugin
lighthouse는 IDA와 Binary Ninja 에서 사용할 수 있는 code coverage plugin로 해당 디스어셈블러 혹은 디버거를 사용한다면 설치할 수 있다. 해당 포스트에서는 IDA를 기준으로 포스팅한다.
https://github.com/gaasedelen/lighthouse
깃페이지에 접속해서 clone 혹은 압축파일을 다운받고, 안에 있는 plugin 폴더에 있는 파일들을 IDA 설치경로의 plugins 디렉토리에 복사해주면 설치된다.
IDA에서 [Load file - Code coverage file...]을 눌러서 방금 생성된 로그파일을 열어주면 coverage 정보가 출력된다.
[그림 3]과 [그림 4]와 같이 block 별로 몇 번 방문을 했는지 색깔로 구분이 되어있으며, flow graph 에서 방문한 곳과 하지 않은 곳이 구분되어 표시된다. 뿐만 아니라, IDA의 강력한 기능인 헥스레이(hexray)를 했을 때에도, 해당 코드가 실행됐는지 아닌지 표시되기 때문에 꽤나 편리하게 리버싱을 할 수 있다.
'# 시스템 해킹 공부중' 카테고리의 다른 글
[1-day] Virutalbox 6.0.0 Exploit (CVE-2019-2525 / CVE-2019-2548) (0) 2021.03.04 [안드로이드] OWASP Mobile Top 10 2016 - 내 맘대로 번역 (0) 2020.03.18 [안드로이드] 안드로이드용 Radamsa 빌드하기 (0) 2020.02.19 [안드로이드] ApkStudio로 앱 디컴파일&리패키징하기 (2) 2020.02.16 [안드로이드] 안드로이드 앱 실시간 패킷 캡쳐 및 분석 with mitmproxy, Wireshark (6) 2019.10.09