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

基于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函数也找不到在哪,更别谈函数内的各种调用关系了。

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

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

相关推荐

  1. 基于stm32f103c8t6连接阿里云上传信息

    2024-07-16 20:58:03       55 阅读
  2. 基于STM32F103C8T6的小四轴无人机悬停代码

    2024-07-16 20:58:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 20:58:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 20:58:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 20:58:03       57 阅读
  4. Python语言-面向对象

    2024-07-16 20:58:03       68 阅读

热门阅读

  1. redis-缓存三剑客

    2024-07-16 20:58:03       15 阅读
  2. python爬虫豆瓣电影TOP250

    2024-07-16 20:58:03       19 阅读
  3. linux - shell - 单引号与双引号

    2024-07-16 20:58:03       16 阅读
  4. vue3+vite+ts+pinia+router4后台管理-动态路由生成

    2024-07-16 20:58:03       17 阅读
  5. 【数值计算】学习笔记

    2024-07-16 20:58:03       18 阅读
  6. Docker入门:从安装到实际应用

    2024-07-16 20:58:03       19 阅读
  7. MetaGPT和LangGraph对比

    2024-07-16 20:58:03       19 阅读