基于mcu固件反汇编逆向入门示例-stm32c8t6平台

news2024/9/23 11:18:35

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

本文目标:基于mcu固件反汇编逆向入门示例-stm32c8t6平台

按照本文的描述,应该可以在对应的硬件上通实验并举一反三。

先决条件:拥有C语言基础,集成的开发环境,比如:IDA 7.0

前言

机缘巧合之下,有使用固件反汇编的经历,所以写下此文用作学习笔记。

使用场景

嵌入式固件逆向的场景中会使用到,具体是获得产品固件的文件内容,进行反编译,从而继续研究和验证,获取产品的开发思路。在网络上下载IDA 7.0,进行安装。

在这里插入图片描述

新建工程

第一步:双击32bit的ida,选择new

在这里插入图片描述

第二步:找到需要进行分析的文件,最好是分析hex文件,找个工具把bin文件转成hex文件好一些,打开,选择小端模式(stm32是小端)分析

在这里插入图片描述

第三步:参考如下的配置进行配置工程

在这里插入图片描述

工程出来后,会在左边的窗口发现很多地址,这些地址就是函数,逆向工程的活就是分析这些函数是做啥的,理解函数的意图

在这里插入图片描述

函数分析

双击左边栏的一些函数可以看到详情,随便找个地址来进行分析一下,鼠标放在我下图的黄色函数地址上

在这里插入图片描述

按Ctrl + x,可以列出这个函数的调用,函数涉及地方。

在这里插入图片描述

在这个函数中按F5,会跳转到对应的伪c代码窗口

在这里插入图片描述

然后就是分析代码片段的意图了,经过现在的ai加持,已经能初步进行分析了。

// 原始代码
int __fastcall sub_8004770(int a1, int a2)
{
  char v2; // 用来累加字节值的变量
  int v3;  // 当前处理的字节偏移量
  int v4;  // 需要处理的字节数
  int v5;  // 当前处理的字节在内存中的地址

  v2 = 0;  // 初始化累加变量
  v3 = 0;  // 初始化偏移量
  v4 = a2 - 2; // 计算需要处理的字节数
  while (v3 < v4)
  {
    // 计算当前字节的地址
    v5 = a1 + v3;
    // 更新偏移量
    v3 = (unsigned __int16)(v3 + 1);
    // 累加当前字节的值
    v2 += *(_BYTE *)(v5 + 1);
  }
  // 返回累加结果经过计算后的值
  return (unsigned __int8)(-85 - v2);
}

// 更容易理解的版本
int calculate_sum_and_offset(int base_address, int length)
{
  char sum = 0; // 累加器,初始值为0
  int offset = 0; // 偏移量,初始值为0
  int target_length = length - 2; // 需要处理的字节数

  // 遍历并累加从base_address开始的每个字节的值
  while (offset < target_length)
  {
    sum += *(char *)(base_address + offset + 1); // 累加字节值
    offset++; // 更新偏移量
  }

  // 返回计算结果
  return (unsigned char)(-85 - sum);
}

经过耐心的分析之后,就可以分析出这个代码片段的意图是求一个校验和的功能。

总结

逆向分析相比于正向开发难度不是一个水平的,市场上有一些人专门从事逆向开发的工作,而且逆向开发需要懂汇编,不然逆向出来都是汇编代码,看不懂就没法还原代码了。逆向的人懂正向开发,正向开发的人不一定懂逆向开发,只有产品的价值性很高时才可能进行逆向开发,不然没必要逆向。毕竟逆向开发可能连固件都获取不到,main函数也找不到在哪,更别谈函数内的各种调用关系了。

笔者在逆向方面也只是小白,只能做到抛砖引玉。更多深层次的东西还需要静下心来研究。

本文完!!感谢阅读,感谢关注。

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

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

相关文章

卫星降雨量数据下载及生成栅格分布图(CMORPH)

一、 降雨 nc 数据下载 1. 登录网址&#xff08;截至到20240712仅有2024年1月的降雨量&#xff09;https://www.ncei.noaa.gov/products/climate-data-records/precipitation-cmorph 2. 选择对应时间分辨率 8km8km (30 min), 0.250.25 (hourly, daily)&#xff08;覆盖全球60…

ZStack Cloud 5.1.8正式发布

2024年7月5日&#xff0c;ZStack Cloud正式发布最新版本——ZStack Cloud 5.1.8&#xff0c;涵盖一系列重要功能&#xff0c;以下为您进行详细介绍。 亮点速览 GPU运维管理增强&#xff1a;新增GPU设备统一管理界面&#xff1b;支持GPU工作状态和实时负载监控报警三层网络运维…

校园工会体育报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;赛事公告管理&#xff0c;球员管理&#xff0c;球队信息管理&#xff0c;比赛信息&#xff0c;比赛报名管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;比赛信息&#xff0c;比赛报名&#…

Linux多线程编程-哲学家就餐问题详解与实现(C语言)

在哲学家就餐问题中&#xff0c;假设有五位哲学家围坐在圆桌前&#xff0c;每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源&#xff0c;但进餐需要使用两根筷子&#xff08;左右两侧各一根&#xff09;。筷子是共享资源&#xff0c;哲学家们在进行进餐时需要…

Linux 网络配置与连接

一、网络配置 1.1 ifconfig 网卡配置查询 ifconfig #查看所有启动的网络接口信息 ifconfig 指定的网卡 #查看指定网络接口信息 1.2 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33网络配置文…

【ASTGCN】模型调试学习笔记--数据生成详解(超详细)

利用滑动窗口生成时间序列 原理图示&#xff1a; 以PEMS04数据集为例。 该数据集维度为&#xff1a;(16992,307,3)&#xff0c;16992表示时间序列的长度&#xff0c;307为探测器个数&#xff0c;即图的顶点个数&#xff0c;3为特征数&#xff0c;即流量&#xff0c;速度、平…

车间数据采集网关的工作原理和应用场景-天拓四方

在智能制造日益盛行的今天&#xff0c;车间数据采集作为整个生产流程中的关键环节&#xff0c;其重要性愈发凸显。数据采集网关作为这一环节的核心设备&#xff0c;扮演着承上启下的重要角色。本文旨在深入探讨车间数据采集网关的工作原理和应用场景。 一、数据采集网关的工作…

C++:链表插入排序/删除重复节点题解

插入排序 插入排序的思路很简单&#xff0c;基本都知道。 关键是放在链表中&#xff0c; 1.要建立一个哨兵位&#xff0c;这个哨兵位的下一个节点&#xff0c;始终指向val最小的节点。 2.prev指针作为cur的前一个节点&#xff0c;始终指向val最大的节点。它的下一个节点始终…

玩转HarmonyOS NEXT之IM应用首页布局

本文从目前流行的垂类市场中&#xff0c;选择即时通讯应用作为典型案例详细介绍HarmonyOS NEXT的各类布局在实际开发中的综合应用。即时通讯应用的核心功能为用户交互&#xff0c;主要包含对话聊天、通讯录&#xff0c;社交圈等交互功能。 应用首页 创建一个包含一列的栅格布…

Eureka——Spring Cloud中的服务注册与发现组件

目录 1. 前言2. Eureka的概述2.1 Eureka的核心功能2.2 Eureka的角色与特点2.3 Eureka的使用优势 3. 创建 Spring Cloud 的注册中心3.1 创建一个父项目3.2 创建Spring Cloud的注册中心Eureka 4. 创建服务提供者5. 创建一个消费者Consumer&#xff0c;调用服务提供者Provider 1. …

利用OSMnx进行城市路网数据的速度与通行时间推算及分析

本文还是以广州市路网为例&#xff0c;通过osmmx调用ox.add_edge_speeds(G)时&#xff0c;该函数会遍历图G 中的每条边&#xff08;即每条街道&#xff09;&#xff0c;并基于一些预设的规则或街道属性&#xff08;如街道类型、是否为主要道路、是否有速度限制等&#xff09;来…

netdata 监控软件安装与学习

netdata官网 netdata操作文档 前言&#xff1a; netdata是一款监控软件&#xff0c;可以监控多台主机也可以监控单台主机&#xff0c;监控单台主机时&#xff0c;开箱即用&#xff0c;web ui很棒。 环境&#xff1a; [root192 ~]# cat /etc/system-release CentOS Linux rel…

【qt】正则表达式来判断是否为邮箱登录

正则表达式是用来匹配字符串的神器. 在Qt中我们需要使用到QRegExp这个类 用exactMatch来进行匹配. [] 使用方括号 [] 来定义字符类&#xff0c;表示匹配方括号内的任意一个字符 A-Za-z0-9是字符的匹配范围. 是用于指定字符或字符类出现的次数,常见的如下 *&#xff08;匹配 0…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

pico+unity3d手部动画

在 Unity 开发中&#xff0c;输入系统的选择和运用对于实现丰富的交互体验至关重要。本文将深入探讨 Unity 中的 Input System 和 XR Input Subsystem 这两种不同的输入系统&#xff0c;并详细介绍它们在控制手部动画方面的应用。 一、Input System 和 XR Input Subsystem 的区…

有关电力电子技术的一些相关仿真和分析:⑤交-直-交全桥逆变+全波整流结构电路(MATLAB/Siumlink仿真)

全桥逆变+全波整流结构 参数:Vin=500V, Vo=200V, T=2:1:1, RL=10Ω, fs=100kHz, L=1mH, C=100uF (1)给定输入电压,输出电压和主电路参数,仿真研究电路工作原理,分析工作时序; (2)调节负载电阻,实现电流连续和断续,并仿真验证; (3)调节占空比,分析占空比与电…

【2024开发插件大赛】如何为 ONLYOFFICE 开发插件

我们发布了 2024 插件开发大赛&#xff1a;为 ONLYOFFICE 开发适合中国用户的插件&#xff0c;获得福利与证书。如果您想要参加&#xff0c;阅读本文了解如何为 ONLYOFFICE 开发插件。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目&#xff0c;由领先的 IT 公司 Ascensio Sy…

Microsoft Edge(简称Edge)

Microsoft Edge&#xff08;简称Edge&#xff09;是一款由微软开发的网页浏览器&#xff0c;它为用户提供了许多便捷的功能和选项。以下是Edge浏览器的使用方法&#xff1a; 一、基本使用方法 打开Edge浏览器&#xff1a; 可以在Windows的开始菜单中找到“Microsoft Edge”并点…

Flink Window 窗口【更新中】

Flink Window 窗口 在Flink流式计算中&#xff0c;最重要的转换就是窗口转换Window&#xff0c;在DataStream转换图中&#xff0c;可以发现处处都可以对DataStream进行窗口Window计算。 窗口&#xff08;window&#xff09;就是从 Streaming 到 Batch 的一个桥梁。窗口将无界流…

【数据结构取经之路】二叉搜索树的实现

目录 前言 二叉搜索树 概念 性质 二叉搜索树的实现 结点的定义 插入 查找 删除 二叉搜索树完整代码 前言 首先&#xff0c;二叉搜索树是一种数据结构&#xff0c;了解二叉搜素树有助于理解map和set的特性。 二叉搜索树 概念 二叉搜索树又称二叉排序树&#xff0c…