こんにちは、Habrausers様!
この記事は、この記事の論理的な続きです。 ユーザー
Agel_Nashが残した
コメントの 1つに、新しいウイルス署名が示されました。 攻撃の対象となるファイル-* .js。
FTPアクセスを変更し、マルウェアからマシンをクリーンアップし、FTPクライアントを変更するための推奨事項に従わなかったクライアントのいくつかのサイトは、このウイルスに一度に感染しました。 次のコードが* .jsファイルに
書き込まれます:
pastebin.com/2PWJycAd 。 これは、1行で厳密にファイルの最後に配置されます。
簡単な操作を使用して、コードの難読化を解除しました。 興味がある人のために、
このコードの読みやすい外観を広めました(
MrMYSTICはすでに
同様のコードを示して
います )。
難読化解除は最も簡単な方法で実行されました。 私はjsfiddleに行き、evalの代わりに生成されたコードをページに持ってきました。 以下のような簡単な操作を行います:url = 305yoy.bdcfwpndqm.is-a-therapist.com/g/を使用して* .jsファイルへのパスを生成します。その後、結果のパスを持つスクリプト要素を収集し、ページの先頭に追加します。うまくいきました。
サイトをきれいにするために、前の記事で書いたスキャナーを使用しました。 ただし、コメントのコメントを考慮して、少し「くし」にすることにしました。
カロンと
pro100takの建設的な批判に感謝し
ます (投票できたら+を付けます)。
アルゴリズムは古く、ファイルの行ごとに機能します。 そのため、スキャナーが何をキャッチすべきかを特定する必要がありました。
ただし、指定された
Agel_Nashに基づいて、スキャナは予想外に少数の感染ファイルを示しました。 プロジェクトには数千個ではなくても、数百個の* .jsファイルがあるのは確かです。 私は掘り始め、正しく、信頼するが検証する。 選択された署名は、有限ではないという事実を考慮して、どこでも見つかりませんでした。 他のディレクトリから異なる距離にある複数のファイルを選択的にチェックすると、いくつかのオプションが明らかになりました。
)try{Boolean().prototype.q}catch(egewgsd){f=[
そして
)try{Date().prototype.q}catch(egewgsd){f=[
違いは小さく、いくつかの言葉で構成されています。
Date() Boolean()
おそらく、日付、数値、文字列など、すべてのデータ型をこの方法で並べ替えることができます。 それでは、残りの行、つまり:
().prototype.q}catch(egewgsd){f=[
今回、スキャナはこのウイルスに感染したすべてのファイルを表示しました。 必要なもの! Jquery、fancybox、および使用されるいくつかのライブラリを確認する必要があります。 純粋に...ソースコードにエントリが見つかりませんでした。 素晴らしい、あなたはそれを使用することができます。
スキャナーを少し再設計し、開始しました。 彼は再び計画通りに働き、がっかりしなかった。
変更点:-署名のリストの収集を開始しました(2つある時点で、目的の行のパラメーターなしでスキャナーを開始できます)。
-ファイルで見つかった署名を示します。
-バックアップを削除する機能を追加(delete_backups());
-関数はパラメーターなしで呼び出すことができます(この場合、デフォルトのものが使用されます)
$dron->find(); $dron->scan(); $dron->restore_backups(); $dron->delete_backups();
-スキャナーが作業中にディレクトリの所有者を変更する機能を追加しましたが、このセクションをコメントアウトしました。 私はテストできませんでした:
...
-すべてのファイルを配列に収集する関数dir_content()を追加しました。これは、他のすべての関数で使用されます。
-スキャン時に、自身を無視します。
更新されたスキャナーのコードを、詳細なコメントとともにお届けします。
<? Class dScaner {
さて、基本的な検索パラメーターの使用例。
<?
実際に私があなたと共有したかったのはそれだけです。
クリーンなサーバーとその安定した動作。
よろしく!