首页
社区
课程
招聘
[原创]第八题 挖宝
发表于: 2019-3-23 03:04 4052

[原创]第八题 挖宝

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 探索篇!

收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 2555
活跃值: (215)
能力值: ( LV12,RANK:277 )
在线值:
发帖
回帖
粉丝
2
这exp好强悍
2019-3-25 13:58
0
游客
登录 | 注册 方可回帖
返回
//