SystemHack

patchelf 사용하여 다른버전 libc + ld 로드하기

1. patchelf 최신 릴리즈 다운받기

github.com/NixOS/patchelf/releases

[

Releases · NixOS/patchelf

A small utility to modify the dynamic linker and RPATH of ELF executables - NixOS/patchelf

github.com

](https://github.com/NixOS/patchelf/releases)

2. 설치 진행

./bootstrap.sh
./configure
make
sudo make install
make check

이때 autoreconf 패키지 설치 필요할 수 있음 .

sudo apt-get install dh-autoreconf

3. 로더와 libc 교체

patchelf --set-interpterter ld ./binary
patchelf --replace-needed libc.so.6 ./libc ./binary

 

 

 

다만 이런식으로 로드하면 디버깅 심볼이 안맞아 제대로 명령어 사용이 힘듬. 힙이나 ld 관련 정보도 읽어오지 못함.

 

디버깅에 필요한 디버깅 심볼은 libc6-dbg 패키지.

launchpad.net/ubuntu/xenial/amd64/libc6-dbg/2.23-0ubuntu11

 

2.23-0ubuntu11 : libc6-dbg : amd64 : Xenial (16.04) : Ubuntu

This package contains the detached debugging symbols for the GNU C library.

launchpad.net

예제 문제의 라이브러리는 2.23 버전이기 때문에 해당 버전 deb 을 받아온다.

 

http://old-releases.ubuntu.com/ubuntu/pool/main/g/glibc/

 

Index of /ubuntu/pool/main/g/glibc

 

old-releases.ubuntu.com

위 사이트에서 찾아도 되고, libc 버전와 운영체제에 맞게 구글링 해도 된다 .

 

dpkg -x ./libc6-dbg_2.29-0ubuntu2_amd64.deb ./<output_folder> 로 압축 풀고 ,

<output dir>/usr/lib/debug/lib/x86_64-linux-gnu 만 사용하면 된다.

디버거 열고 set debug-file-directory <output dir>/usr/lib/debug/lib/x86_64-linux-gnu

그 다음에 run이나 start 실행

아까 안되던게 잘 된다.  근데 무슨차이인지는 모르겠는데 gdb -q 옵션걸고 실행하면 로드가 안되더라. 

-q 옵션 걸지말고 해야한다. 

 

 

 

 

typemiss.tistory.com/2

 

[Pwnable] libc 주어졌을 때 바이너리에 링킹 & 디버깅 (when LD_PRELOAD making segmenation fault)

- 보통 문제에서 elf, libc 가 주어짐 - 익스하는 os 의 libc 버전과 문제에서 준 libc 버전이 안맞아서 LD_PRELOAD 걸어도 segmentation fault 뜨는 경우 있음 1. 주어진 libc 에 대응되는 custom loader 가 추가..

typemiss.tistory.com

도움주신 heyon님 감사합니다.