리버스 엔지니어링은 모든 보안 분야에서 중요한 부분입니다.
컴파일된 실행 파일을 리버스 엔지니어링 하는 작업에서 가장 중요한 단계 중 하나는 디스어셈블링입니다.
디스어셈블링은 코드 컴파일 과정을 최대한 거꾸로 복원하는 작업이다.
objdump는 디스어셈블링에 가장 유용한 도구 중 하나입니다.
objdump의 다양한 실행 옵션을 사용해서 ELF (Executable and Linkable Format, 실행 및 링크 가능 포맷) 바이너리의 다양한 섹션 정보를 추출이 가능
※ ELF (Executable and Linkable Format, 실행 및 링크 가능 포맷)
→ ELF는 실행 파일, 공유 라이브러리, 리눅스/유닉스 시스템용 오브젝트 파일 등을 기술하는 파일 형식이다
objdump -D bash : -D 옵션을 지정하면 바이너리를 디스어셈블링 한 후 그 결과 값을 화면에 출력한다.
root@choi:/home/choi# objdump -D bash |more bash: file format elf64-x86-64 Disassembly of section .interp: 0000000000000238 <.interp>: 238: 2f (bad) 239: 6c insb (%dx),%es:(%rdi) 23a: 69 62 36 34 2f 6c 64 imul $0x646c2f34,0x36(%rdx),%esp 241: 2d 6c 69 6e 75 sub $0x756e696c,%eax 246: 78 2d js 275 <_init@@Base-0x2bba3> 248: 78 38 js 282 <_init@@Base-0x2bb96> 24a: 36 2d 36 34 2e 73 ss sub $0x732e3436,%eax 250: 6f outsl %ds:(%rsi),(%dx) 251: 2e 32 00 xor %cs:(%rax),%al Disassembly of section .note.ABI-tag: 0000000000000254 <.note.ABI-tag>: 254: 04 00 add $0x0,%al 256: 00 00 add %al,(%rax) 258: 10 00 adc %al,(%rax) 25a: 00 00 add %al,(%rax) 25c: 01 00 add %eax,(%rax) 25e: 00 00 add %al,(%rax) 260: 47 rex.RXB 261: 4e 55 rex.WRX push %rbp 263: 00 00 add %al,(%rax) 265: 00 00 add %al,(%rax) 267: 00 03 add %al,(%rbx) 269: 00 00 add %al,(%rax) 26b: 00 02 add %al,(%rdx) 26d: 00 00 add %al,(%rax) 26f: 00 00 add %al,(%rax) 271: 00 00 add %al,(%rax) ... Disassembly of section .note.gnu.build-id: 0000000000000274 <.note.gnu.build-id>: 274: 04 00 add $0x0,%al 276: 00 00 add %al,(%rax) 278: 14 00 adc $0x0,%al |
기본으로 실행했을 때 디스어셈블링은 끝이다. 하지만 다양한 옵션을 통해서 재미있는 분석이 가능하다
objdump -j [섹션명] -D [바이너리]
이 옵션을 사용하게 되면 원하는 섹션 정보만을 추출 해서 볼 수 있다.
root@choi:/home/choi# objdump -j .interp -D bash bash: file format elf64-x86-64 Disassembly of section .interp: 0000000000000238 <.interp>: 238: 2f (bad) 239: 6c insb (%dx),%es:(%rdi) 23a: 69 62 36 34 2f 6c 64 imul $0x646c2f34,0x36(%rdx),%esp 241: 2d 6c 69 6e 75 sub $0x756e696c,%eax 246: 78 2d js 275 <_init@@Base-0x2bba3> 248: 78 38 js 282 <_init@@Base-0x2bb96> 24a: 36 2d 36 34 2e 73 ss sub $0x732e3436,%eax 250: 6f outsl %ds:(%rsi),(%dx) 251: 2e 32 00 xor %cs:(%rax),%al |
※ 특히 .text 세그먼트(섹션)에는 실행 코드가 들어 있으며 이 부분을 잘 분석하는 것이 리버스 엔지니어링의 시작이다.
'리눅스 시스템 운영 ' 카테고리의 다른 글
(리버싱) 바이너리 디버깅을 통한 동적 분석(2) -GDB 출처 (0) | 2018.07.15 |
---|---|
(리버싱) 바이너리 디버깅을 통한 동적 분석(1) -GDB (0) | 2018.07.14 |
메타스플로잇으로 취약점 점검하기 (0) | 2018.07.09 |
익스플로잇과 리버스 엔지니어링 -메타스플로잇 (metasploit) (1) - 사용법 (0) | 2018.07.09 |
NMAP을 이용한 타켓 탐색 (0) | 2018.07.08 |