0x00 前言
由于近日疫情比较严重,所以还是少出门,少聚集,多看书,多学习。今天来记录一下reverse2的解题过程。
0x01 正题
首先,拿到题目后,还是要用PE软件查一下软件的基本情况。
根据PE信息可以看到,该软件是用ELF写的,64位文件。
因此,采用IDA 64打开。
通过IDA生成的流程图可以找到关键字:FLAG。(依然觉得IDA很强大。)
找到关键字之后用F5查看伪代码。
通过按“R键”可知:105 = 'i'; 114 = 'r'; 49 = '1'。分析第25-26行,比较flag与s2的字符串,才能得到“this is thw right flag!”。那么问题来了,Flag是什么???
重新回到流程图。
观察右侧流程发现flag被放入了eax寄存器中,于是双击进去观察一下。
现在可以看到flag有一部分是“hacking_for_fun}”,为什么说是一部分呢?因为题目中说flag的格式应该是“flag{}”,因此合理推断,flag至少应该是“flag{hacking_for_fun}”,再次使用“R键”可知,78h = {;
然后就可以美滋滋的提交flag了。
氮素!BUU说这个flag是错的!!!!!
于是我又往上看了一下,原来是flag中的“i”和“r”被替换成了“1”,那么最终的flag就是:flag{hack1ng_fo1_fun}。
0x02 总结
最近在补汇编的知识,不求自己能用汇编去编程,但是最起码也得能看懂,不然老用F5多掉价嘛。像大佬们直接看汇编代码就能知道软件是怎样运行的,不由得从心里敬佩。拿本题来讲,如果不懂点汇编,可能看到 movzx eax, flag[rax] 时,也就不会注意到这个点。所以打好基础是十分必要的,虽然汇编看起来就挺难的,但是真正去了解的时候发现还是很有趣,而且对计算机的内部也更加了解,增加了日常探(吹)讨(牛)的素材,收获一批崇拜的目光。
扯皮归扯皮,但是技术增涨总归是一件开心的事情,希望日后能更进一步,追上大佬们的脚步。
本文转载自: https://blog.csdn.net/weixin_44573809/article/details/128330058
版权归原作者 Sombra_Olivia 所有, 如有侵权,请联系我们删除。
版权归原作者 Sombra_Olivia 所有, 如有侵权,请联系我们删除。