博文

逆向分析part3- 格式转化

  格式转化 在进行MCU逆向分析时,常见的固件格式如下: BIN HEX Motolar 我们在逆向分析时,常用的格式为BIN格式,所以,我们这里讲解一下HEX,Motolar等格式到BIN格式的转换。 0x01、工具 [ ] srecord( http://srecord.sourceforge.net/) [ ] bincopy( https://github.com/eerimoq/bincopy) 0x02、Bincopy格式转换 SREC文件转换为HEX格式 $ bincopy convert -i srec -o ihex 142_C0_040c_01_PenTest.CAL - > 142_CAL.hex SREC文件转换为BIN格式 $ bincopy convert -i srec -o binary 142_C0_040c_01_PenTest.ULP - > 142_ULP.bin HEX文件转换为BIN格式 $ bincopy convert -i ihex -o binary 142_CAL.hex - > 142_CAL.bin

逆向分析part2-MCU逆向

图片
 这里主要介绍MCU逆向分析过程中如何恢复更多的代码,以加快逆向分析的进度和相关代码的准确性 一、前言 在逆向分析MCU固件时,我们获得是MCU芯片中运行的真个固件。MCU的固件其压缩效率是十分恐怖的,可能几兆的固件,它的代码量可能就有百万行,而其中用户自定义进行编写的代码可能仅有几千行,所以,我们还原MCU正向开发过程中的SDK的函数是十分重要的,只有这样我们才能更快的找到用户自己编写的代码。 二、环境准备 在我们逆向分析前,我们需要准备的环境如下: MCU固件(这里使用的是本人正向开发的STM32固件) IDA/Ghidra逆向分析工具 IDA/Ghidra相关的插件 三、逆向分析 这里我们重点介绍如何还原MCU的代码以及最为重要的符号表,但是不可能100%还原和原代码一致的内容。 0x01.IDA逆向分析STM32固件 这里我们有两个固件, .axf 的固件为ELF格式带有符号表的固件, .bin 的固件为不带有符号表的固件,同时也是我们平时遇到的最多的固件。 我们首先使用IDA载入 demo3.axf 带有符号表的固件。 这里可以看到IDA将其直接识别为ELF结构的文件,使用默认的选项即可。 我们可以清晰的看到所有的符号表,这对于逆向分析是最美好的状态,因为通过符号表我们能很快的分析出程序执行的逻辑及功能。但是我们在进行相关的安全研究下是很难获得这种ELF格式的MCU固件的,这种只适用在正向开发过程中进行灰盒测试使用。 接下来,我们看看我们平时获得最多类型的.bin格式的固件,这种固件符号表已经被去除,同时也不是ELF结构的固件了,那么对于这种固件我们如何进行分析呢? 使用file简单查看下demo333.bin固件 发现是data数据。对于这个固件是哪种架构的可以参照对应的芯片手册来确实,因为这个是STM32的固件,因此,可以确定为ARM32架构的。接下来,我们可以使用IDA 32加载固件 这里IDA将其识别为binary文件,我们重新指定芯片类型为ARM小端 接下来,我们指定一下ARM对应的具体架构 接下来,我们需要设置对应的ROM和RAM起始地址,对于这些起始地址,我们一般有以下几种途径获取: 通过芯片手册获取 通过开发项目的参数配置获取 对于摩托罗拉类型的固件,其文件的起始...

逆向分析part1-信息收集

 信息收集用于辅助固件的逆向分析 一、strings — 字符串检索 【Linux系统自带命令】strings:在对象文件或二进制文件中查找可打印的字符串!!! $ strings -h Usage: strings [option(s)] [file(s)] Display printable strings in [file(s)] (stdin by default) The options are: -a - --all Scan the entire file, not just the data section [default] -d --data Only scan the data sections in the file -f --print-file-name Print the name of the file before each string -n --bytes=[number] Locate & print any NUL-terminated sequence of at -<number> least [number] characters (default 4). -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16 -w --include-all-whitespace Include all whitespace as valid string characters -o An alias for --radix=o -T --target=<BFDNAME> Specify the binary file format -e --encoding={s,S,b,l,B,L} Select character size and endianness: s = 7-bit, S = 8-bit, {b,l...

TenTrix