다음과 같은 파일이 있다고 가정해 보겠습니다.파일.txt그리고달리기처리PID 12345파일을 읽는 경우도 있고 쓰는 경우도 있습니다.
이 과정을 속일 수 있는 방법이 있나요?PID 12345읽거나 쓰려고 시도할 때마다 다른 프로세스에 의해 할당된 메모리를 읽거나 씁니다.파일.txt?
다른 파일을 읽고 쓰도록 프로세스를 속일 수 있는 방법이 있습니까(예:파일 2.txt)?
답변1
- 다음과 같은 Unix 도메인 소켓을 만들 수 있습니다.
file.txt
open()
올바른 파일을 열도록 라이브러리에서 LD_PRELOAD 시스템 호출을 구현할 수 있습니다. 또는 Linux에서는 마운트 네임스페이스를 사용할 수unshare
있으며 경우에 따라 사용할 수도 있습니다.mount --bind
read()
어느 쪽이든 LD_PRELOAD를 사용하고 라이브러리를 호출할 수 있지만 write()
정적으로 링크된 실행 파일에서는 작동하지 않습니다. ptrace
이를 처리해야 하는 경우 를 사용해야 합니다.
답변2
읽고 있는 파일은 쉽게 변경할 수 없지만, 읽고 있는 파일은 쉽게 변경할 수 있습니다...
> cat file1
123456
> cat file2
abcdef
!/bin/bash
exec 4<>file1
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -p "Press enter to continue" cont
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
./testscript.sh
1
2
3
Press enter to continue
d
e
f
cp file2 file1
이는 스크립트가 입력을 기다리는 동안 이 작업을 수행한 결과입니다. 필요한 데이터를 파일에 복사한 후 이름을 바꿀 수 있지만 파일 시스템 내에서만 가능합니다.
실행 중인 프로세스는 이와 같이 일시 중지되지 않으므로 일시 중지하고 복사(및 이름 바꾸기)가 완료된 후 다시 시작해야 합니다.
kill -STOP 12345
kill -CONT 12345
더 큰 파일을 더 작은 파일에 복사할 수 있지만 더 작은 파일을 더 큰 파일에 복사하면 파일에서 파일 설명자의 현재 위치에 따라 불쾌한 효과가 발생할 수 있습니다.