当前位置: 首页 > news >正文

逆向分析之if语句与循环语句的分析

前言

本次我们要介绍if语句,for循环编译后的反汇编内容,以C/C++编写的可执行程序为例进行分析

一只Demo

首先是一只Demo,是我们本次分析对象的源码

#include <stdio.h>void if_demo(int v)
{if (v > 5)printf("v > 5\n");elseprintf("v <= 5\n");
}void for_demo(int v)
{for (int i = 0; i < v; ++i){printf("item :%d\n", i);}
}int main()
{int v = 6;if_demo(v);for_demo(v);return 0;
}

本次的demo分为两部分,分别是if语句的demo,for语句的demo,我们首先把它编译为sample.exe 文件,然后使用调试器进行调试

IF 语句

首先我们先看一下 if_demo 函数反汇编后的效果

image-20250919093125976

我们来看一下上面的反汇编内容,我们分成几部分来看

首先第一部分是 printf 语句,call sample.A610D7 是调用 printf 接口的汇编语句,再起上面的一条 push 语句为向printf压如参数,也就是要打印的字符串

image-20250919094709657

接下来我们要识别的是条件判断语句
image-20250919094829742

首先是 cmp 语句,cmp 语句由于比较两个操作数,将结果保存在标志寄存器中,具体是如何保存的我们暂时可以先不用管

接下来是一条条件跳转语 jle,jle 的全称是 Jump if less or equal,也就是上面cmp语句的比较结果为小于或等于时跳转,那也就以为着如果大于则不进行跳转。我们画一个图一看就明白了

image-20250919134015950

FOR 循环

首先我们看一下 for_demo 的反汇编结果

image-20250919141742287

我们还是分部分来看代码,左边的箭头显示了每一条指令的跳转位置,我们可以对比着看
image-20250919142102526

这段代码的含义是调用printf打印第几次循环,也就是for中循环体部分的内容

image-20250919142220318

这部分是对控制变量进行自增,然后进行比较,看看是否满足循环条件,如果不满足循环条件则通过jge指令跳转到循环体外面

image-20250919142325200

这一行跳转语句用于在第一次循环时设置了控制变量为0后直接跳过对控制变量的自增部分,直接判断是否满足循环条件
image-20250919142424714

这一条跳转语句用于跳转到控制变量自增的部分

接下来,还是一张图说明一下流程
image-20250919143250600

安全性问题

虽然程序被编译为了汇编语言,但是对于有经验的逆向分析人员来说逻辑还是很清晰的,尤其是如果辅助了反编译工具,比如IDA一类,程序会被还原为跟源码差不多的伪代码,那我们程序的逻辑就更加的暴露无疑了,那我们的程序的安全性应该如何保证呢?

答案是我们需要对程序进行加固,我们可以下载一个 Virbox Protector 工具,然后对我们的程序进行加固,加固后的程序可以检测调试器,当有人调试我们的程序时程序就直接退出了,同时混淆虚拟化等等功能也会让我们程序变得无法分析

http://www.zskr.cn/news/8013.html

相关文章:

  • ROMA-iOS适配深色模式总结
  • Git 指令笔记 - 详解
  • Syntax Error: TypeError: eslint.CLIEngine is not a constructor 解决方案
  • 【ACM出版】2025年人工智能、虚拟现实与交互设计国际学术会议(AIVRID 2025)
  • 《sklearn机器学习——特征提取》 - 指南
  • Windows 10 11 Boot Fix
  • ubuntu 安装 milvus
  • SI/PI学习笔记1 -20250911
  • Web开发工具一套式部署Maven/Nvm/Mysql/Redis - 教程
  • 单词翻转
  • 详细介绍:kafka如何保证消息不被重复消费
  • C++ 最开始的地方
  • ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
  • ARC187 做题记
  • lombok与mapstruct冲突的问题
  • SAP物料自动记账科目设置总结
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • 移远模组使用移远云平台对接指令
  • 2025年最火的免费客服系统分享
  • MCP服务自用
  • Nexpose 8.21.0 for Linux Windows - 漏洞扫描
  • 天上的乌云不见了,但是没有下雨,那它们都去哪了呢?
  • afx100.dll afrvidwindowmanager.dll afresu.dll afrcomputeserver.dll afckernel.dll aexplore_view. - 详解
  • UE5 增量 Cook
  • 【数据库强大的系统Trip 第1站】总概
  • RenderPass与 SubPass 理论
  • 详细介绍:html让该元素忽略所有鼠标事件,例如点击、悬停、拖拽都无效。
  • 梗棋
  • javax.imageio.IIOException: Cant create output stream! 解决方法 验证码出不来
  • 【转载】在Vue3中引用Vue2组件