题目地址:dice_game
从这篇开始就正式进入高手进阶区,一些简单的知识点我这里就不会再重复赘述了,请有需要的同学看前面的章节。
废话不多,看看题目
题目没什么提示,只是知道这个题目的来源是:XCTF 4th-QCTF-2018
下载附件,看看情况,照例做下保护机制检查
root@mypwn:/ctf/work/python/dice_game# checksec dice_game
[*] '/ctf/work/python/dice_game/dice_game'
Arch: amd64-64-little
RELRO: Full RELRO
Stack: No canary found
NX: NX enabled
PIE: PIE enabled
打开了各种限制条件,作为难度为1的题目,感觉有点吓唬人哩!
没事,先做下反编译
高手进阶区的题目,我会先对反编译之后的c语言代码做下命名修改,方便同学们可以快速理解,要不然v1、v2这种变量函数命名对于复杂题目的快速判断会造成不小的干扰。
下面我就直接把我已经修改好命名的c语言代码贴出来,这个程序主要有三个函数,我按照函数的意义进行了重命名,分别是main, go_game, get_flag。
先看下main函数:
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
char szName[55]; // [rsp+0h] [rbp-50h]
char nResultGame; // [rsp+37h] [rbp-19h]
ssize_t nLenName; // [rsp+38h] [rbp-18h]
unsigned int seed[2]; // [rsp+40h] [rbp-10h]
unsigned int nRound; // [rsp+4Ch] [rbp-4h]
memset(szName, 0, 0x30uLL);
*(_QWORD *)seed = tim