hgamefinal-re-Blink-笔记(固件逆向)

这是一道固件逆向题,不过我也不知道是不是固件逆向题,我也不太懂固件是啥。但是可以知道的是这个是逆向一个跑在单片机或者是开发板上的一个程序。然后在电脑上编译出来的就是二进制文件。但似乎二进制文件不能往IDA上扔,只能先用hex2bin转成bin文件

hex2bin的程序网上下了几个都跑不来,还好学长给我了一份。

hex2bin-2.5下载

刚刚问了XiaoYao学长,hex和bin应该都是可以往单片机里面丢的?但是ide生成的是hex,所以一般都是直接丢hex文件,然后单片机会把它转换成bin文件,所以我们能从单片机里dump下来的是bin文件。

(感觉逆向是一个很迷的方向,因为这里的小方向太多太多了?可能是我没怎么接触别的。看到的逆向有最普通的C、C++的pe或是elf逆向,也有安卓逆向,webassembly逆向,固件逆向。。。感觉逆向注重的是思维,所以接下来这阵子在空的时候学学pwn吧)

打开题目

回到正题,转成bin文件之后可以在里面找到硬件信息,但是我并没有找到是什么cpu,还是XiaoYao学长帮了我。

前期知道这个之后就要去找datasheet,然后其实这个硬件和题目学习资料中的一样,datasheet也是一样的。https://gist.github.com/thecamper/18fa1453091be4c379aa12bcc92f91f0(链接里的datasheet只有32U4这一种cpu的,不要像我一样下下来直接把ida里的给替换了(;′⌒`),应该要放加在原来的文件后面。不过可能7.0本身就已经有32U4的datasheet了,我直接替换了所以我不知道,雾)

之后就要自己选择Processor type和cpu了,这里选32U4的时候标题是”Choose the device name”,难道是Leonardo开发板就是32U4的cpu?那样的话就说得通了。

这一步之后既可以正式进入Ida界面了,生看这些函数真是有些头大

对比,分辨函数

但是可以想到这些函数中的有些函数都是库函数,而且题目的hint也是这么说的,也就是说如果去下一个Arduino的IDE就可以自己编一个程序然后做对比,题目也说了可以直接编译示例程序中的Blink程序

然后其实我莽得一匹,我想把之前放出的学习资料中的Keyboard函数都编译一遍看看,但结果是悲伤的,直到学长告诉我跑偏了&我发现原来Keyboard也有一个示例程序

然后我发现Blink示例程序是有内容的

digitalWrite()的参数有LED…,HIGH,LOW,本能地让我想到高电平低电平以及LED灯的亮和灭

然后delay()函数是延迟的意思,延迟1000ms或者是保持状态1000ms?

把它编译然后转成bin文件放到ida里跟题目进行对比,很快就能找到主函数和上面这两个函数,rename之后就是这样(截了一小段)

把0x12c,0x38e这类的数字转成十进制就很好理解了,就是1000,2000,300。灯亮灭1000ms,2000ms。

得到 flag

把它们放到文本编辑器中批量修改一下

这样就很清楚了吧,灯亮灭,我想到的第一个就是编码,而且是摩斯电码。但是我很快就否定了自己

灯有亮灭两种,时长还有2000,1000,300三种,最后看起来有很多种对吧,傻了

这还能是啥啊。。。这就是摩斯电码啊,delay2000不会和light一起出现,它只会跟着delay出现,这个2000是停顿。。。然后灯亮有两种,1000ms和300ms,分别就是“-”和“.”呗,简单处理,得到摩斯电码

/-.../.-../../-./-.-/-.../.-../.----/-./-.-/-.../.-../../-./-.-/--/---/.-./..././--/-----/.-./..././--/---/.-./.../...--/
BLINKBL1NKBLINKMORSEM0RSEMORS3

得到flag

总结

这道题还是很有趣的,反正终于不是IDA F5了,笑哭。题目的难点在于打开题目,前面打开题目花了很久的时间,给自己涨了波知识,谢谢hgame出题的学长们

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒