
KPOTから文字列を復号し、それらをコメントとして設定するIDA Pythonスクリプト
KPOT ステーラーの文字列を復号し、実行時にそれらを受け取る変数の隣にコメントとして設定するための IDA Python スクリプトです。動作は次のとおりです:
mov または pop eax のいずれかを使用して、復号関数 (2 つあり、そのためこのリポジトリには 2 つのスクリプトがあります) のいずれかに eax で渡されるオフセットを取得します。
対応するサイズと XOR キーを読み取ることによって、配列上の文字列を復号します。
復号された文字列と、コメントとして設定された場所のオフセットを出力します。また、復号できなかった文字列も出力します (下記の 重要な注意事項 を参照)。
コード内には、マルウェアがスクリプトで想定されている方法とは異なる方法を使用する箇所がいくつかあります。Could not decrypt xref: というメッセージが付いたアドレスをたどることでそれらの箇所を見つけ、関連する関数にオフセットを手動で指定して復号できます。
このスクリプトは、復号した配列を decode() で文字列に変換します。私の経験では、KPOT が復号する 3 つのバイト配列は文字列ではないため、スクリプトがクラッシュします。これらが kpot-string-decrypter-pt1.py で無視されているオフセットです。
search_offset() に現在のアドレスを出力する行を追加すると、スクリプトがクラッシュする場所を特定するのに役立ちます。decrypt_str() の戻り値を return(newarray.hex()) に変更するだけです。2 つのスクリプトのどちらを使用するかを判断するには、復号ルーチンを確認してください。pt1 はバイト XOR のみを行うサブルーチン用で、pt2 は XOR の後に AND 0xFF を行うサブルーチン用です。