컴파일된 elf 파일이 다른 명령을 실행하도록 만드는 방법

컴파일된 elf 파일이 다른 명령을 실행하도록 만드는 방법

ELF 파일이 실행될 때 명령이 실행되어야 합니다.

예: /usr/bin/file이 컴파일된 ELF 바이너리를 실행하고 다음 명령을 실행합니다.touch /tmp/file_is_executed

가능하다면 코드를 다시 컴파일하고 소스 파일에 원하는 명령을 추가하겠습니다. 하지만 소스코드가 없어서 컴파일된 버전을 처리해야 합니다.

답변1

빠른 수정으로 이런 일이 발생해야 하는 경우 함수를 사용하여 대상 명령을 재정의할 수 있습니다.

file() { touch /tmp/file_is_executed; command file "$@"; }

그러나 불투명한 애플리케이션에서 명령 실행을 추적하려는 경우 또는 다른 사람이 명령을 실행할 때 필요할 때 해당 기능을 반드시 사용할 수 있는 것은 아닙니다. 마찬가지로 /usr/bin/file대상 실행 파일이 전체 경로(즉, 대신)로 호출되는 경우 file이 방법을 사용할 수 없습니다 . 이러한 경우 대상 실행 파일의 자체 구현을 만들 수 있습니다.

귀하의 질문에 설명된 ELF 실행 파일을 변경하는 솔루션은 없습니다. (바이너리 패치는 중요한 작업입니다.)

당신을위한 실제 예 /usr/bin/file:

  1. 스크립트를 작성하십시오 ~/bin/file.sh( mkdir ~/bin이것이 먼저 필요할 수 있습니다):

    #!/bin/sh
    touch /tmp/file_is_executed
    exec /usr/bin/file "$@"
    
  2. 스크립트를 읽기 가능하고 실행 가능하게 만들기

    chmod a+rx ~/bin/file.sh
    
  3. 설치 스크립트는진짜

    cp -p ~/bin/file.sh ~/bin/file
    
  4. ~/bin이 있는지 확인하십시오.$PATH 앞으로 /usr/bin

    export PATH="$HOME/bin:$PATH"
    

모든 사람을 위한 실제 예제 (이 작업을 수행하려면 루트 액세스 권한이 필요하므로 , 또는 /usr/bin/file와 같은 이름 ):sudodoassu

  1. 다음과 같이 스크립트를 작성하십시오./usr/bin/file.sh

    #!/bin/sh
    touch /tmp/file_is_executed
    exec "$0.bin" "$@"
    
  2. 스크립트를 읽기 가능하고 실행 가능하게 만들기

    chmod a+rx /usr/bin/file.sh
    
  3. 설치 스크립트는진짜

    mv /usr/bin/file /usr/bin/file.bin &&
    cp -p /usr/bin/file.sh /usr/bin/file
    

관련 정보