基于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; // 累加器,初始值為0int offset = 0; // 偏移量,初始值為0int 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.pswp.cn/web/45786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES6及ESNext規范

1、let 和 const 而let引入了塊級作用域的概念, 創建setTimeout函數時&#xff0c;變量i在作用域內。對于循環的每個迭代&#xff0c;引用的i是i的不同實例。 暫時性死區&#xff1a;不允許變量提升 const就很簡單了, 在let的基礎上, 不可被修改 js 代碼解讀 for(var i0;i<…

《背包亂斗》為什么好玩 蘋果電腦怎么玩《背包亂斗》游戲 mac怎么玩steam windows游戲

在當今競爭激烈的游戲市場中&#xff0c;《背包亂斗》以其獨特的魅力在眾多作品中脫穎而出&#xff0c;吸引了大量玩家的關注和喜愛。其創新的游戲機制和不斷迭代的內容&#xff0c;加之出色的視覺效果和社區建設&#xff0c;使其成為了游戲界的一股清流。 一、《背包亂斗》為…

Hadoop學習記錄一

HDFS&#xff08;Hadoop Distributed File System&#xff09;是Hadoop項目的一部分&#xff0c;用于存儲海量數據。HDFS設計為可以在廉價硬件上運行&#xff0c;同時提供高容錯性。HDFS主要由三個關鍵角色組成&#xff1a;NameNode、DataNode和SecondaryNameNode。下面我用大白…

《絕區零》是一款什么類型的游戲,Mac電腦怎么玩《絕區零》蘋果電腦玩游戲怎么樣

米哈游的《絕區零》最近在網上爆火呀&#xff0c;不過很多人都想知道mac電腦能不能玩《絕區零》&#xff0c;今天麥麥就給大家介紹一下《絕區零》是一款什么樣的游戲&#xff0c;Mac電腦怎么玩《絕區零》。 一、《絕區零》是一款什么樣的游戲 《絕區零》是由上海米哈游自主研發…

Web前端-Web開發HTML基礎1-input

一. 基礎 1. 寫一個輸入框代碼&#xff0c;類型為密碼&#xff1b; 2. 寫一個輸入框代碼&#xff0c;類型為密碼&#xff1b; 3. 寫一個輸入框代碼&#xff0c;類型為密碼&#xff0c;名稱為"password"&#xff1b; 4. 寫一個輸入框代碼&#xff0c;類型為密碼&#…

ES快速開發,ElasticsearchRestTemplate基本使用以及ELK快速部署

最近博主有一些elasticsearch的工作&#xff0c;所以更新的慢了些&#xff0c;現在就教大家快速入門&#xff0c;并對一些基本的查詢、更新需求做一下示例&#xff0c;廢話不多說開始&#xff1a; 1. ES快速上手 es下載&#xff1a;[https://elasticsearch.cn/download/]()這…

Spring Boot集成Activity7實現簡單的審批流

由于客戶對于系統里的一些新增數據&#xff0c;例如照片墻、照片等&#xff0c;想實現上級逐級審批通過才可見的效果&#xff0c;于是引入了Acitivity7工作流技術來實現&#xff0c;本文是對實現過程的介紹講解&#xff0c;由于我是中途交接前同事的這塊需求&#xff0c;所以具…

uniapp開發釘釘小程序流程

下載開發工具 1、小程序開發工具 登錄釘釘開發平臺&#xff0c;根據自己的需求下載合適的版本&#xff0c;我這里下載的是Windows &#xff08;64位&#xff09;版本 小程序開發工具 - 釘釘開放平臺 2、HBuilder X HBuilderX-高效極客技巧 新建項目及相關配置 新建項目 …

Llama - Prompting

本文翻譯整理自&#xff1a;Prompting https://llama.meta.com/docs/how-to-guides/prompting/ 文章目錄 制作有效的提示明確說明風格化格式化限制 提示使用 Zero- and Few-Shot 學習Zero-Shot PromptingFew-Shot Prompting 基于角色的提示思維鏈技術Self-Consistency檢索-增強…

單臂路由組網實驗,單臂路由的定義、適用情況、作用

一、定義 單臂路由是指通過在路由器的一個接口上配置許多子接口,從而實現原來相互隔離的不同VLAN之間的互通。 子接口:把路由器上的實際的物理接口劃分為多個邏輯上的接口,這些被劃分的邏輯接口就是子接口。 二、適用情況 用在沒有三層交換機,卻要實現不同VLAN之間的互…

Github07-16 Python開源項目日報 Top10

根據Github Trendings的統計,今日(2024-07-16統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目10C++項目1AutoGPT: 人工智能革命的先鋒 創建周期:486 天開發語言:Python協議類型:MIT LicenseStar數量:164105 個Fork數量:435…

axios 下載大文件時,展示下載進度的組件封裝——js技能提升

之前面試的時候&#xff0c;有遇到一個問題&#xff1a;就是下載大文件的時候&#xff0c;如何得知下載進度&#xff0c;當時的回復是沒有處理過。。。 現在想到了。axios中本身就有一個下載進度的方法&#xff0c;可以直接拿來使用。 下面記錄一下處理步驟&#xff1a; 參考…

深度學習 | CNN 基本原理

目錄 1?什么是 CNN2?輸入層3?卷積層3.1?卷積操作3.2?Padding 零填充3.3?處理彩色圖像 4?池化層4.1?池化操作4.2?池化的平移不變性 5?全連接層6?輸出層 前言 這篇博客不夠詳細&#xff0c;因為沒有介紹卷積操作的具體計算&#xff1b;但是它介紹了 CNN 各層次的功能…

golang AST語法樹解析

1. 源碼示例 package mainimport ("context" )// Foo 結構體 type Foo struct {i int }// Bar 接口 type Bar interface {Do(ctx context.Context) error }// main方法 func main() {a : 1 }2. Golang中的AST golang官方提供的幾個包&#xff0c;可以幫助我們進行A…

[雜談] 關于 Mac 電腦使用 Logitech 鼠標導致 Vscode 側鍵無法進行代碼前進、回退的問題

我個人使用的是一臺 14 寸的 Mac_Apple_M1&#xff0c;外接鍵盤顯示器羅技的 MX Master 3 for Mac 的鼠標。 之前一直使用的 GoLand 開發&#xff0c;查看代碼時進行代碼跳轉就很方便&#xff0c;滾輪鍵 進入函數方法&#xff0c;鼠標側鍵進行前進、后退。看代碼完全可以右手單…

【大模型入門】LLM-AI大模型介紹

大語言模型 (LLM) 背景 &#x1f379;大語言模型 (Large Language Model) 是一種人工智能模型, 它們通常包含數千億甚至更多的參數&#xff0c;并在大規模數據集上進行訓練。大語言模型可以處理多種自然語言任務&#xff0c;如文本分類、問答、翻譯、對話等等。 自然語言模型…

qt explicit 啥意思

explicit 在 Qt 和 C 中是一個關鍵字&#xff0c;主要用于修飾類的構造函數。其含義和用法可以歸納為以下幾點&#xff1a; 意義&#xff1a; explicit 英文直譯為“明確的”、“顯式的”。在 C 中&#xff0c;當一個構造函數只接受一個參數時&#xff0c;它可能會被編譯器用于…

【Nail it】ROS1 ROS2 通信(ros2/ros1_bridge)

情況說明&#xff1a;目標是實現ros2容器和ros1主機的通信&#xff0c;可以起一個ros1容器作為橋梁&#xff08;若是在一個主機同時包含ros1&ros2&#xff0c;配置更加方便&#xff09;. 1.起一個 noetic 的容器 docker run -it --network host --name my_bridge ros:noe…

Java中的成員內部類

Java中的成員內部類&#xff08;也稱為非靜態內部類&#xff09;是定義在另一個類&#xff08;外部類&#xff09;內部的類。 這種內部類與它的外部類之間有著緊密的聯系&#xff0c;主要體現在幾個方面&#xff1a;它可以訪問外部類的所有成員&#xff08;包括私有成員&#…

C++小白Python選手2小時入門C++

學習鏈接&#xff1a;C入門/2小時從C到C快速入門&#xff08;2018&#xff0c;C教程&#xff09; C在C語言的基礎上增加了面向對象和通用算法語言特征。 C頭文件不必是.h結尾&#xff0c;C頭文件舉例&#xff1a;cmath、cstdio注釋&#xff1a;單行//、多行/**/為了防止名字沖…