긴 이야기 짧게: 프로그램이 생성된 다음 삭제된다는 것을 알고 있습니다 /tmp
. 이를 확인하기 위해 어떻게 차단할 수 있습니까?
문맥:
내가 신뢰하지 않는 특정 파일이 하나 있습니다 .jar
. 어떤 이유로든 해당 파일의 소스 코드에는 ftm 메서드와 연결 설정 기능이 포함되어 있는데, 이는 출력의 네트워크 관련 시스템 호출에서 분명합니다 strace
(연결하여 참조). , 유닉스 도메인 소켓을 의미하는 것은 아니지만 AF_INET6
). Wireshark로 확인한 결과 사용 중에 나가는 TCP 또는 UDP 연결이 발견되지 않았습니다.
아직도, 나는 그것을 잘 믿지 않습니다. 출력에서 임시 파일을 생성 한 다음 삭제 strace
하는 것을 볼 수 있습니다 . /tmp
이러한 파일을 가로채서 내용을 검사할 수 있는 방법이 있습니까?
답변1
더 나은 방법은 악성 Java 바이너리를 리버스 엔지니어링하려는 경우 파일을 가로채는 대신 의심되는 .jar
파일을 디컴파일하는 것입니다.
이를 위해 다음을 사용할 수 있습니다.CFR - 또 다른 자바 디컴파일러
CFR은 Java 9의 대부분을 포함하여 최신 Java 기능을 디컴파일하지만 Java 6으로 완전히 작성되어 어디에서나 사용할 수 있습니다.
사용하려면 디컴파일할 클래스 이름(클래스 파일의 경로 또는 클래스 경로의 정규화된 클래스 이름)과 함께 특정 버전의 jar를 실행하기만 하면 됩니다. (--help에는 매개변수가 나열됩니다).
또는 전체 jar를 디컴파일하려면 jar 경로를 제공하고 파일을 내보내려면(아마도 그렇게 할 것입니다!) --outputdir /tmp/putithere를 추가하세요.
대안이 부족하지는 않지만 CFR 프로젝트는 2018년 업데이트를 통해 잘 유지되고 있는 것 같습니다.
면책조항: 저는 2005년 이후로 Java/JAR 바이너리를 리버스 엔지니어링한 적이 없습니다.
답변2
노트:개선된 솔루션중복된 질문에 게시됨
독서에서임시 파일을 생성한 후 직접 액세스하려면 어떻게 해야 합니까?inotify
파일 자체에 대한 하드 링크를 사용하고 생성하는 방법을 생각했습니다 . 물론 이것은 하드 링크가 생성되기 전에 파일의 링크가 해제될 수 있기 때문에 경쟁 조건이지만 응용 프로그램이 생성한 임시 파일의 데이터를 복구했습니다. 이것은 실제 명령을 실행하는 터미널 탭 B와 함께 터미널 탭 A에 결합된 짧은 파이프입니다.
inotifywait -m -r /tmp/hsperfdata_xie/ 2>&1 |
while IFS= read -r line; do
awk '$2 == "CREATE"{system("ln /tmp/hsperfdata_xie/"$3" /tmp/BACKUP")}' <<< "$line"
echo "$line" # unnecessary, only if you want to know what's inotify is writing
done
3가지 단점은 다음과 같습니다.
- 경쟁 조건(위에서 언급한 바와 같음)
awk
나는 특정 파일을 매우 빠르게 분류했습니다. 그러나awk
출력 을 구문 분석하고inotifywatch
경로 이름을 파일 이름과 연결하는 보다 일반적이고 유연한 명령은 행, 변수 및 전달의 모든 내용을 구문 분석하는 데 시간이 걸릴 수 있습니다 . 구문 분석이 완료되면 이전 요점으로 돌아갈 때 링크 가능한 파일이 없어야 합니다.$1
$3
sprintf()
system()
- 두 개의 터미널 탭이 필요하지만 하나는 전체 파이프라인을 백그라운드에 배치할 수 있습니다. 더 현명한 접근 방식은 분기된 하위 프로세스가 포함된 완전한 Python 스크립트를 갖고 실제로
inotify
Python 모듈을 사용하는 것입니다(아마도 앞으로 이 작업을 수행하게 될 것입니다).
0...sun.rt._sync_Inflations
문제의 파일은 반복되는 발생 과 0...sun.rt._sync_Deflations
문자열(아마도 다음과 관련이 있는) 이진 데이터 형태로 나타납니다. 자바 멀티스레딩). 하지만 이 질문에 관한 한 그것은 중요하지 않습니다. 우리는 이미 그것을 가지고 있습니다. 내가 원하는 유일한 것은 파일 자체를 얻는 것입니다.