复杂分支结构逆向

一、           条件分支的逆向基础

(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

       ……

反汇编形态:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值