本**提出逆向編譯器或反編譯器的編寫技術。這些技術基於編譯器和優化理論,並以獨特的方式應用於反編譯;這些技術以前從未被公開發表。
反編譯器由幾個階段組成,即被組織成與語言或機器特徵相關的幾個模組。前端是乙個機器依賴的模組,句法分析二進位制程式、分析其指令的語義、並且生成該程式的低階中間表示法和每一子程式的控制流向圖。通用的反編譯機器是乙個與語言和機器無關的模組,分析低階中間**,將它轉換成對任何高階語言都可接受的高階表示法,並且分析控制流向圖的結構、把它們轉換成用高階控制結構表現的圖。最後,後端是乙個目標語言依賴的模組,生成目標語言**。
反編譯的過程中要使用一些工具:把二進位制程式裝入記憶體,對這一程式做句法分析或反彙編,以及反編譯或者分析該程式來生成高階語言程式。這個過程借助編譯器和庫的簽名來識別特定的編譯器和庫子程式。只要在二進位制程式中識別出編譯器簽名,就不去反編譯這些編譯器啟動**(start-up)和庫子程式:對於前者,從最後的目標程式去掉啟動**的那些例程,反編譯器從主(main)程式入口點開始分析;對於後者,那些子程式用其庫函式名代替。
所提出的技術在乙個適用於intel i80286體系結構的反編譯器(原型)樣機上得以實現,該樣機名為dcc,在dos作業系統下執行,為輸入源的.exe檔案或.com檔案產生目標c程式。在第9章,將反編譯輸出的程式同它最初的高階語言程式做了取樣比較,並且對反編譯結果做出乙個分析。
第1章從編譯器角度對反編譯做一介紹,第2章從20世紀60年代早期反編譯出現開始介紹它的歷史概況,第3章介紹源二進位制程式的靜態二進位制**和在執行時間實現程式的動作之間的關係,第4章描述前端模組這個階段,第5章詳細說明用來分析中間**的資料優化技術,把中間**轉換成乙個更高階的表示法,第6章詳細說明用來分析控制流向圖結構的控制結構轉換技術,把控制流向圖轉換成乙個高階控制結構的圖,第7章描述後端模組,第8章介紹反編譯工具程式,第9章綜述dcc的實現以及取得的成果,第10章給出結論以及這項研究的工作前景。
逆向技術疑惑
1 記憶體中類例項的記憶體情況,不明白有1 class ex2 int var1 public virtual int get sum int x,int y virtual void reset values class ex3 public ex2 int var2 public virtual...
Android 逆向 反編譯
將.apk檔案字尾名更改為.zip,並將其解壓 圖1.png 使用dex2jar工具來反編譯 c users administrator desktop dex2jar 2.0 dex2jar 2.0 d2j dex2jar c users admi nistrator desktop dex 1 ...
Android 逆向 反編譯
將.apk檔案字尾名更改為.zip,並將其解壓 圖1.png 使用dex2jar工具來反編譯 圖2.png 在dex2jar 2.0目錄下獲取到classes dex2jar.jar檔案,並使用jd gui開啟 圖3.png 使用apktool工具來反編譯資源檔案 apktool d 1.apk圖4...