"멍청한" Crypt0L0cker 랜섬웨어의 영향을 받은 Windows 아카이브에서 일부 파일을 복구하려고 합니다. 실제로 파일을 내 시스템으로 이동한 것을 빠르게 확인한 후 악성 코드가 파일에 두 번째 무작위 확장자를 추가한 것으로 나타났습니다(예, "확장자"는 아무 의미도 없다는 것을 알고 있습니다). 수동으로 파일 이름을 바꾸면 문제가 해결됩니다.
"2016.doc.irolox 목록" -> 수동 이름 바꾸기 -> "2016.doc 목록"
이 워크플로 실행에 대한 몇 가지 팁을 알고 싶습니다.
- 특정 폴더의 모든 하위 디렉터리를 반복적으로 반복합니다.
- 파일 이름에 공백이 포함되어 있습니다(실제 이름에 점이 포함되어 있지 않음).
- 일부 파일은 영향을 받지 않은 것으로 보입니다. 규칙: "확장자"가 하나만 있는 경우에는 고려하지 마세요(따라서 점이 2개 감지되면 -> 파일이 영향을 받습니다).
- 마지막 "확장자"를 제거하여 파일 이름을 바꿉니다.
이런 결과를 얻을 수 있었던 비결이 있나요?
답변1
먼저 폴더 아카이브로 이동하여 다음 명령을 실행하십시오.
find | awk -F'.' '{if ($3 != "" && $4 != "" ){system("mv "$0" ./"$2"."$3)}}'
이렇게 하면 폴더와 하위 폴더에 있는 모든 파일을 찾고, 두 개의 확장자가 발견되면 첫 번째 확장자만 사용하여 이름을 바꿉니다.
예를 들어, 명령 앞의 폴더는 다음과 같습니다.
.
./lolo.doc
./soso
./soso/jojo.doc.koko.momo
./kokooiko.doc.soso
./jojo.doc.koko
명령 뒤의 폴더:
.
./lolo.doc
./kokooiko.doc
./jojo.doc
./soso
./soso/jojo.doc
답변2
예를 들어 다음과 같이 변수 대체를 사용할 수 있습니다.
MYVAR="List for 2016.doc.irolox"
echo ${MYVAR%.*}
위의 내용은 .*
변수 값의 백엔드에서 가장 짧은 일치 항목을 제거합니다.
이렇게 하면 다음을 사용하여 파일 이름을 바꿀 수 있습니다.
mv "${MYVAR}" "${MYVAR%.*}"
답변3
해결책
원하는 수의 인수를 사용하고 파일 이름을 바꾸고 확장자를 제거하는 스크립트를 만듭니다. 예를 들어,
cat > /tmp/rename_script.sh <<'EOF'
#!/bin/bash
while [ $# -gt 0 ]; do
mv "$1" "${1%.*}"
#alternatively to strip multiple extensions
#mv "$1" "${1%.doc.*}.doc"
shift
done
EOF
#enable execute perms
chmod 755 /tmp/rename_script.sh
다음 find
명령은 영향을 받는 하나 이상의 파일을 인수로 전달합니다 rename_script.sh
(영향을 받는 파일의 작업 디렉터리에서 실행됩니다 -execdir
). rename_script.sh
아래는 예시입니다.
find /path/to/affected/dir -type f -name '*.doc.*' -execdir /tmp/rename_script.sh {} +
노트:예비 테스트를 위해 작은 샘플 파일로 작업하는 것이 좋습니다. 모든 파일에 대해 이 솔루션을 수행하기 전에 이전 "랜섬웨어 파일"을 백업하십시오.
find (GNU findutils) 4.4.2
Debian 8/Jessie에서 테스트되었습니다.
추가 독서
man bash
Special Parameters
,Parameter Expansion
, 및 를 찾습니다Compound Commands
.man find
그리고 옵션을 찾아보세요-execdir
.