複雜分支結構逆向

一、           條件分支的逆向基礎

(1)簡單if-else

我們知道簡單的if-else的跳轉結構是這樣的。

例如:

if(i1<x1)

     ……;

else

     ……;

在反彙編結果中我們會看到類似下面的結果

兩點說明::

jxx AAAAAAAA 這句由於false則跳轉,因此還原爲if代碼時,要注意。

jmp BBBBBBBB 這句在功能上屬於if的部分,但是如果沒有else,編譯器不會填寫此句。

 

(2)多層嵌套if-else

if(i<x1)

{…

if(i<x2)

       {…

        if(i<x3)

              …..

        else

              …..

       }

 else

       ……

}

對應反彙編形態:(地址ABCD從小到大分佈)

Debug

說明:

       這裏我們看到在Debug版裏,多層嵌套if-else只是簡單重複單層if-else的結構。另外,jxx仍然是false則跳轉,翻譯爲if時,要注意。

Release

說明:

       我們看到Release版對Debug改進,避免了jmp的多次運行。

二、複雜條件的條件分支逆向

1.複合條件的條件分支

(1)與——&&

if(i1<x1 && i2<x2 && i3<x3)

       ……

else

       ……

反彙編形態:

(2)或——||

if(i1<x1 || i2<x2 || i3<x3)

       ……

else

       ……

反彙編形態:

(3)混合

if(i1<x1||i2<x2&&i3<x3)

       ……

else

       ……

 

if(i1<x1&&i2<x2||i3<x3)

       ……

else

       ……

反彙編形態:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章