来看看第一道题目

下载过来后先使用file查看一下

是64位可执行文件
尝试运行,如下图所示

我们可以注意到,它会计算并打印我们的Flag,但这个过程非常缓慢,并且Flag的计算过程会随着字节的增多变得越来越慢。从其最开始的输出可以看到flag为hxp{F
这就意味着,我们需要对程序进行优化,以尽快得到Flag。
在IDA Pro的帮助下,我们可以将代码反编译成像C语言一样的伪代码。
使用IDA x64打开

先看main函数的汇编

F5查看伪代码

再看看关键的fibonacci的汇编

及其伪代码

解决这个问题的方式有很多种。例如,我们可以使用一种编程语言重新构建代码,并对新构建的代码进行优化。重建代码的过程并不容易,并且有可能会产生问题或错误,而解决问题、修正错误的这个过程是非常煎熬的。但假如我们使用Unicorn Engine,就可以跳过重建代码的过程,从而避免上面提到的问题
在优化之前,我们首先模拟正常的程序,一旦程序成功运行后,我们再在Unicorn Engine中对其进行优化。
新建一个python脚本,注意与fibonacci同样路径

导入unicorn,以及x86体系结构的unicorn constant

本文介绍了一种使用UnicornEngine优化慢速Flag计算的方法。面对一个计算Flag极为缓慢的程序,文章详细阐述了如何利用IDAPro反编译代码,识别瓶颈,并通过动态编程优化递归的Fibonacci函数,显著提升Flag的计算速度。
最低0.47元/天 解锁文章
1万+





