欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

逆向进阶复杂分支结构逆向

逆向进阶复杂分支结构逆向

熟知if-else的典型结构是逆向入门的必经路程,然而我们实际逆向时,遇到的情况远比这要复杂
一、条件分支的逆向基础典型的if-else结构
    我们知道简单的if-else的跳转结构是这样的。
例如:
if(i1<x1)
     ……;
else
     ……;
在反汇编结果中我们会看到类似下面的结果

两点说明::
①jxx AAAAAAAA 这句由于false则跳转,因此还原为if代码时,要注意。
②jmp BBBBBBBB 这句在功能上属于if的部分,但是如果没有else,编译器不会填写此句。
二、多层嵌套if-else
if(i<x1)
{…
 if(i<x2)
   {…
   if(i<x3)
    …..
   else
    …..
   }
 else
  ……
}
对应反汇编形态:(地址A、B、C、D从小到大分布)
Debug版:

说明:
  这里我们看到在Debug版里,多层嵌套if-else只是简单重复单层if-else的结构。另外,jxx仍然是false则跳转,翻译为if时,要注意。
Release版:

说明:
    我们看到Release版对Debug改进,避免了jmp的多次运行。
三、复合条件的条件分支
(1)与&&
if(i1<x1 && i2<x2 && i3<x3)
  ……
else
  ……
反汇编形态:

说明:
    N条分支全部向Jmp后跳转。
(2)或||
if(i1<x1 || i2<x2 || i3<x3)
  ……
else
  ……
反汇编形态:

说明:
    只有N-1个分支向jmp后跳转。
(3)混合
if(i1<x1||i2<x2&&i3<x3)
  ……
else
  ……
反汇编形态:

if(i1<x1&&i2<x2||i3<x3)
  ……
else
  ……
反汇编形态:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功