Frida の使い方 (超基礎編)
バイナリ計装ツール (Binary instrumentation tool) の Frida について, 基礎的な使い方のお勉強
そもそもバイナリ計装とは?
- Science Direct では以下のように説明されている
Binary Instrumentation is a technique used in computer science to measure task memory access patterns, which helps predict performance degradation due to contention for CPU caches.
計算機を用いたメモリアクセスパターンを計測し, CPU キャッシュ関連のパフォーマンスについて調べる技術
セキュリティの観点ではマルウェアの通信について監視し動態を調べる手法
Frida とは
- 主にモバイルアプリの解析などに用いられる Python 製ツール
- 本記事の内容は主に 公式ドキュメント を参考にした
インストール
- pip で簡単にインストール可能
pip install frida-tools
用語
フッキング
- プログラムの処理に割り込みを行い, 独自の処理を実行すること
プロセスへのアタッチとスクリプトのロード
- プロセス一覧を表示
frida-ps
- プロセスにアタッチ (プロセス番号か名前で指定)
frida -p $PROCESS frida -n $NAME
- スクリプトは
-l
オプションでロード可能
frida-trace を用いた Windows バイナリの解析
- 注目したい API について監視
frida-trace -n $NAME -i $API_NAME
__handlers__
フォルダが生成される-f
オプションで起動しながら監視も可能
frida-trace -f $NAME -i $API_NAME
handlers の編集
__handlers__
フォルダの javascript ファイルについて改ざんすると, 引数の改ざんなどが可能- 例として Sleep 関数について以下のハンドラーが存在するとする
/* * Auto-generated by Frida. Please modify to match the signature of Sleep. * This stub is currently auto-generated from manpages when available. * * For full API reference, see: https://frida.re/docs/javascript-api/ */ defineHandler({ onEnter(log, args, state) { log('Sleep()'); }, onLeave(log, retval, state) { } });
- 以下のように改ざんすると Sleep 時間を 0 にできる (
ptr($NUM)
で秒数を指定)
/* * Auto-generated by Frida. Please modify to match the signature of Sleep. * This stub is currently auto-generated from manpages when available. * * For full API reference, see: https://frida.re/docs/javascript-api/ */ defineHandler({ onEnter(log, args, state) { log('Sleep()'); args[0] = ptr(0); console.log("sleep modified!"); }, onLeave(log, retval, state) { } });