Share
Embed
Transcript
16 slides
-
.NET Frameworkとは C#で書いたプログラムを実行するためのプラットフォーム 業務アプリの開発に使われるケースが多い ゲームエンジンUnityでも.NET Framework 4.xのAPIを利用可能
中間言語IL(Intermediate Language/中間言語)を採用している点が特徴 CPU 非依存の中間命令セット デコンパイルしやすい -
中間言語 C C# C#コンパイラ Cコンパイラ IL(中間言語) .dll / .exe JITコンパイラ
機械語 (CPU向けの言語に変換) 機械語 -
デコンパイラ dnSpy ILSpy C# IL(中間言語) .dll / .exe
JITコンパイラ 機械語 デコンパイラ C#風のソースコードに戻す 関数名を復元できる -
VulnClickerの構成 ZipをDLし、任意のフォルダに展開する VulnClicker_1.0.0 ├─tool │ bese64_calculator.py │ httpreq2curl.py │
request.txt │ ├─VulnClicker │ VulnClicker.exe │ VulnClicker.dll │ ・・・ │ └─VulnClickerScoreServer │ VulnClickerScoreServer.exe │ VulnClickerScoreServer.dll │ VulnClickerScoreServer.pdb │ ・・・ │ └─Data scores.json 解析支援ツール python やられアプリ本体 解析対象 HTTPクライアント 簡易スコアサーバー 解析対象外 HTTPサーバー(TLSにより通信暗号化) -
やられアプリの動かし方 ZipをDLし、任意のフォルダに展開する やられアプリ「VulnClicker.exe」を実行 VulnClicker_1.0.0 ├─tool │ bese64_calculator.py │
httpreq2curl.py │ request.txt │ ├─VulnClicker │ VulnClicker.exe ←まずこれを実行 │ VulnClicker.dll │ ・・・ │ └─VulnClickerScoreServer │ VulnClickerScoreServer.exe │ VulnClickerScoreServer.dll │ VulnClickerScoreServer.pdb │ ・・・ │ └─Data scores.json -
スコアサーバーの動かし方 証明書の設定を行う cd <Zipを展開したディレクトリ> cd .¥VulnClicker_1.0.0¥VulnClicker_1.0.0¥VulnClickerScoreServer dotnet dev-certs https
--check --trust dotnet dev-certs https dotnet dev-certs https --check --trust dotnet dev-certs https --trust Successfully trusted the existing HTTPS certificate.という表示が出ればOK スコアサーバー「VulnClickerScoreServer.exe」を実行 -
やられアプリ ゲーム機能 30秒間のスコアを競うクリッカーゲーム スコアサーバーが起動していれば、スコアの登録 が可能(HTTPS通信) ハイスコアはtop10ランキング入り
その他の機能 起動日や起動回数のカウント シリアルコードを入力し、モード変更できる ストップ、再スタート スコアをファイルにエクスポート・インポート スコアの改ざんチェック機能 -
dnSpyの起動 Zipをダウンロードし展開 「dnSpy.exe」を起動 dnSpy上で、File>Open> 「VulnClicker.dll」を選択 DLL:
Dynamic Link Library 動的リンクライブラリ →C#コンパイルにより生成 されたILのファイル -
dnSpyの読み方のコツ System.*は.NETの標準ライブラリ 解析対象外なので読む必要なし VulnClickerが今回のやられアプリ Activation
シリアルコード認証していそう怪 しい Clicker クリック回数のカウントなどアプ リの主要部分 濃いオレンジ色 →C#で記述した関数名 -
dnSpyの便利機能1 Serach機能 Edit>SearchAssembliesで右下 に検索窓が開く 検索条件「Options」の設定 「Search
in framework assemblies」はオフにする。解 析対象外の標準ライブラリを除外 してくれる。(System.*系) 「Serch For:」で検索対象を設定。 「Number/String」でハードコー ディングされた値や文字列を探し やすい。それで見つからない場合 は「All of the Above」に変更 シリアルコード で検索した例 -
セキュリティ対策の基礎知識 ハードコーディング ユーザーの手元にあるプログラムは解析される 攻撃の手掛かりになるダメ絶対。難読化、暗号化しても・・・
全アプリで共通の値を避ける、サーバー側で個別生成する、など 暗号化 通信の暗号化、データの暗号化 基本的に復号するには「鍵」が必要 ハッシュ 値やファイルが改ざんされていることをチェックできる。 入力に対して出力がかなりランダムで偶然の一致がほぼない。出力から入力を予測することが困難 Sha256など エンコード 一定のルールに従った文字列の変換、デコードも可能。暗号化ではない base64など