逆向_09if-else语句逆向分析

  1. 判断函数参数的个数问题
  2. if语句的逆向分析
  3. if-else语句的逆向分析
  4. if-else if-if语句的逆向分析

判断函数参数的个数问题

  • 一般情况下:
    1. 观察调用处的代码(注意push的个数)
    2. 找到平衡堆栈的代码继续论证
    3. 两者综合,函数的参数个数基本确定了
  • 如果以上的情况无法确定就简单使用以下步骤进行简单的分析
    1. 不考虑ebp、esp
    2. 只找给别人赋值的寄存器(eax、ecx、edx、ebx、esi、edi)
    3. 找到后追查其来源,如果寄存器中的值不是在函数内存赋值的,那一定是传进来的参数
    4. 公式一:寄存器 + ret 4 = 参数个数
    5. 公式二:寄存器 + [ebp+8] + [ebp+0x] = 参数个数

if语句的逆向分析

  • C语言代码

    int g_n = 10;
    int func1(int x,int y){
        int a = g_n;
        if (x<=y)
        {
            g_n = y+a;
        }
        return g_n; 
    }
  • 汇编代码

        int a = g_n;
    0010139E  mov         eax,dword ptr [g_n (107000h)]  //全局变量
    001013A3  mov         dword ptr [ebp-0x4],eax  
        if (x<=y) //重点关注的地方,判断的地方
    001013A6  mov         eax,dword ptr [ebp+0x8]  
    001013A9  cmp         eax,dword ptr [ebp+0xC]  
    001013AC  jg          func1+39h (1013B9h)   //大于跳转
        {
            g_n = y+a;
    001013AE  mov         eax,dword ptr [ebp+0xC]  
    001013B1  add         eax,dword ptr [ebp-0x4]  
    001013B4  mov         dword ptr [g_n (107000h)],eax  
        }
        return g_n; 
    001013B9  mov         eax,dword ptr [g_n (107000h)]  

if-else语句的逆向分析

  • C语言代码

    int g_n = 10;
    int func1(int x,int y){
        int a = g_n;
        if (x<=y)
        {
            g_n = y+a;
        }else{
            g_n = y-a;
        }
        return g_n; 
    }
  • 汇编代码

        int a = g_n;
    00C1139E  mov         eax,dword ptr [g_n (0C17000h)]  
    00C113A3  mov         dword ptr [ebp-0x4],eax  
        if (x<=y)//判断,
    00C113A6  mov         eax,dword ptr [ebp+0x8]  
    00C113A9  cmp         eax,dword ptr [ebp+0xC]  
    00C113AC  jg          func1+3Bh (0C113BBh)  //大于则跳转到else的代码处,否则则继续执行
        {
            g_n = y+a;
    00C113AE  mov         eax,dword ptr [ebp+0xC]  
    00C113B1  add         eax,dword ptr [ebp-0x4]  
    00C113B4  mov         dword ptr [g_n (0C17000h)],eax  
    00C113B9  jmp         func1+46h (0C113C6h)  //跳转到return处数值的返回
        }else{
            g_n = y-a;
    00C113BB  mov         eax,dword ptr [ebp+0xC]  
    00C113BE  sub         eax,dword ptr [ebp-0x4]  
    00C113C1  mov         dword ptr [g_n (0C17000h)],eax  
        }
        return g_n; 
    00C113C6  mov         eax,dword ptr [g_n (0C17000h)]  

if-else if-if语句的逆向分析

  • C语言代码

    int g_n = 10;
    int func1(int x,int y){
        int a = g_n;
        int b= 10;
        if (x<=y)
        {
            g_n = y+a;
        }else if(x>10){
            g_n = y-a;
        }else{
            g_n = a;
        }
        return g_n; 
    }
  • 汇编代码

        int a = g_n;
    00861A4E  mov         eax,dword ptr ds:[00867000h]  
    00861A53  mov         dword ptr [ebp-8],eax  
        int b= 10;
    00861A56  mov         dword ptr [ebp-14h],0Ah  
        if (x<=y)
    00861A5D  mov         eax,dword ptr [ebp+8]  
    00861A60  cmp         eax,dword ptr [ebp+0Ch]  
    00861A63  jg          00861A72  //跳转到else if 分支
        {
            g_n = y+a;
    00861A65  mov         eax,dword ptr [ebp+0Ch]  
    00861A68  add         eax,dword ptr [ebp-8]  
    00861A6B  mov         dword ptr ds:[00867000h],eax  
    00861A70  jmp         00861A8D  //跳转到返回
        }else if(x>10){
    00861A72  cmp         dword ptr [ebp+8],0Ah  
    00861A76  jle         00861A85   //跳转到else分支
            g_n = y-a;
    00861A78  mov         eax,dword ptr [ebp+0Ch]  
    00861A7B  sub         eax,dword ptr [ebp-8]  
    00861A7E  mov         dword ptr ds:[00867000h],eax  
        }else{
    00861A83  jmp         00861A8D  //跳转到返回
            g_n = a;
    00861A85  mov         eax,dword ptr [ebp-8]  
    00861A88  mov         dword ptr ds:[00867000h],eax  
        }
        return g_n; 
    00861A8D  mov         eax,dword ptr ds:[00867000h]  

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 787772394@qq.com

文章标题:逆向_09if-else语句逆向分析

本文作者:二豆子·pwnd0u

发布时间:2020-10-04, 08:50:21

最后更新:2023-05-18, 09:49:24

原始链接:http://blog.codefat.cn/2020/10/04/%E9%80%86%E5%90%91-09if-else%E8%AF%AD%E5%8F%A5%E9%80%86%E5%90%91%E5%88%86%E6%9E%90/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

/*爱心代码*/ /*雪花效果*/ /*百度代码自动提交*/