読者です 読者をやめる 読者になる 読者になる

Log.i53

Themidaのアンパックを目指すブログ改め使い物になるえんじにゃを目指すブログ

Anti-Analysis技術:Anti-Disassembly

Unpack Anti-Debug

 分析者を混乱させるためのその他の方法としては逆アセンブリの難読化があります。アンチ逆アセンブリは静的解析によるバイナリの分析を複雑にする効果的な手法であり、ガベージコードやコード置換と組み合わせることでより効果的になります。

 アンチ逆アセンブル技術の1つの例は、ガベージバイトを挿入した後でそのガベージバイトに遷移する条件分岐を追加するものです。ただし、この条件分岐の条件は常にFALSEになります。したがって、このガベージバイトは決して実行されることはありません。しかし、これによって逆アセンブラがガベージバイトのアドレスから逆アセンブルを開始するために、最終的には誤った逆アセンブリの出力に繋がります。

 以下は、PEB.BeingDebuggedフラグをチェックする簡単なコードにアンチ逆アセンブリコードが加えられたサンプルコードです。ハイライトされた行が主な命令であり、残りの部分がアンチ逆アセンブリコードになります。これはガベージバイトに0xFFを使用しており、ガベージバイトに向かうフェイクの条件ジャンプ命令が追加されています:
f:id:i53:20150609031331p:plain

 以下はWinDbgの逆アセンブリ出力です。
f:id:i53:20150609031432p:plain

 以下はOllyDbgの逆アセンブリ出力です。
f:id:i53:20150609031532p:plain

 以下はIDA Proの逆アセンブリ出力です。
f:id:i53:20150609031701p:plain

 どの逆アセンブラ/デバッガもアンチ逆アセンブリトリックに騙されていることに注目してください。これにより、逆アセンブリの分析者は分析の際に非常に鬱陶しく紛らわしい目にあいます。逆アセンブラを混乱させるためのその他の方法がいくつも存在しており、今回はその一例を示したに過ぎません。また、これらのアンチ逆アセンブリコードはマクロでコード化することができるため、元のソース自体は綺麗なままにすることができます。
 

Reversing: Secrets of Reverse Engineering

Reversing: Secrets of Reverse Engineering

 この技術のより詳細な部分について興味のある方は、アンチ逆アセンブリ技術やその他のリバーシングトピックについての詳細な情報を含む、Eldad Eliamによる優れたリバーシング書籍を参照することをおすすめします。