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

前言

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

一只Demo

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

c 复制代码
#include <stdio.h>

void if_demo(int v)
{
	if (v > 5)
		printf("v > 5\n");
	else
		printf("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 函数反汇编后的效果

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

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

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

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

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

FOR 循环

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

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

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

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

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

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

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

安全性问题

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

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

相关推荐
码农小旋风1 天前
使用 ChatGPT 聚合站前,先看安全和隐私判断清单
人工智能·安全·自然语言处理·chatgpt·claude
Bruce_Liuxiaowei1 天前
2026年5月第5周网络安全形势周报
人工智能·安全·web安全·ai·智能体
阿部多瑞 ABU1 天前
AI红队攻防演化史(2023-2026):从虚拟角色到RLHF劫持——所有攻击方法全景总结与最新趋势分析
网络·人工智能·安全
Geometry Fu1 天前
《物联网安全》第3.2章 无线传感器网络安全
物联网·安全·物联网安全·无线传感器网络·wsn
m0_738120721 天前
渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(一)
服务器·前端·网络·安全·php
碳基硅坊1 天前
Qwen3.5-9B在安全生产安全帽检测中的应用
人工智能·安全·安全帽检测·qwen3.5-9b
小江的记录本1 天前
【JVM虚拟机】类加载机制:类加载全流程:加载→验证→准备→解析→初始化(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·算法·安全·spring·面试
消失的旧时光-19431 天前
企业认证与安全体系(四):企业登录认证流程全解析——JWT、Redis、Spring Security 如何协同工作?
redis·安全·spring·spring security·jwt
wb043072011 天前
食安大检查——从阿明餐厅的突击检查,看安全架构的六大防线
安全·安全架构
不灭锦鲤1 天前
网络安全第113天
安全·web安全