逆向分析之switch语句

前言

本次我们要介绍的是C/C++中的switch语句在编译为可执行程序后的反汇编内容

一只 DEMO

首先我们需要先写一段示例代码,作为我们的分析对象

void switch_demo(int v)
{switch(v){case 4:printf("v = 4\n");break;case 5:printf("v = 5\n");break;case 6:printf("v = 6\n");break;default:printf("other\n");}
}int main()
{int v = 6;switch_demo(v);return 0;
}

我们需要将上面的代码编译为可执行程序,然后使用x64dbg进行分析

分析

我们先来看一下反汇编的结果,这里我们只看 switch_demo 接口即可
image-20250922135143756

输出打印信息部分

我们按照我们的代码结构来分析上面的反汇编内容,以帮助大家理解;首先出场的是使用printf打印输出信息的部分

image-20250922135536853

我们可以看到输出部分一共有四段,先试用push向printf压入参数,也就是要通过printf打印的字符串,然后使用call 调用 printf 接口

break 部分

image-20250922135824611

我们的代码中有3个break语句,分别对应上图中的3个跳转语句,用于跳转到switch结束的位置

条件判断跳转部分

image-20250922141851041

该部分是 switch 中的条件判断与跳转部分也是最终要的部分,该部分的作用是使用 switch 括号中的操作数依次与case 中的值进行比较,用于决定跳转到哪部分代码

首先是 mov eax, dword ptr ss:[ebp+0x8],switch 的判断条件式通过 switch_demo 函数的参数传递进来的,所以这句话的含义是从参数中取出判断条件保存在eax寄存器中

接下来是 mov dword ptr ss:[ebp-0xC4], eax,该含义是将刚刚保存在 eax 中的参数保存到栈中,地址是 ebp-0xc4

cmp dword ptr ss:[ebp-0xC4], 0x4,这是判断的第一个case语句,和立即数4进行比较

je 0x00F21AEC,如果上面的判断结果是相等,那么就跳转到 0x00f21aec 地址处,我们从上面的反汇编内容中可以看到该处对应的是第一条case语句中的内容,并且执行完成后通过最后的 jmp 语句跳出 switch 结构,也就是代码块结尾的 break 语句

image-20250922142307538

cmp dword ptr ss:[ebp-0xC4], 0x5,如果上面的判断条件不相等就会继续使用保存在栈中的操作数和立即数5进行比较,也就是第二条case语句的值

je 0x00F21AFB,如果上面的判断是相等的,就跳转至 0x00f21afb 地址处,从返回编的图中我们可以看到,该地址属于第二条case语句中的代码,并且同样执行完成后通过 jmp 语句跳出switch 结构

cmp dword ptr ss:[ebp-0xC4], 0x6,如果上面的判断结果依旧不成立,那就继续和6进行比较

je 0x00F21B0A,如果相等,则跳转至第3个case所代表的代码块

jmp 0x00F21B19,如果上面的条件全都不成立则直接跳转至地址 0x00f21b19 地址处,该地址所指向的代码段是switch 最后的 default 代码块

到此我们就完成了 switch 语句的全部分析了

结语

我们可以看到只要理解了不同代码反汇编后的结构理解起来还是很轻松的,如果使用IDA等工具直接进行反编译还可以直接转换为类似于C语言一样的反编译代码,这样分析起来就更加容易了,那么我们该如何防止别人恶意分析我们的程序呢?

程序的安全问题

这就要聊到一个十分重要的话题了,程序的安全性问题,我们的程序发布出去后如果不经过保护其他人还可以十分轻易的看到我们的代码逻辑的,理解了我们的代码逻辑也就可以对我们的程序进行篡改了

那我们要如何进行防护呢?我们可以使用 Virbox protector 工具对我们的程序进行保护,我们的程序编译完成后生成的可执行文件或库等直接拖到 Virbox protector 工具中进行一下保护,其他人就无法分析和调试我们的程序了,同时还能够防止其他人对我们的程序进行篡改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

章丘建设局网站小广告怎么做

文章目录 前言一、动态合批的规则1、材质相同是合批的前提,但是如果是材质实例的话,则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader,来测试动态合批1、我们选择模型的 Mesh…

2008iis里没加域名 网站指向还在重庆物流公司网站建设

网上的教程有很多,基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的。 安装环境:win 10 1、下载zip安装包: MySQL8.0 For Windows zip包下载地…

华北冶建工程建设有限公司网站平台公司信用评级

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用Float属性⭐ 使用Flexbox布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感…

手机网站建设专业服务公司微信公众平台官网手机版

来源:混沌巡洋舰原文:摘自 edge 系列图书 《那些最重要的科学新发现》迈克斯泰格马克(MaxTegmark):麻省理工学院物理系终身教授,平行宇宙理论研究专家,未来生命研究所创始人;著有《生命3.0》《穿越平行宇宙…

营销网站htmlwordpress教程帕兰

JavaScript是一种广泛应用于Web开发的轻量级、解释型、面向对象的脚本语言,它支持事件驱动、函数式以及基于原型的编程风格。JavaScript不仅可以用于客户端(在用户的浏览器中运行),也可以在服务端(如Node.js环境&#…

推荐门户网站建设公司2个女人做暧暧网站

目录 一、效果图 二、qtDesigner ①拖出一个frame作为组容器并贴上背景样式 ②拖出主要的三个控件:frame、line、frame、label*2 ③固定大小并设置字体、布局一下 ④拷贝三份并水平布局一下 ⑤设置样式 ⑥调整布局 三、ui文件 四、代码 一、效果图 二、qtD…

批量查询设计桩号方法及文件格式

工具 → 设计标高 文件格式如下: HINTCAD5.84_STA_SHUJU47510.000 147520.000 247530.000 347540.000 447550.000 547560.000 647570.000 747580.000 847590.000 947600.000 10 【一定注意最后带个空行】,文件后缀名…

html5 响应式音乐网站网站推广软文选择天天软文

1.输入文件为基因组文件和gff3文件,输出为5utr和3utr,并且utr已经考虑了正负链和可变剪接情况,意思是如果utr存在可变剪接,输出的文件已经给拼接好了,并且考虑了正负链和拼接方向 #!/usr/bin/env python # -*- coding: utf-8 -*- # python lin_extract_5utr_cds_3utr2.py…

搭建Python的运行开发环境

在本次的学习中,我们将学习搭建python的编程环境,并将运行第一个python程序-在终端中打印输出 “Hello Python World!” Python是一种跨平台的编程语言,这就意味着它可以运行在所有主流的操作系统中。在所有安装pyt…

详细介绍:树上LCA和树链剖分(未完待续)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

上海网站建设置作山西响应式网站建设设计

一:前言 多线程在java中具有举足轻重的地位,无论是平时开发中还是面试求职中,对多线程这一块的知识点考察都非常多的,本周我们将平时开发中、面试中常见的一些多线程知识进行梳理,让大家对这一块有更加深入的理解 二…

【HBase 原理操作 01】

一、HBase依赖和整合的框架 依赖框架:Hadoop、Zookeeper 整合框架:Phoenix、Hive 二、HBase概念 1、定义:是以hdfs为数据存储的,一种分布式、可扩展的非关系型(NoSQL)数据库,和clickhouse一样同样以列式存储,存储…

打破数据壁垒,DMS Data Agent 开启智能分析之旅

DMS Data Agent 是阿里云推出的企业级智能分析平台,通过自然语言处理技术实现自动化数据分析。该方案突破传统分析流程,将复杂的数据探索简化为"一句话描述-获取深度分析"模式,显著提升决策效率。一、引言…

北京建设信源官方网站淄博营销网站建设公司

面向面试知识–MySQL数据库与索引 优化难点与面试点 什么是MySQL索引? 索引的MySQL官方定义:索引是帮助MySQL快速获取数据的数据结构。 动力节点原文: MysQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。 MysQL在存储数据之…

漳州网站建设去博大a优韩国建筑网站

目录 一、Tinymce介绍 二、React集成Tinymce 1、安装tinymce/tinymce-react组件 2、React中引用 三、如何配置中文语言包 1、下载中文包 2、把语言文件放入tinymce 3、tinymce配置项中配置语言 一、Tinymce介绍 官网:The Most Advanced WYSIWYG Editor | T…

南阳网站排名优化报价这几年做那个网站能致富

目录 11.2.4 方法 setUp() 注意 11.3 小结 第二部分 项目1 外星人入侵 第12 章 武装飞船 注意 12.1 规划项目 12.2 安装 Pygame 注意 12.2.1 使用 pip 安装 Python 包 注意 如果你启动终端会话时使用的是命令python3,那么在这里应使用命令…

网络技术网站专业网站开发平台

本文介绍go语言处理字符串类型的常见函数。 ## 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 () 。 str : This is a multiline string. ## 字符串的拼接 go // fmt.Sprintf方式拼接字符串 str1 : "abc" str2 : "def" …

建网站后如何维护如何优化公司的网站

复杂连接是指涉及多个表之间的连接操作,通过使用条件和连接类型来组合和关联这些表的数据。 一、常见的复杂连接类型及其特点、使用方法和示例代码: 1. INNER JOIN(内连接): - 特点:返回两个表中满足连接…

广西建设工程质量监督网站青岛网站设计推广

dfddfdd 转载于:https://www.cnblogs.com/jiangfeilong/p/10432174.html

国外有哪些优秀的网站手表哪个网站最好

格式化硬盘意味着擦除硬盘上的任何信息和设置文件系统,以便操作系统可以从硬盘读取数据并将数据写入硬盘。如果你计划在Windows中使用硬盘,则需要格式化硬盘。 如何在Windows中格式化硬盘 按照以下简单步骤在Windows 11,Windows 10,Windows 8,Windows 7,Windows Vista或…