strip된 PIE binary 분석 팁

symbol이 strip된 바이너리가 PIE(Position Independent Executable) 까지 적용되어 있을 경우
gdb 등으로 breakpoint 걸기 귀찮은 부분이 있다.

GDB 8.1 부터는 strati라는 명령어를 사용하여 아래 처럼 자동으로 bp를 걸 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ gdb /bin/true
Reading symbols from /bin/true...(no debugging symbols found)...done.
(gdb) starti
Starting program: /bin/true

Program stopped.
0xf7fdd800 in _start () from /lib/ld-linux.so.2
(gdb) x/5i $pc
=> 0xf7fdd800 <_start>: mov eax,esp
0xf7fdd802 <_start+2>: call 0xf7fe2160 <_dl_start>
0xf7fdd807 <_dl_start_user>: mov edi,eax
0xf7fdd809 <_dl_start_user+2>: call 0xf7fdd7f0
0xf7fdd80e <_dl_start_user+7>: add ebx,0x1f7e6

하지만, 특정 함수 주소에 bp를 걸려면, memory map을 보고 code section이 어디에 할당되었는지 주소를 보고 계산하여 넣어줘야하는 귀찮음이 존재한다.

syms2elf

https://github.com/danigargu/syms2elf
A plugin for Hex-Ray’s IDA Pro and radare2 to export the symbols recognized to the ELF symbol table

syms2elf라는 플러그인을 사용하면 strip된 binary에 IDA로 분석하면서 함수에 이름을 지정해준 것들이 모두 binary에 symbol로 들어가게 된다.

gdb로 분석하기전에 IDA에서 정적으로 분석하는 시간에 rename을 다 해두면, 나중에 gdb로 분석할때는 함수이름으로 breakpoint를 걸 수 있게 되어 편하다.

Share