近来好玩逆向工程鬼子某早期固件的代码

feiy
万事皆相通 2020-11-28 字数 926

我们知道,早期的一些处理器是没有固件锁读功能的(即使有,也可以读取出来进行逆

向),甚至好多的ROM还都在片部;而且,早期的芯片经过一段时间后,其指令格式也基

本都能公开。

所以,纯属好玩,从业界最适合学习和模仿的TI方案入手,进行逆向工程,结果发现学

习到了反逆向工程(增加逆向工程难度)的思路。一些思路虽然很直观简单,但是回味

一下,觉得也挺好玩的。

例如,TI里的某款早期芯片的固件里,就包含着大量的寄存器隐藏机制。打个比方,假

设我们要访问某个寄存器,其地址是0x1234,类汇编的代码一般都是直接的 ldr reg_a

, 0x1234。但是TI它的做法却是,先去找一个ROM存储区,取出其中的数值(到这已步骤

还没啥,许多编译器也都会自动做到这一点),而这个数值并不是0x1234,而是某个不

那么直观的中间数字,经过一系列转化后,才可以得到0x1234。所以,如果不是非常小

心的耐心分析,根本想不到这里是在操作寄存器0x1234,也就是说,即使你拿到了寄存

器手册,想逆向也需要一番功夫。

此外,TI早期芯片里的固件里的反逆向工程,还有好多技巧,上述只是最最基本的一个

增加逆向难度的技巧而已。

Embedded 嵌入式系统
6 个回复
feiy
万事皆相通 2020-11-28

对比一下国内某些芯片厂家的固件及其开发产品,用最最简单地反汇编工具自动化跑一

遍,好多东西就都一目了然,基本不需要多少分析。可见,国内的反逆向工程的考虑,

值得引起足够的重视(当然,可能国内目前都在乎的是赚快钱,快速更新,不怕被抄袭

或者普遍对盗版无可奈何吧)

【 在 feiy (万事皆相通) 的大作中提到: 】

: 我们知道,早期的一些处理器是没有固件锁读功能的(即使有,也可以读取出来进行逆

: 向),甚至好多的ROM还都在片部;而且,早期的芯片经过一段时间后,其指令格式也基

: 本都能公开。

: ...................

Multimeter
无昵称 2020-11-28

这得看从头开发的难度吧?

【 在 feiy () 的大作中提到: 】

: 对比一下国内某些芯片厂家的固件及其开发产品,用最最简单地反汇编工具自动化跑一

: 遍,好多东西就都一目了然,基本不需要多少分析。可见,国内的反逆向工程的考虑,

: 值得引起足够的重视(当然,可能国内目前都在乎的是赚快钱,快速更新,不怕被抄袭

: 或者普遍对盗版无可奈何吧)

Rome888
寻秦 2020-11-28

当前国内芯片厂商的精力并不在这,不过将来一定会向这个方向发展

你可以先玩,过几年应该有些机会的

【 在 feiy 的大作中提到: 】

: 对比一下国内某些芯片厂家的固件及其开发产品,用最最简单地反汇编工具自动化跑一

: 遍,好多东西就都一目了然,基本不需要多少分析。可见,国内的反逆向工程的考虑,

: 值得引起足够的重视(当然,可能国内目前都在乎的是赚快钱,快速更新,不怕被抄袭

: ...................

intron
内含子 2020-11-28

你说的这种寻址可能是在 C 语言里用宏来实现的。

【 在 feiy (万事皆相通) 的大作中提到: 】

: 标  题: 近来好玩逆向工程鬼子某早期固件的代码

: 发信站: 水木社区 (Sat Nov 28 10:22:07 2020), 站内

: 我们知道,早期的一些处理器是没有固件锁读功能的(即使有,也可以读取出来进行逆

: 向),甚至好多的ROM还都在片部;而且,早期的芯片经过一段时间后,其指令格式也基

: 本都能公开。

: 所以,纯属好玩,从业界最适合学习和模仿的TI方案入手,进行逆向工程,结果发现学

: 习到了反逆向工程(增加逆向工程难度)的思路。一些思路虽然很直观简单,但是回味

: 一下,觉得也挺好玩的。

: 例如,TI里的某款早期芯片的固件里,就包含着大量的寄存器隐藏机制。打个比方,假

: 设我们要访问某个寄存器,其地址是0x1234,类汇编的代码一般都是直接的 ldr reg_a

: , 0x1234。但是TI它的做法却是,先去找一个ROM存储区,取出其中的数值(到这已步骤

: 还没啥,许多编译器也都会自动做到这一点),而这个数值并不是0x1234,而是某个不

: 那么直观的中间数字,经过一系列转化后,才可以得到0x1234。所以,如果不是非常小

: 心的耐心分析,根本想不到这里是在操作寄存器0x1234,也就是说,即使你拿到了寄存

: 器手册,想逆向也需要一番功夫。

: 此外,TI早期芯片里的固件里的反逆向工程,还有好多技巧,上述只是最最基本的一个

: 增加逆向难度的技巧而已。

: --

eggcar
eggcar 2020-11-29

re,很正常的一个隐藏uuid寄存器地址的方法

而且只要芯片没有禁止调试,只需要在uuid寄存器的地址上 下一个访问断点就能抓到访问点 根本不需要读懂这一堆“骚操作”

【 在 intron 的大作中提到: 】

: 你说的这种寻址可能是在 C 语言里用宏来实现的。

teleheart
teleheart 2020-12-11

这个寄存器操作也不一定是防逆向用的,很多地方是用一个寄存器共同的基地址加上具体寄存器的偏移量来算出实际地址,这些偏移量是预存在一个表里的。

【 在 feiy 的大作中提到: 】

: 我们知道,早期的一些处理器是没有固件锁读功能的(即使有,也可以读取出来进行逆

: 向),甚至好多的ROM还都在片部;而且,早期的芯片经过一段时间后,其指令格式也基

: 本都能公开。

: ...................