바이너리 분석 관점의 예외 처리 과정을 C++ 예시를 통하여 알아보자.

바이너리 분석을 위한 CFG(Control Flow Graph) 복원 과정 중 C++의 try-catch와 같은 예외 처리 코드는 제어 흐름이 명시적으로 나타나지 않기 때문에 코드 분석만으로 복원할 수 없습니다. 따라서 정확한 CFG를 복원하기 위해서는 예외 처리의 동작 방식을 이해해야 합니다. 본 블로그에서는 예외 처리 과정을 이해하는데 필요한 다양한 메타 데이터의 의미와 분석 과정 등을 설명하여 예외 처리의 전반적인 과정을 알아보겠습니다.

바이너리 분석에 웬 F#?

많은 분이 B2R2 프로젝트를 보면서 왜 F#인가 궁금해합니다. 어찌 보면, F#이라는 언어가 프로젝트의 대중화에 걸림돌이 되는 것 같기도 합니다. 왜 잘 알려지지도 않은 언어인 데다가 사용하기도 불편해 보이는 함수형 언어를 써야만 했던 것일까요? 앞으로 두세 차례 포스팅을 통해 왜 우리가 F#을 썼는지, 우리의 비전은 무엇인지에 대해 이야기해보려 합니다. B2R2는 닷넷(.NET) 라이브러리 정확히 말하면 F#은 B2R2의

Read More

바이너리 역어셈블의 의미와 원리 파헤쳐보기

소프트웨어 보안 논문을 읽다 보면, 역어셈블(Disassemble)은 비결정(undecidable)문제라는 이야기를 자주 접하게 됩니다. 하지만 그 의미를 정확히 아는 사람은 드뭅니다. 국내외를 막론하고 역어셈블의 의미를 깊이 있게 고찰하는 글을 찾아보기는 매우 어렵기 때문입니다. 이번 시간에는 많은 사람들이 궁금해하는 바이너리 역어셈블의 의미와 원리를 한 번 파헤쳐보겠습니다. 역어셈블의 뜻은 그 대상에 따라 달라진다. 역어셈블(Disassemble)은 말 그대로 어셈블(Assemble)을 거꾸로 하는 것을

Read More

바이너리 분석에 대한 오해와 진실

소스 코드가 없는 경우엔, 바이너리 코드를 본다? 보안에 관심 있는 사람은 누구나 바이너리(binary)에 대해서 들어보았을 것입니다. 해킹 경연대회(CTF)에서는 항상 바이너리 기반의 문제가 출제되죠. 소스 코드를 활용한 해킹대회 문제는 웹 해킹 쪽을 제외하고서는 매우 드물다 할 것입니다. 그뿐 아니라 메모리 취약점을 공격한다고 하면 누구나 다 바이너리를 기반으로 공격 코드(exploit)를 만듭니다. 그런데 왜 이렇게 보안에서는 바이너리가 중시되는

Read More