首页
社区
课程
招聘
[原创]看雪.京东 2018CTF-第二题分析
发表于: 2018-6-19 16:26 2851

[原创]看雪.京东 2018CTF-第二题分析

2018-6-19 16:26
2851

  key_19_20_21Buf

  key_16_17_18Buf

  key_7_8Buf

  key_2_3buf

  key_4_5_6Buf

  key_9_10_11_12Buf

  key_0_1Buf

  key13_14_15Buf

 inputkey[0]=‘c’

 inputkey[1]='7’

 inputkey[2]=?

 inputkey[3]=?

 inputkey[4]=?

 inputkey[5]=?

 inputkey[6]=?

 inputkey[7]=?

 inputkey[8]=?

 inputkey[9]='c' 

 inputkey[10]='7' 

 inputkey[11]='M'

 inputkey[12]='k'

 inputkey[13]=?

 inputkey[14]=?

 inputkey[15]=?

 inputkey[16]=?

 inputkey[17]=?

 inputkey[18]=?

 inputkey[19=?

 inputkey[20]=?

 inputkey[21]=? 

 inputkey[0]=‘c’

 inputkey[1]='7'

 inputkey[2]=?

 inputkey[3]=?

 inputkey[4]=?

 inputkey[5]=?

 inputkey[6]=?

 inputkey[7]=‘k’

 inputkey[8]='x'

 inputkey[9]='c' 

 inputkey[10]='7' 

 inputkey[11]='M'

 inputkey[12]='k'

 inputkey[13]=?

 inputkey[14]=?

 inputkey[15]=?

 inputkey[16]=?

 inputkey[17]=?

 inputkey[18]=?

 inputkey[19=?

 inputkey[20]=?

 inputkey[21]=?

 inputkey[0]=‘c’

 inputkey[1]='7'

 inputkey[2]=?

 inputkey[3]=?

 inputkey[4]=?

 inputkey[5]=?

 inputkey[6]=?

 inputkey[7]=‘k’

 inputkey[8]='x'

 inputkey[9]='c' 

 inputkey[10]='7' 

 inputkey[11]='M'

 inputkey[12]='k'

 inputkey[13]=‘c’

 inputkey[14]='t'

 inputkey[15]='f'

 inputkey[16]=?

 inputkey[17]=?

 inputkey[18]=?

 inputkey[19=?

 inputkey[20]=?

 inputkey[21]=?

 inputkey[0]=‘c’

 inputkey[1]='7'

 inputkey[2]=?

 inputkey[3]=?

 inputkey[4]=?

 inputkey[5]=?

 inputkey[6]=?

 inputkey[7]=‘k’

 inputkey[8]='x'

 inputkey[9]='c' 

 inputkey[10]='7' 

 inputkey[11]='M'

 inputkey[12]='k'

 inputkey[13]=‘c’

 inputkey[14]='t'

 inputkey[15]='f'

 inputkey[16]=‘c’

 inputkey[17]='t'

 inputkey[18]='9'

 inputkey[19=?

 inputkey[20]=?

 inputkey[21]=?

  key_2_3buf

  key_4_5_6Buf

  key_19_20_21Buf

  而原始树中还差 ct 以及2个c7M没有分配,因此可知:

key_2_3buf  必须是"ct"

key_4_5_6Buf 与 key_19_20_21Buf 相同,是“c7M” 因此key如下:

inputkey[0]=‘c’

 inputkey[1]='7'

 inputkey[2]='c'

 inputkey[3]='t'

 inputkey[4]='c'

 inputkey[5]='7'

 inputkey[6]='M'

 inputkey[7]=‘k’

 inputkey[8]='x'

 inputkey[9]='c' 

 inputkey[10]='7' 

 inputkey[11]='M'

 inputkey[12]='k'

 inputkey[13]=‘c’

 inputkey[14]='t'

 inputkey[15]='f'

 inputkey[16]=‘c’

 inputkey[17]='t'

 inputkey[18]='9'

 inputkey[19='c'

 inputkey[20]='7'

 inputkey[21]='M'



 



int __cdecl main(int argc, const char **argv, const char **envp)
{
	int result; // eax
	char key[32]; // [esp+10h] [ebp-44h]
	char* successBuf; // [esp+30h] [ebp-24h]
	int v6; // [esp+34h] [ebp-20h]
	int v7; // [esp+38h] [ebp-1Ch]
	int v8; // [esp+3Ch] [ebp-18h]
	char* wrongBuf; // [esp+40h] [ebp-14h]
	int v10; // [esp+44h] [ebp-10h]
	int v11; // [esp+48h] [ebp-Ch]
	int v12; // [esp+4Ch] [ebp-8h]

    //得到输入用于验证的key
	GetInputKey("%s", key, 32);

	//初始化key正确字符串
	SetSuccessString(&successBuf);

    //初始化key错误字符串
	SetWrongString(&wrongBuf);

	//判断输入的key的字符是否是大小写字母和数字
	if ( ifCharOrDigit(key, (int)&wrongBuf) )
	{
	    //输入的key所有字符都是大小写字母或数字,判断输入key长度是否是22,
		if ( &key[strlen(key) + 1] - &key[1] == 22 )
		{
		    //输入的key长度是22,则调用KeyCmp函数进一步判断
			KeyCmp(key, (char *)&successBuf, (char *)&wrongBuf);
		}
		else
	  	{
			//输入的key长度不是22,直接输入错误
			outputString(&wrongBuf);
		}
		wrongBuf = 0;
		v10 = 0;
		v11 = 0;
		v12 = 0;
		successBuf = 0;
		v6 = 0;
		v7 = 0;
		v8 = 0;
		system("pause");
		result = 0;
	}
	else
	{
	    //输入的key存在不是大小写字母和数字的情况,非法,直接返回
		successBuf = 0;
		v6 = 0;
		v7 = 0;
		v8 = 0;
		wrongBuf = 0;
		v10 = 0;
		v11 = 0;
		v12 = 0;
		result = 0;
	}
	return result;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-6-19 21:04 被oooAooo编辑 ,原因: C
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//