E9Patch는 x86_64
Linux ELF 바이너리를 위한 강력한 정적 바이너리 재작성 도구입니다. E9패치는 다음과 같습니다:
정적 바이너리 재작성은 입력 바이너리(ELF 실행 파일 또는 공유 객체)를 가져와 일부 패치/수정 사항이 적용된 출력 바이너리를 생성합니다. 패치된 바이너리는 원본을 즉시 대체하여 사용할 수 있습니다.
자세한 내용은 PLDI'2020 문서를 참조하세요.
사전 구축된 E9Patch 바이너리는 여기에서 다운로드할 수 있습니다.
E9Patch를 빌드하는 것은 매우 쉽습니다. 간단히 build.sh
스크립트를 실행하면 됩니다.
그러면 다음 두 가지 도구가 자동으로 빌드됩니다.
e9patch
: 바이너리 재작성기 백엔드; 그리고e9tool
: E9Patch용 선형 분해 프런트엔드입니다. E9Patch는 E9Tool 프런트엔드를 통해 사용할 수 있습니다.
예를 들어 xterm
의 모든 xor
명령어에 명령어 인쇄 도구를 추가하려면 다음 명령을 사용할 수 있습니다.
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
그러면 a.out
파일에 기록된 xterm
의 수정된 버전이 생성됩니다.
수정된 xterm
정상적으로 실행될 수 있지만 실행된 각 xor
명령어의 어셈블리 문자열을 stderr
에 인쇄합니다.
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
지원되는 옵션 및 모드의 전체 목록은 다음을 참조하세요.
$ ./e9tool --help
"빈" 계측을 사용하여 모든 점프 명령을 패치합니다.
$ ./e9tool -M 'asm=/j.*/' -P empty xterm
$ ./a.out
"인쇄" 도구를 사용하여 모든 점프 명령을 인쇄합니다.
$ ./e9tool -M 'asm=/j.*/' -P print xterm
$ ./a.out
위와 동일하지만 "Intel" 구문을 사용합니다.
$ ./e9tool -M 'asm=/j.*/' -P print xterm --syntax=intel
$ ./a.out
빈 함수 호출로 모든 점프 명령을 패치합니다.
$ ./e9compile.sh examples/nop.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@nop' xterm
$ ./a.out
명령어 카운트 계측을 사용하여 모든 점프 명령어를 패치합니다.
$ ./e9compile.sh examples/counter.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@counter' xterm
$ FREQ=10000 ./a.out
예쁜 인쇄 도구를 사용하여 모든 점프 명령을 패치합니다.
$ ./e9compile.sh examples/print.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry(addr,instr,size,asm)@print' xterm
$ ./a.out
프로그램 속도를 늦추려면 "지연" 계측을 사용하여 모든 점프 명령어를 패치하세요.
$ ./e9compile.sh examples/delay.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@delay' xterm
$ DELAY=100000 ./a.out
참고 사항 :
XTerm(322)
E9Patch를 사용하는 다른 프로젝트는 다음과 같습니다.
libc.so
의 정적 바이너리 재작성을 사용한 시스템 호출 차단.E9Patch는 다른 프로젝트에 통합할 수 있도록 설계된 하위 수준 도구입니다. 자세한 내용은 다음 설명서를 참조하세요.
버그는 여기에서 보고할 수 있습니다:
E9Patch의 현재 버전은 PLDI'2020 논문에서 평가된 원래 프로토타입에 비해 크게 개선되었습니다. 구체적으로:
-O2
옵션을 E9Tool에 전달하세요.이 소프트웨어는 GNU Public License(GPL) 버전 3에 따라 출시되었습니다.
일부 특정 파일은 MIT 라이센스에 따라 릴리스됩니다(파일 서문 확인).
이 작업은 NCR(National Cybersecurity R&D) 프로그램에 따라 싱가포르 국립 연구 재단(NRF)이 자금을 지원하는 신뢰할 수 있는 소프트웨어 시스템 우수 국가 위성(National Satellite of Excellence in Trustworthy Software Systems)의 일부 지원을 받았습니다.