web-dev-qa-db-ja.com

このコードが危険かどうかを認識する方法

難読化されたコードを受け取ったところ、難読化を解除したいと考えています。誰かが使用されている暗号化方法を説明できますか?
そして、どうすればそれを元に戻すことができますか。
コードは次のとおりです:

On error resume next
Data="}èŝŸȠɩʽ̟ͪρФШҘӔղ׏ܦݷބߢࡳ࢏ࣜ"
Container1=""
id="4d9fdb14-d482-4fc5-a910-9af261a17650"
random1=0
random2=0
do until random1=len(Data)
random1=random1+1
random2=random2+1
if random2=len(id) then random2=1
Container1=Container1 & ChrW(AscW(Mid(Data, random1, 1)) - random2 * 86)
loop
if len(Container1) > 282 then
execute Container1
end if

Pastebinの完全なコード: https://Pastebin.com/WJTgKmP1

7
Sergio Ramos

実行する代わりに印刷

この場合、解読コードが目の前にあります。それがどのように機能するかを理解することは興味深いかもしれませんが、それは必要ではありません-プロセスフローが変数Container1へのペイロードを難読化しないことは明らかであり、その後実行されます。

あなたができることは、execute Container1を(これがVBAであると仮定して)MsgBox Container1のようなものに置き換えて、コードを実行することです。もちろん、悪意のある可能性のあるコードは、重要なコンピュータではなく、サンドボックス仮想マシンで実行する方が安全です。たとえそれが何をして何をしていないかを知っていると信じていても、だれでも評価を間違える可能性があります。それ。

これにより、さらなる分析と難読化がまだ必要な「第2段階」が明らかになるだけの可能性がありますが、それは別の学習課題です。

31
Peteris

あなたの質問に対するより一般的な答え( answer に加えて、execをPeteriSのprintで置き換えると、迅速な分析に非常に便利です)。

コードの危険な部分には、システムに副作用のあるメソッドや呼び出しが含まれます。これには特に、コマンド、IPC、ファイルを開く、またはネットワーク通信を実行するためのシステムコールが含まれます。それを行うすべてのコードが危険であるとは限りませんが、少なくとも疑わしいはずです。

ただし、この種のコードが表示されないために、存在しない可能性があることに注意してください。より一般的には、何らかの形のメモリ操作を行ってから、ハンドラを他の場所にジャンプまたは設定すると、同じことが行われる場合があります。

ただし、サンプルコードでは、executeが唯一の危険な部分として浮き彫りになります(そして、VBAが正気の人によって使用されていないという事実)。

4
eckes