[2008 codeengn conference 02] graylynx - 정적 링크된 stripped elf 바이너리 상에서의...
DESCRIPTION
2008 CodeEngn Conference 02 Strip된 정적 링크된 ELF 바이너리에서 원래의 함수정보를 얻어내는 방법과 IDA SDK를 이용한 플러그인 제작을 설명한다. grayResolve 플러그인의 실행순서로는 1. 함수 이름을 복구하고자 하는 ELF 파일을 IDA로 로드한 뒤, Edit > Plugin 메뉴 또는 단축키 Alt + 1 을 통해 grayResolve 실행 2. 대상 파일이 컴파일될때 링크된 라이브러리 파일을 (예: libc.a) 지정해준다. 3. 찾고자 하는 함수 이름이 발견되지 않으면, 다른 라이브러리 파일을 대상으로 시도해보고 로그 파일을 분석한다. http://codeengn.com/conference/02TRANSCRIPT
ELF
xecutableinkableormat
실행 가능한링크 가능한형식형식
공유라이브러리와실행파일을위한 기본 형식
ELF 구조
정적 링킹
VS동적 링킹
VS
섹시 심볼
ELF의심볼테이블
= 디버깅 정보테이블
QUIZ
WHY?
Stripped!
재개발이 가능할까?재개발이 가능할까?
실험
실행 파일에 복사된공유 라이브러리 코드와원본 공유 라이브러리 코드의비교
/* example.c */#include <stdio.h>int main(){
printf("Hello, ELF!₩n");return 0;
}
$> gcc example c -o example -static
비교대상 1: 정적 링크, 심볼 테이블이 삭제된ELF 실행 파일
$> gcc example.c o example static$> cp example example_stripped$> strip -S exmaple_stripped
$> cp /usr/lib/libc a /tmp
비교대상 2: 정적 공유라이브러리 내목적 파일
$> cp /usr/lib/libc.a /tmp$> ar /tmp/libc.a
비교대상 1 : 실행 파일에 복사된 공유 라이브러리 코드
비교대상 2 : 원본 공유 라이브러리 코드
실행 파일에 복사된 printf() 함수 기계어 코드
재배치
재배치
$> readelf -r printf.o
재배치 테이블 조회
WHAT THE ??!!
비교대상 1
비교대상 2
Signature
꿈은 ★ 이루어진다꿈은 ★ 이루어진다
grayResolve
IDA Pro Plug-InC / C++ / STLArchive ParserELF AnalyzerSignature SearchingName Resolving
Demo
Q & AQ
QUIZ본 발표에서 사용된 삽화 중사인하는 장면의 주인공은사인하는 장면의 주인공은누구인가?