Log.i53

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

Unpack

UPXにおけるIATのマニュアル再構築 【分析編】

i53.hatenablog.jp 前回の記事でIATについて大雑把に勉強したので、その情報を元にIATのマニュアル再構築を試みます。# 勉強したてホヤホヤなので間違いなどがあれば是非コメントにて指摘して頂けると助かります...!

マニュアルアンパック:PECompact

導入 PECompactは速度とパフォーマンスに焦点を当てて設計された商用パッカーです。無償の学生版はマルウェア作者によって使用されることが多かったため廃止され、使用用途や組織名による登録が必要な試用版に置き換えられています。このパッカーでパックさ…

Inside Code Virtualizer を読んだ

tuts4you.com OreansのCode Virtualizer 1.0.1.0のデモ版をリバースエンジニアリングした結果を纏めたScherzo氏の文献を読みました。ただし、このバージョンがリリースされたのが2006年の6月なので現行のCode VirtualizerやThemidaで利用されるものとは大き…

マニュアルアンパック:ASPack

導入 ASPackはUPXよりかは幾分セキュリティに焦点を当てており、プログラムのアンパックを難しくするためのいくつかのテクニックを採用しています。ASPackは自己置き換えコード(self-modifiing code)と呼ばれるブレークポイントの設置や一般的な分析を難しく…

Unpacking Virtualization Obfuscators を読みました

18th USENIX Security Symposiumと併せて開催されたWOOT'09のRolf Rolles氏のペーパーを翻訳しました:Unpacking Virtualization Obfuscators(PDF)

ODbgScriptを利用したUPXのOEP探索

ODbgScriptを利用してUPXでパックされた実行ファイルのOEP探索を自動化してみましょう。前回説明したように、UPXではPUSHAD命令とPOPAD命令(全てのレジスタの退避と復帰)の対称性に着目したESPトリックという手法を用いることでOEPにジャンプする命令の直前…

OllyScript リファレンス

OllyScript OllyScriptはOllyDbgの操作を自動化するためのアセンブリライクな言語で記述できるスクリプト言語です。OllyDbgにおけるデバッグ操作を自動化するための各種コマンドが用意されています。(注:プラグイン名がODbgScriptでスクリプト言語名がOllySc…

ODbgScriptの使い方

ODbgScript ODbgScriptはユーザモードデバッガの(私的)最高傑作であるOllyDbgのプラグインで、以下のリンクからプラグイン本体とそのソースコード、ドキュメントおよびサンプルスクリプトをダウンロードすることができます。ODBGScriptsourceforge.net OllyD…

マニュアルアンパック:UPX

導入 UPXはいくつかの異なる実行ファイルフォーマットに対応したフリーの実行ファイルパッカーです。これは優れた圧縮率を実現し非常に高速な解凍を提供しています。UPXの設計は非常にシンプルでありアンパック妨害機能も備わっておらず、アンパッキングの基…

The Art of Unpacking 翻訳まとめ

翻訳物 アンパック勉強の入口として以下の記事を翻訳しました! とても勉強になりました。ありがとうございます:) The Art of Unpacking - Black Hat (PDF)# 著者に無許可で翻訳物を公開してしまいました。 # フェアユースの概念に従っていますが何か問題が…

AntiDebug技術:Virtual Machines

仮想マシン利用のコンセプトはシンプルです。 分析者はアンチデバッグ技術や分析妨害技術を回避/解決する方法を最終的には把握することになり、保護された実行ファイルは最終的には復号されメモリ内に展開した状態で実行される必要があるので、静的解析をす…

AntiDebug技術:Multi-Threaded Packers

マルチスレッドで動作するパッカーでは、保護された実行ファイルの復号など、要求された操作を実行するためのそれぞれ別のスレッドが生成されます。このようなパッカーでは、コードのトレースが複雑になることからコード理解の困難性が増加します。 マルチス…

AntiDebug技術:API Redirection

APIリダイレクションは保護された実行ファイルのインポートテーブルの再構築を妨害するための手法です。一般的に、オリジナルのインポートテーブルは破壊され、APIは割り当てメモリ内に位置する実際のAPIに対応するルーチンにリダイレクトされます。 以下にk…

AntiDebug技術:Stolen Bytes

Stolen Bytesは、実行ファイルのコード保護(たいていエントリポイントのいくつかの命令)の基礎で的な手法であり、パッカーは割り当てメモリ上にコードをコピーして実行した後で削除します。これにより、保護プロセスがメモリからダンプされた場合であっても…

AntiDebug技術:TLS Callbacks

パッカーによって使用されるその他のテクニックに、実際のエントリポイントが実行される前にコードを実行する手法があります。これはThread Local Storage(TLS)コールバック関数を使用することで実現できます。パッカーはそのデバッガ検出や復号ルーチンをこ…

AntiDebug技術:Debugger Blocker

Armadilloパッカーによって導入され始めてた機能がDebugger Blockerと呼ばれる機能です。これは保護プロセスへのデバッガのアタッチを妨ぐものです。この保護機構はWindowsによって提供されているデバッギング機能を使用して実装されています。 具体的には、…

AntiDebug技術:Process Injection

パッカーによってはプロセスインジェクションを機能としてもつものが存在します。この機能では、アンパッキングスタブが選択されたホストプロセス(それ自身, explorer.exe, iexplorer.exeなど)を生成して、アンパックされた実行ファイルがそのホストプロセス…

AntiDebug技術:OllyDbg:OutputDebugString() Format String Bug

このデバッガ攻撃テクニックはOllyDbg特有のものです。OllyDbgにはフォーマットストリングバグという脆弱性があることが知られており、これを利用することでOllyDbgをクラッシュさせるかまたは任意のコードを実行させることができます。このバグはkernel32!O…

AntiDebug技術:Unhandled Exception Filter

MSDNドキュメントには、例外が未処理例外フィルタ(kernel32!UnhandledExceptionFilter) に達してかつ、そのアプリケーションがデバッグされていなかった場合、その未処理例外フィルタはkernel32!SetUnhandledExceptionFilter() APIのパラメータとして指定さ…

AntiDebug技術:Disabling Breakpoints

ブレークポイントを強制的に解除することによってデバッガを攻撃する方法があります。ハードウェアブレークポイントを無効化するために、パッカーはCONTEXT構造体を介してデバッグレジスタを編集します。 例 この例では、例外ハンドラに渡されるCONTEXTレコ…

AntiDebug技術:ThreadHideFromDebugger

このテクニックは一般的にスレッドの優先度を設定するために使われるntdll!NtSetInformationThread() APIを利用します。このAPIはデバッガに送信されるデバッグイベントを妨害するためにも使用できるのです。 NtSetInformationThread()に渡されるパラメータ…

AntiDebug技術:Blocking Input

分析者によるデバッガの制御を防止するために、パッカーはメインのアンパッキング処理が実行されている間にuser32!BlockInput() APIを利用してキーボードやマウスの入力をブロックすることができます。ガベージコードやアンチ逆アセンブリ技術でこれを隠蔽さ…

AntiDebug技術:Misdirection and Stopping Execution via Exceptions

コードを直線的にトレースしていくことで、分析者はコードの目的を容易に理解し把握することができます。したがって、パッカーによっては線形でないコードによって分析に時間がかかるように仕向けるいくつかの技術を採用しています。 一般的に使用される技術…

Anti-Analysis技術:Anti-Disassembly

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

Anti-Analysis技術:Garbage Code and Code Permutation

ガベージコード(Garbage Code) アンパッキング処理へのガベージコードの挿入は分析者を混乱させるための効果的な手法のうちの1つです。コードの真の目的を隠蔽することに焦点が当てられており、複号処理やデバッガ検出のような耐タンパー技術の上に適用され…

Anti-Analysis技術:Encryption and Compression

暗号化(Encryption)と圧縮(Compression)は耐タンパー技術において最も基本的なものです。これらは分析者が逆アセンブラによって保護された実行ファイルをロードして、何の支障もなしに分析を開始することを防止するための、最初の防御となります。 暗号化 パ…

デバッグ検出技術:Code Checksum Calculation

パッチ検出ではパッカーコードの改変を検出します。コードの改変(パッチ)はアンチデバッグ処理の無効化を示唆しています。また、ソフトウェアブレークポイントがセットされているかどうかを検出する上でも利用することができます。パッチ検出はコードチェッ…

デバッガ検出技術:Hardware Breakpoint Detection

ソフトウェアブレークポイントの他にハードウェアブレークポイントというものがあります。ハードウェアブレークポイントはデバッグレジスタを設定することによってセットできます。デバッグレジスタはDr0からDr7まで用意されており、Dr0からDr3が4以下のブレ…

デバッガ検出技術:Software Breakpoint Detection

ソフトウェアブレークポイントはターゲットアドレスのコードを改編することによって設定するブレークポイントであり、例えば、0xCCのバイト値(INT3 / ブレークポイント割り込み)に置き換えられます。この場合、パッカーは保護コードやAPIコード内の0xCC値…

デバッガ検出技術:Guard Pages

このチェックはOllyDbg特有のものであり、これはOllyDbgのメモリブレークポイント機能に関係しています。 ハードウェア/ソフトウェアブレークポイントを別として、OllyDbgはアクセス/ライトメモリブレークポイントを実装しています。このタイプのブレークポ…