【学习笔记】ESP8266/ESP32芯片与Lua脚本

最新想了想,关于漏洞和逆向工程的某些资料还不便公开(因为论文在投稿中),所以现在看看新的东西,翻到之前逆向固件时候的遗留问题ESP8266,正好这最近也没有更新,就边学习边记录,想到哪里讲哪里。

0x00 我为什么讨厌ESP8266

在逆向轻量级物联网设备固件的时候,最喜欢的就是遇到ARM架构固件,一个是指令集比较熟悉、资料多,而且加载起来真的还是蛮方便的,IDA支持也不错。最最最头疼的莫过于ESP8266或者说乐鑫公司生产的芯片,原因主要有:

  • 加载格式不确定:ESP芯片的固件是使用一个软件生成的,而且从开发软件中看不出生成的规则,目前不知道固件的分区表和加载地址;
  • 指令集奇怪:ESP芯片是xtensa架构,指令集也是自己制造的指令集,虽然github上面有IDA的插件,能够将其正确反编译,可这看起来确实挺头疼;
  • Lua脚本:某些ESP芯片的设备主控逻辑是放在lua脚本里面的,固件里面放的就是个lua脚本解释器;
  • 没有JTAG接口:想动态调试固件都不行,好在有串口可以通信,有的支持AT指令,这个倒还是不错的。

根据defcon 26上面的演讲(需科学上网),乐鑫芯片的设备固件很容易替换(因为有串口)。静态分析和逆向确实需要吃苦头,不过如果要是只想攻击这个设备的话,到还是蛮不错的。下面我想说说lua脚本和设备之间的关系。

0x01 Lua和物联网设备

这里有一个nodemcu的设备固件,是一个开源的lua脚本解释器,基于乐鑫non-os sdk esp8266开发、这个固件为我们提供了执行lua脚本的环境,里面并没有任何的功能代码,功能代码都使用lua脚本进行开发。这样做的好处就是,开发比较快捷,更新迅速(只需要替换脚本),而且价格低廉。

这里有个简单地教程

0x02 关于逆向

如果esp的芯片采用lua脚本承载其核心逻辑,我们只需要截取其lua脚本就可以获取其逻辑。当然,我们依旧需要其固件,毕竟lua脚本是可以混淆的,这是我的一个想法,有待验证。而且我最近看到了一个arm编写的lua脚本解释器,跑的是freertos系统,究竟是固件功能为主还是lua脚本为主,目前还在研究中。

你可能感兴趣的:(物联网,逆向)