BUUCTF easyre
1.需要用到的软件
1.1IDA
IDA是一款非常实用的多用于静态分析反编译软件,在CSDN上搜“IDA”就会有一大堆IDA的教程和安装教程,这里就不多赘述了。IDA分为32位和64位,32位版本用来打开32位软件,64位用来打开64位软件(具体为什么不太清楚,可能是因为32位和64位对应的寄存器有所改变吧)
1.2exeinfope
下载链接: link
exeinfope是一款自动查壳软件,暂时还没学手动脱壳的同学直接在这个软件里打开要查壳的软件就可以看到相应的信息了。
2.开始做题
![呵呵](https://img-blog.csdnimg.cn/1c661315816342a787b92228aaf3a3a4.png
2.1 查壳
下载这个zip文件到你专门用来存buuctf题的文件夹里(个人习惯),解压到同文件夹,得到一个名为easyre.exe的二进制文件
看到一个文件首先得知道它有没有壳,所谓加壳就是改变该程序的入口,使cs:ip指向另外一段代码,执行完额外的代码后再回到程序本来的入口,这样反编译软件就不能轻易进行反编译。因此我们用exeinfope来查看它是否有壳。
可以看到高亮字体显示它是64位exe文件,下一行的信息说数据库签名没有找到,这软件貌似确定不了有没有壳。
2.2使用IDA打开EXE文件
那我们将计就计直接用64位IDA打开来看看,霸蛮一下。
打开IDA,连续点两个OK之后,来到这个界面。
点“new”反编译一个新文件,选择你要操作的exe。
直接点“OK”。
选“NO”,然后就进入了IDA的主界面
左边红色框表示的是函数窗口(function window),显示了这个文件调用的所有函数。右边是IDA自动反汇编的图形形式窗口,相应的还有反编译的文本形式窗口(点击右侧红色框框区域然后按空格就可以来回切换)。
我们可以看到如果jnz short loc_40152F不成立的话,程序会继续执行下一个指令
lea rcx, aFlagThisIsAEas ; "flag{this_Is_a_EaSyRe}"
lea rcx, aFlagThisIsAEas ; "flag{this_Is_a_EaSyRe}"
lea指令将目的操作数的地址传给源操作数,‘;’右边的注释显示了貌似是真的flag,为了知其所以然,我不直接将它视为答案,双击aFlagThisIsAEas,看看这个变量对应的内存空间到底存放了什么。
.rdata:0000000000429005 aFlagThisIsAEas db 'flag{this_Is_a_EaSyRe}',0
.rdata:0000000000429005 aFlagThisIsAEas db 'flag{this_Is_a_EaSyRe}',0
很显然,这段内存空间存放的值就是赤裸裸的flag。
要看懂这些汇编指令得至少了解8086汇编甚至win32汇编,达到刷ctf层次的同学绝大多数应该是都具备了这样的基础了的,看不懂的同学的话还是乖乖去补基础吧。