"/usr/share/nmap/"과 같이 미리 컴파일된 실행 파일에 저장된 일부 하드코딩된 경로를 덮어쓰고 다른 디렉터리로 리디렉션하고 싶습니다.
제가 생각하는 이상적인 솔루션에는 루트 권한이 필요하지 않으므로 심볼릭 링크를 만드는 것은 절대 금물입니다.
(재컴파일도 불가능)
답변1
perl -pe 's:/usr/share/nmap/:/other/dir/nmap/:g
' /path/to/executable > new-executable
/other/dir/nmap
와 길이가 같아야 합니다 /usr/share/nmap
. /
그렇지 않은 경우 다음 문자로 채울 수 있습니다.
perl -pe 's:/usr/share/nmap/:/other//////dir/:g
' /path/to/executable > new-executable
새로운 길은 더 이상 길 수 없습니다. /tmp
이것이 문제라면 언제든지 심볼릭 링크를 생성할 수 있는 옵션이 있습니다.
답변2
@slm의 답변을 참조하십시오 ...
이를 수행하는 세 번째 방법가능한다시 매핑할 실행 파일을 제외한 모든 항목이 실제 항목으로 연결되는 실행 파일 실행을 위한 chroot 샌드박스 환경을 만듭니다. 그러나 그것은 복잡할 것이다.
하지만 소스 코드를 구해 다시 컴파일하는 것이 좋습니다. (또는 독점 코드인 경우 공급업체에 비용을 지불하여 사용자 정의 실행 파일을 제공하십시오...)
답변3
내가 전생에 한 일은주의 깊은hexl-mode
문자열을 대체하려면 바이너리 편집기(예: emacs/xemacs)를 사용하여 실행 파일을 편집하십시오(대체는 더 짧아야 하며 0 문자로 채워져야 합니다!).
실행 파일에 고정 경로가 포함된 경우 일반적으로 환경 변수(예: TMPDIR, EDITOR/VISUAL 또는 유사한 변수)를 사용하거나 적절한 매개 변수를 제공하여 이를 재정의할 수 있습니다. 그 길이 진정으로 확립되면 그 이유에 대해 묻습니다. 보안 또는 구성 지침이 있을 수 있지만 재정의해서는 안 됩니다. 물론 이것은 단지 그럴 수도 있다.게으른, 그러나 이는 귀하의 배포판에 패키지된 소프트웨어로는 불가능하며 검열될 수 있습니다...
답변4
방금 알아냈어ptrace 기반 chroot 재구현: PRoot.
바인딩 기능이 바로 제가 찾고 있는 기능입니다!
이는 실행 파일에서 문자열을 바꾸는 것보다 더 안정적이며 스크립트에서 쉽게 사용할 수 있습니다...