요즘 읽고 있는 책 - 리눅스 바이너리 분석(원제 : Learning Linux Binary Analysis Uncover the secrets of Linux binary analysis with this handy guide)의 85 page를 보면, ELF 바이너리 파서 구현에 대한 간단한 예제가 있다.


이미지 출처 : http://security.cs.rpi.edu/courses/binexp-spring2015/
이미지 출처 : http://security.cs.rpi.edu/courses/binexp-spring2015/

이  프로그램은 32비트 ELF 실행 파일의 프로그램 헤더와 섹션 일므을 출력하는 간단한 코드이다. 그런데 내가 테스트 하는 환경은 64비트 환경이어서, 원활히 작동하지 않았다. 


이에 간단히 코드를 약간 수정하였더니 64 bit 용 바이너리에서도 작동하도록 패치가 되었다.

코드는 아래와 같다.

이를 gcc 사용해서 컴파일 하고

그러면 elfparse64 라는 바이너리가 생성되었을 것이다. 테스트를 위해 자기 자신을 분석시켜보자.

결과는 아래와 같다.

이 결과가 실제로 정확한지 보기 위해 readelf 프로그램의 결과와 비교해보자.

Address 를 보면 모두 일치하는 결과이다.


하지만 이 방법은... 학습용이 아니고서는 굳이 별로 추천하고 싶진 않다 ㅋ 파이썬으로 이미 구현된 라이브러리가 있지 않을까?

CPUU님의 창작활동을 응원하고 싶으세요?