「愚かな」Crypt0L0ckerランサムウェアの影響を受けたWindowsアーカイブからいくつかのファイルを回復しようとしています。実際、ファイルを自分のシステムに移動したことをすばやく確認した後、マルウェアがファイルに2番目のランダムな拡張子を追加したことがわかりました(たとえば、「拡張子」は意味がないことを知っています)。手動でファイル名を変更すると、問題が解決します。
「2016.doc.iroloxリスト」 - >手動の名前変更 - >「2016.docリスト」
このワークフローの実行に関するいくつかのヒントを知りたいです。
- 特定のフォルダ内のすべてのサブディレクトリを繰り返し繰り返します。
- ファイル名にスペースが含まれています(実際の名前にドットが含まれていません)。
- 一部のファイルは影響を受けていないようです。規則:「拡張子」が1つしかない場合は考慮しないでください(したがって、2つの点が検出されると - >ファイルが影響を受けます)。
- 最後の「拡張子」を削除してファイル名を変更します。
このような結果が得られた秘訣はありますか?
答え1
まず、フォルダアーカイブに移動して次のコマンドを実行します。
find | awk -F'.' '{if ($3 != "" && $4 != "" ){system("mv "$0" ./"$2"."$3)}}'
これにより、フォルダとサブフォルダ内のすべてのファイルが検索され、2つの拡張子が見つかった場合は、最初の拡張子のみを使用して名前を変更します。
たとえば、コマンドの前のフォルダは次のようになります。
.
./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
コマンドは、影響を受ける1つ以上のファイルを引数として渡します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
。