不幸的是,当我尝试浏览固件文件时,无法理解它-我尝试在似乎包含代码的部分上运行一些Thumb反汇编程序(以及自己动手学习有关Thumb的更多信息)(在hexdump检查中),但是它们都来了据我所知,几乎没有垃圾指令-肯定没有功能序言/结尾,到处都是疯狂的即时消息,以及大量的班次和LDM。
一些技术有关键盘内部硬件的信息:它是围绕Nuvoton NUC122SC1AN构建的,它具有Cortex-M0 CPU。有问题的固件文件在此论坛帖子的附件中提供(由键盘制造商提供)。
但是,我发现位于
$ffff_fff00
00
处的中断表-其长度与该长度完全匹配在ARM网站上记录的一个,包括IRQ 0..31。但是,这里的另一个奇怪之处是它们都指向高内存中的中断-q4312079q等。该区域未包含在NUC122的内存映射中,ARM的规范将其指定为“保留”,但我猜测它可能已映射到某些内部存储器,其中包含接收芯片闪烁代码等。则中断蹦床到用户(固件)代码,或者表被固件提供的中断处理程序覆盖。无论如何,一旦我有一些代码要看,我也许就能弄清楚。我尝试了binwalking文件,对所有文件来说都是空的。 >
明确地说,我在这里要寻找的是关于在上述固件文件之一中找到实际可执行代码的指南(由制造商本身提供,因此此处不应有任何法律问题),因为我真的不明白。我要补充一点,我对倒车世界还比较陌生。谢谢!
#1 楼
我下载了您参考的档案,我注意到的第一件事是固件文件在0x80-0xff范围内非常繁重。反转每个字节会导致更好的字节分配,并且看起来它具有某种结构,但仍然不太正确。我认为,由于它们尽可能地反转了字节,因此它们可能已经进行了一些位操作,例如XOR。看起来好像有偏移量的标头或其他内容,但没有任何意义。在文件中进一步滚动,围绕字节35000,似乎有一个结构化数据块,然后是一个0xff块,然后是一个16字节的“页脚”:br />前8个字节看起来像是一个不错的起点。通过一些常见的XOR策略不会产生任何结果。然后我注意到这些字节的低半字节为3、4或5,这会将它们置于可打印的ASCII范围内。因此,将每个字节的半字节交换(又向左旋转4位)...:
003F1F0: 84 95 74 64 B4 63 13 14 00 00 00 00 3C DC C5 6C ..td.c......<...
宾果!由于固件更新程序窗口的标题为“ HY USB Firmware Downloader”,因此我认为这是一个赢家。将生成的文件加载到IDA,Cortex M-0 Thumb 2设置中,当然,我们有从偏移量0x0120开始的有效代码和从偏移量0x32121开始的ASCII字符串块。通过将每个字节处理为:
003F1F0: 48 59 47 46 4B 36 31 41 00 00 00 00 C3 CD 5C C6 HYGFK61A........
评论
哦!这说明了一切。我注意到在填充空字节之后的页脚,但已将其注销为“目前对我来说不重要”-老兄,我错了。顺便说一句,不同的固件之间的最后四个字节有所不同,所以我猜它们是某种形式的校验和。无论如何,非常感谢,我应该可以从这里继续进行。
– FireFly
2014年7月28日在20:07
评论
对于ARM拇指代码,我希望看到0xb510或0xb5f0代码序列(``push''),但在bin文件中根本看不到代码序列。嗯好吧,应该是Thumb,因为Cortex-M0仅支持Thumb +一些Thumb-2指令,并且PCB上的这张照片清楚地表明它带有NUC122。也许它被压缩了吗?尽管分布(从手动检查到一些幼稚的分析)看起来并不像压缩数据。是否有用于通过字节分布识别文件类型/数据类型的工具?
您在反转扑克固件方面取得了一些进展吗?我打算用可编程控制器替换扑克ii的PCB,但是如果您成功构建了自定义固件,我可能会保留原始PCB。
@mr_peck对不起,我暂时将其暂停。.我还没有决定是否继续进行,我的其他一些项目引起了我的注意。仅Windows的闪光器也让我感到有些复杂...