
임의 실행 파일의 실행을 가로채고 싶습니다. 바이너리가 있다고 가정합니다 /usr/bin/binary
. 누군가 해당 바이너리를 시작할 때마다 나는 대신 내 자신의 실행 파일을 시작하고 싶습니다. 그것으로부터 원본 바이너리를 시작할지 말지 결정하고 싶습니다. 궁극적으로 원본 바이너리와 사용자 사이에 심을 삽입하고 싶습니다.
비슷한 Windows 질문이 제기되었습니다.주어진 프로그램이 실행되기 전에 가로채서 내 프로그램을 먼저 실행하고 싶습니다.
나에게는 시스템에 대한 관리자 권한이 있습니다. 하지만 원본 바이너리를 다른 장소로 재배치할 수는 없습니다.
UPD@dirkt의 질문에 따르면:
- 가로채고 싶은 하드 코딩된 바이너리 목록이 있을 것입니다.
답변1
부인 성명: 저는 MacOS 세계에 대해 전혀 무지합니다. 하지만 GNU/Linux에서 할 수 있는 몇 가지 방법을 알려드리고 싶습니다... 도움이 될 것 같습니다.
binary
흠... @dirkt( 일명 을 가리키는 래퍼라고도 함 binary.real
) 와 같은 답변을 받고 싶지만 :
- 사용자가 메커니즘을 알고 있다면
binary.real
직접 시작할 수 있습니다. - "모니터링"하려는 모든 프로그램에 대해 이 메커니즘을 복제해야 합니다.
그럼 다른 곳을 좀 파헤쳐 볼까요...
커널 모듈
GNU/Linux 세계에서는 exec 시스템 호출을 연결하고 원하는 대로 ACL을 구현하는 커널 모듈을 작성했을 것입니다.... 하지만 이것은 약간 과잉입니다. Mac OS용 커널 모듈 개발이 가능할 것 같은데... 그런데 Apple이 그런 종류의 해킹을 허용하는지 모르겠습니다.
LD_PRELOAD 해킹
잘 알려진 LD_PRELOAD
메커니즘을 사용하면(예:DYLD_INSERT_LIBRARIES
당신의 세계에), 시스템 라이브러리의 C 함수를 다시 작성할 수 있습니다. 따라서 다음을 수행하면 됩니다.
- exec*()를 구현하는 동적 라이브러리를 작성하세요.
- ACL을 구현하십시오.
- 모든 사용자 세션(그래픽 세션, 터미널)이 라이브러리가 미리 로드된 상태로 실행되는지 확인하세요
DYLD_INSERT_LIBRARIES
.
그럼 짜잔!