Upgrade to Pro — share decks privately, control downloads, hide ads and more …

seccamp2025_LT_デコンパイラ研究最前線

Avatar for KikyoNanakusa KikyoNanakusa
August 15, 2025
1.2k

 seccamp2025_LT_デコンパイラ研究最前線

セキュリティキャンプ全国大会2025のLTで話した内容です

Avatar for KikyoNanakusa

KikyoNanakusa

August 15, 2025
Tweet

Transcript

  1. Shizuoka University はじめに 日本でデコンパイラの研究をしてる人がいなくて寂しいです 興味がある方は軽率にご連絡ください 議論, 質問, 指摘, マサカリ歓迎 @齊藤(Aチューター)

    Twitter: @77777kusa デコンパイラ研究最前線について語ろうとしたら スライドが60枚になってしまいました 話が終わりません 配布するので勝手に読んでください 背景
  2. Shizuoka University 研究背景 デコンパイラ De-Compiler (日本語: 逆コンパイラ) コンパイラがソースコードを実行ファイルに変換するように, 実行ファイル をソースコードに変換したい

    マルウェア解析, 脆弱性調査, ソフトウェアの復元などに使用される 皆さまデコンパイラの原理と実装をご存じでしょうか ソフトウェアリバースエンジニアリングにおいて, 割と基盤技術なのに研究 者がいなさすぎる 使用者と開発者の割合が釣り合ってなくてダメ, 気持ちの良くない抽象化 またの名をブラックボックス 少なくとも表に出てる分には, 実用に耐えうるデコンパイラが米国に集中 しすぎ 背景
  3. Shizuoka University 既存のデコンパイラ 背景 Binary Ninja[Vector 35 Inc] CTF(Capture the

    Flag) 向けに開発された 独自のAI Copilotを搭載 Rustでプラグインを開発可能 モダン(主観による評価)
  4. Shizuoka University デコンパイラの実装 主に以下のコンポーネントを作成し, 統合することでデコンパイラは実装される Disassemble 機械語をアセンブリに変換 CFG(Control Flow Graph)

    Construction アセンブリをCFGに変換 IL / IR Lifting データフロー解析のためのILをアセンブリから生成 Control Flow Graph Structuring グラフパターンマッチングにより, CFGから高級言語の構造を復元 (e.g., if, while, for, etc) Type Recovery IRからデータフローを解析し, 式に型制約を付加 実現したいこととその方針
  5. Shizuoka University 困難性 特に難しいのが CFG Construction こっちはコンパイラの人たちが割と研究してくれているので CFG Structuring こっちの話からします

    Type Recovery 時間が足りない, ここでしゃべれるほどまだ詳しくない ちょっとだけ書いとくと, 型制約というものを使うらしいです データの振る舞いから, 満たされる条件を収集し, あり得る型のリストを列挙 詳しい人教えてください 背景
  6. Shizuoka University 困難性 CFG Structuring CFGのブロックを縮約したい Seq, If-Then(-Else), Switch, For,

    While 基本的にはグラフスキーママッチングを使用する ノードを縮約 背景
  7. Shizuoka University 困難性 CFG Structuring グラフの例 基本的にはSESSでグラフを 切り出して頑張る Single Entry

    Single Successor 全人類がこのグラフを目Structuring できればいいが... 背景
  8. Shizuoka University 困難性 CFG Structuring グラフの例 基本的にはSESSでグラフを 切り出して頑張る Single Entry

    Single Successor 全人類がこのグラフを目Structuring できればいいが... そんなわけはない ずっとCFGと戯れてたらちょっとでき るようになってきた 背景 continue break ネストしたif 多分Whileの中にif-then-elseがある Entry
  9. Shizuoka University 困難性 CFG Structuring かつての敵は”goto” スキーマにマッチしなかったエッジはgotoにデコンパイル していた → デコンパイル結果からgotoが減れば品質が上がるはず

    DREAM no more gotos[Yakdan+, 2015] CFGに適用できる現実的な計算量の構造化アルゴリズム goto edge 0を達成 詳細は3時間話せるので割愛 背景
  10. Shizuoka University 困難性 0 goto (構造化定理) は一種の答えだが... 究極のデコンパイラとは何か 実行ファイルを生成した真のソースコードを復元できること? これは少なくともNP

    Hard コンパイラが情報を忘却するため ソースコードにgotoが含まれていた場合... コンパイラ最適化でgotoが発生していた場合 →むしろ真のに求めるソースコードからは遠くなる 背景
  11. Shizuoka University 困難性 SAILR[Zion+, 2024] Deoptimizing CFG Gcc –O2 で行われる最適化の中で可逆なものをできるだけ元に戻す

    逆最適化 (De-Optimization) これによって, gotoの数とGEDをオリジナルに近づける 背景
  12. Shizuoka University 問題点 しかしこのSAILR, 素晴らしい一方で... DeOptimizationをコンパイラ毎に作るのか? 大変すぎる 不可逆なOptimizationはどうする 最適化手法も今後進化するのでは LLVMが頑張ってくる気がする

    LLVM詳しい人教えてください 大変面白いが, 実運用できない気がする 多くの言語, コンパイラで使用できる汎用的な手法が欲しい そんなものがあるのか…? 背景
  13. Shizuoka University メトリクス 背景 Perfect Decompilation[Kevin Burk+, 22] もしくはBytecode Exact

    Decompilation[Schulte+,2018] 同一のコンパイラを使ったときに, (メタデータを除いて)同一の バイナリが出力されるソースコードをバイナリから復元すること
  14. Shizuoka University メトリクス 背景 Functionally Accurate Decompilation バイナリレベルで一致していなくても, 同一の機能を持っていれば よい

    元のバイナリと生成されたバイナリの入力と出力が一致する. 副作用については考慮できない (e.g., Memory Mapped I/O) Decompiled Binary Original Binary Same Input Same Output
  15. Shizuoka University メトリクス 背景 Human-Readable Decompilation コンパイルの操作は, 変数名などの情報を忘却させる これらの情報の探索空間は膨大であり, 復元はNP困難

    構造の一意な復元も困難な問題 アセンブリから高級言語への射が一意でない できるだけ人間にとって読みやすい形式を選択したい. よりよく意味を持った表現? 操作的意味? 読みやすいプログラムとは何か → 非自明
  16. Shizuoka University メトリクス 背景 メトリクスがたくさんある, なぜか 究極を言えば, バイナリの生成に使用されたソースコードそのもの が欲しい しかし,

    この条件は原理的に達成不能 (少なくともNP-Hard) 一番達成したい問題が解決不能なので妥協点を探している
  17. Shizuoka University 新しいことをやる前に デコンパイラはどう発展してきたのか 何が試され, 何が試されていないのか 代表的な古い研究を探す D.L. Brinkley. Intercomputer

    transportation of assembly language software through decompilation. Technical report, Naval Underwater Systems Center, October 1981. https://apps.dtic.mil/sti/tr/pdf/ADA107645.pdf 背景
  18. Shizuoka University 最古のデコンパイラ もっと古く...! Neliac Decompiler[Herman Englander+,1960?] Navy Electronics Laboratory

    International ALGOL Compiler なんか米海軍が作ってたっぽい ALGOL58派生ののNeliac言語向けデコンパイラ 命令列でパターンマッチングしていた やはりパターンマッチ 詳しくは↓に書いてあるらしい https://a.co/d/0oIQZqb 背景
  19. Shizuoka University 最古のデコンパイラ もっと古く...! Neliac Decompiler Navy Electronics Laboratory International

    ALGOL Compiler なんか米海軍が作ってたっぽい ALGOL58派生ののNeliac言語向けデコンパイラ 詳しくは読んでないが, 命令列でパターンマッチングしてたっぽい? 詳しくは↓に書いてあるらしい https://a.co/d/0oIQZqb 背景
  20. Shizuoka University 形式証明デコンパイラ FoxDec:Formal x86-64 Decompilation 意味的同値かつ再コンパイル可能なデコンパイラ indirect branching, variadic

    functions, setjmp/longjmp,並行性などが対象外 惜しい.. ここでもCFGを使っている https://github.com/ssrg-vt/FoxDec 背景
  21. Shizuoka University 先行研究 Evolving Exact Decompile[Schulte+,2018] Bytecode Exact Decompilationを実現する手法 巨大なデータベースと進化的アルゴリズムを使用してBytecode

    Exact Decompileを実現する 欠点として, 計算コストが莫大 先行研究 Big DB Compiler Has Map of Asm and C Distance Function Is Same Evolving Algorithm
  22. Shizuoka University 先行研究(俺) Poster: Enhancing LLM4Decompile with Obfuscated Source Code

    for Optimized Assembly[Saito+,2025] 学習データに難読化したソースコードを混ぜたら精度が上がった 特にOptimizedなやつ しかしなぜ... → 研究中です 先行研究
  23. Shizuoka University 先行研究(再掲) Evolving Exact Decompile[Schulte+,2018] 進化的アルゴリズム(GA)を使って, Bytecode Exact Decompilationを

    達成するアプローチ Seedの生成は, データベースからの検索で行っていた. Seedとオリジナルの一致度は最大55%... さっきまでのアプローチと組み合わせたらいいのでは? 先行研究 Big DB Compiler Has Map of Asm and C Distance Function Is Same Evolving Algorithm
  24. Shizuoka University 研究の今後 Syntax Equivalence of Decompilation よりオリジナルに近いCFG構造化 (ソースコード) が欲しい

    オリジナルのソースコードにより近いデコンパイルをしたい話 e.g, SAILR[Zion+,2024] グラフの操作を頑張る グラフより上のレイヤでも戦える e.g, Evolving Exact Decompile[Schulte+,2018] 先行研究
  25. Shizuoka University 最最新研究 ACM CCSのSURE (Software Understandings and Reverse Engineering)

    Workshop 今年初開催, 明らかにデコンパイラが主要なテーマの一つ Chairが SAILR[Zion+,2025] の主著者. Hex-Raysの人も来る https://sure-workshop.org/ 背景
  26. Shizuoka University 最最新研究 ACM CCSのSURE (Software Understandings and Reverse Engineering)

    Workshop ポスタープロポーザルが通ったので行って話を聞いてきます はたしてこのスライドで説明した認識は正しい(共通見解)なのか 背景
  27. Shizuoka University 参考文献 Ghidra[NSA], https://github.com/NationalSecurityAgency/ghidra IDAPro[Hex-Rays], https://hex-rays.com/ida-pro BinaryNinja[Vector 35 Inc],

    https://binary.ninja Phonix[Schwartz, 2014], https://www.usenix.org/conference/usenixsecurity13/technical-sessions/presentation/schwartz DREAM[Yakdan+,2015], https://www.ndss-symposium.org/ndss2015/ndss-2015-programme/no-more- gotos-decompilation-using-pattern-independent-control-flow-structuring-and-semantics/ SAILR[Zion+,2024], https://www.usenix.org/conference/usenixsecurity24/presentation/basque Decomperson[Burk+,2022], https://www.usenix.org/conference/usenixsecurity22/presentation/burk EMI[Le+,2014], https://people.inf.ethz.ch/suz/publications/emi.pdf Decompile-Bench[Tan+,2025], https://arxiv.org/abs/2505.12668 BIRD[Engel+,23], https://dl.acm.org/doi/10.1007/978-3-031-38828-6_1 DIRTY[Qibin Chen+,22], https://www.usenix.org/conference/usenixsecurity22/presentation/chen-qibin 背景
  28. Shizuoka University 参考文献 DeGPT[Peiwei Hu+, 24], https://www.ndss-symposium.org/ndss-paper/degpt-optimizing-decompiler-output-with-llm/ LLM4Decompile[Tan+,24], https://arxiv.org/abs/2403.05286 Poster:

    Enhancing LLM4Decompile with Obfuscated Source Code for Optimized Assembly[Saito+,2025], https://www.ndss-symposium.org/wp-content/uploads/2025-poster-51.pdf 背景