2009年10月31日 星期六

反編譯

 
  「由執行檔轉回 C++ 碼!?」

欲取 VC 資源可用 eXeScope 一類的東西,
欲得知原始碼大略寫法的話:
Dcc,EXE2C,REC,Boomerang,都是 for C...
IDA pro 的 plugin Hex-Rays 可轉出類似 C 的語法。
或許 SourceForge 上有其他更瘋狂的東西 XD

原理是先將 binary code 反組譯 (形如 sourcer、dumpbin、
IDA pro、w32dasm),再將 asm 解釋成 C。

但...

假設無 platform, endianness 等問題,反編譯仍是困難重重。
由於符號表可能不存在,code 可能因 optimization 或 (C++的)
inline 而變更佈局,且反編譯為一對多映射,C++ 另有 mangle,
vtbl, 模版代換 等問題,產生的結果將比 Perl2C 還難懂 ==;

對 C++ 而言,與其 decompile,不若 rewrite 之。

若是 C# 就容易多了,他的 MSIL 和 Java 的 b-code 一樣,
原始資訊盡在其中 (這樣才能被 interpreter 正確解譯)。
一堆工具如 Ildasm, Reflector, salamande 都可以反編譯出可讀性高的碼。

沒有留言:

張貼留言