-
-
[原创]第八题 挖宝
-
发表于:
2019-3-23 03:04
4052
-
用ida打开该程序,初步分析发现程序是由go语音编写,使用开源工具golang_loader_assist对程序进行函数名识别,能够看到绝大多数程序的名称,主函数如下:
Ida里面的go程序,可以看出每个函数的真实传参是从第7个开始,也就是64位下栈传参的位置,这样就能看出函数的真正传参过程。
通过分析和运行得知,该程序是一个游戏,在6*6大小的格子里面随意移动,有四个宝藏点,其中Treasure1、2、3三个是固定的,分别在(5,0)(5,5)(0,5),而Treasure4是随机的,在main_randtreasure里面进行了随机化,如下:
且在程序游戏开始的时候,启动了一个main_joker线程,如下:
Joker线程的作用是,每隔一秒检测一次,判断当前的位置是否接近了Treasure4(距离小于等于1步),如果是就再次随机化Treasure4的位置,如下:
游戏每次到达一个Treasure的位置时,都能留下信息,游戏的过程就是上述逻辑。
当游戏到达Treasure点后,留消息时代码如下:
其中main_memcpy的实现如下:
拷贝是按照size来定的,而size的传入是有scan来决定的,所以如果scan输入的长度大于dst缓冲区时,就能够产生溢出。
通过分析Treasure1、2、3、4,发现前三种都是在堆上,只有4是在栈上,如下:
[课程]Linux pwn 探索篇!