macOS: 프로그램 실행 가로채기

macOS: 프로그램 실행 가로채기

임의 실행 파일의 실행을 가로채고 싶습니다. 바이너리가 있다고 가정합니다 /usr/bin/binary. 누군가 해당 바이너리를 시작할 때마다 나는 대신 내 자신의 실행 파일을 시작하고 싶습니다. 그것으로부터 원본 바이너리를 시작할지 말지 결정하고 싶습니다. 궁극적으로 원본 바이너리와 사용자 사이에 심을 삽입하고 싶습니다.

비슷한 Windows 질문이 제기되었습니다.주어진 프로그램이 실행되기 전에 가로채서 내 프로그램을 먼저 실행하고 싶습니다.

나에게는 시스템에 대한 관리자 권한이 있습니다. 하지만 원본 바이너리를 다른 장소로 재배치할 수는 없습니다.

UPD@dirkt의 질문에 따르면:

  • 가로채고 싶은 하드 코딩된 바이너리 목록이 있을 것입니다.

답변1

부인 성명: 저는 MacOS 세계에 대해 전혀 무지합니다. 하지만 GNU/Linux에서 할 수 있는 몇 가지 방법을 알려드리고 싶습니다... 도움이 될 것 같습니다.

binary흠... @dirkt( 일명 을 가리키는 래퍼라고도 함 binary.real) 와 같은 답변을 받고 싶지만 :

  1. 사용자가 메커니즘을 알고 있다면 binary.real직접 시작할 수 있습니다.
  2. "모니터링"하려는 모든 프로그램에 대해 이 메커니즘을 복제해야 합니다.

그럼 다른 곳을 좀 파헤쳐 볼까요...

커널 모듈

GNU/Linux 세계에서는 exec 시스템 호출을 연결하고 원하는 대로 ACL을 구현하는 커널 모듈을 작성했을 것입니다.... 하지만 이것은 약간 과잉입니다. Mac OS용 커널 모듈 개발이 가능할 것 같은데... 그런데 Apple이 그런 종류의 해킹을 허용하는지 모르겠습니다.

LD_PRELOAD 해킹

잘 알려진 LD_PRELOAD메커니즘을 사용하면(예:DYLD_INSERT_LIBRARIES 당신의 세계에), 시스템 라이브러리의 C 함수를 다시 작성할 수 있습니다. 따라서 다음을 수행하면 됩니다.

  1. exec*()를 구현하는 동적 라이브러리를 작성하세요.
  2. ACL을 구현하십시오.
  3. 모든 사용자 세션(그래픽 세션, 터미널)이 라이브러리가 미리 로드된 상태로 실행되는지 확인하세요 DYLD_INSERT_LIBRARIES.

그럼 짜잔!

관련 정보