x86 逆コンパイラの調査メモ
McSema
LLVMベース。Readme( https://github.com/lifting-bits/mcsema/blob/d538ca4acc0918894924ab28ce889d14157beb83/README.md#comparison-with-other-machine-code-to-llvm-bitcode-lifters )の他プロジェクト一覧が参考になる。
CFG解決フロントエンドがIDA Proに依存しているためIDA Proのライセンス必須。一応dyninstで書かれたフロントエンド( https://github.com/lifting-bits/mcsema/tree/master/tools/mcsema_disass/dyninst )もあるが未実装部分が多い。
CFGを別の逆コンパイラで解決してremill( https://github.com/lifting-bits/remill )に流す方が良いんだろうか。
Retdec
Avast(元AVG)の逆コンパイラ。小さなプログラムではほぼ確実に動く。テンプレートを元にlibc等が静的リンクされていても消し込みができるなど便利な機能が多い。
出力されるコードフローが変( 関数callが脱落したりする )、x87の long double
を直接読んでいるなど微妙なバグが多い。
angr
Python製。LLVM-IRではなく、ValgrindのVEXを基盤としている。命令列のliftもVEXをパッチして利用。
rev.ng
こちらはQEMUのTCGを基盤にしている。エミュレータに命令列のliftをやらせるのは微妙に賢い気はする。PEをサポートしていない。
Boomerang
クソ懐しい。まぁ今やGhidra有るしなぁ。。
Reko
謎。かなりの部分が手作りですごい。逆アセンブラがCapstoneなくらいか。