iot安全是早早就萌生了想法,奈何早之前当了咸鱼王,动手能力被摒弃。转行进入安全行业后,对安全技能的需求变成了刚需,不能再当咸鱼。趁着这边的项目延迟有大量的空闲时间,就在酒店开始了这一次的摄像头逆向之旅。这里非常感谢wmsuper这些年来的指点.本文主要目的是对摄像头固件进行修改进入uboot.用到设备如下:0、摄像头1、万能表.2、RT809F编程器3、电洛铁4、UsbToTTL
这块板子对新手极其友好,接口名称都还在,且经过万能表测试正确,只需要简单的接线即可。
Rx、Tx接口跟UsbToTtl的Rx、Tx对换连接。 设置对应的端口和波特率。 连接上电 发现按任意键都无法进入u-boot,能直接进入系统且没有密码。但是一直会有很多信息刷新,干扰正常输入输出。 没进入u-boot这可不行,上编程器!
通过芯片表面的信息,确定了这一小颗就是要动刀的。 由于针脚之间距离太近加上太久没用过电洛铁热风枪极其手生,所以二者不在考虑范围(在有一个就是针脚上都涂了一层透明的东西,在以前的印象中是需要洗板水清晰后才能拆)。最后,使用了小时候缝衣服的技术-穿线!一开始用铜线接完发现,不导电(可能涂有绝缘漆)。所以得把线拆了重新用别的线接,总共花费了两小时,加上酒店的灯光,眼睛都瞎了。最终的成品如下
连接编程器并上电 识别出5个型号,因为不知道具体型号,所以直接选了最后一个。点击读取,等待读取结束保存到本地后,固件提取就完毕了。 提取固件不需要解包,只需要找到u-boot的程序所在位置就好了。这里经过wmsuper的指点,知道了固件起始到0x31000是u-boot程序所在。ps:0x31000是因为在binwalk中识别出该地址为内核。将固件拉入ida 选择arm 小端,并设置加载大小为0x31000。 打算通过开始的提示字符串定位函数,但发现无法找到引用。应该是ImageBase需要修正。 寻找固件加载基址参考这个文章arm固件加载地址通过搜索jump table的方式找到如下跳转表 通过尝试,0x80E101D0-103B0=0x80DFFE20,而两值最后的差正好是20。所以猜测ImageBase为0x80DFFE00。通过测试,ImageBbase为正确,也定位到了关键函数 通过代码可以看到,uboot的等待时间由sub_80E17F64决定。最后修改保存该处。 将修改的固件重新写入 连接uart开始上电测试结果如下 可以看到,成功进入uboot模式。最后收拾残局
第一次整,除了用那个铜线没有测试导电就去使用之外非常顺利。对于这一次动手过程非常开心,这个便宜的摄像头对新手出其的有好。也非常感谢wmsuper这几年不耐烦的教导。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
电烙铁在芯片引脚两边来回加热取下,boot分区可以通过系统命令读写吧,不然怎么在线更新?
KooJiSung 电烙铁在芯片引脚两边来回加热取下,boot分区可以通过系统命令读写吧,不然怎么在线更新?
21Gun5 文章很不错,感谢分享,在这有点小疑问,判定加载基址时,为何基址不是0x80DFFE20,而要再减20呢(零加一yyds!)[em_13]
零加一 jumptables中每个地址长度是4,103D0-103B0=0x20/4=8。