首页
社区
课程
招聘
[原创]看雪CTF 2019Q3 第五题 魅影舞姬
发表于: 2019-9-21 17:16 7360

[原创]看雪CTF 2019Q3 第五题 魅影舞姬

2019-9-21 17:16
7360

往输入后面追加一段字符串Welcome/to/this/very/simple/challenge,输入的字符串加上这段内容大小不能超过0x55
图片描述

调用btea加密算法验证输入的正确性
图片描述

将输入的内容做base64解码,若输入中有等号且等号位置小于等于35,则只解析等号及前面的数据,否则只解析前36位数据
图片描述

图片描述

将输入的base64字符串分成0-88-1616-24,再分出base64解码后的18位之后的部分
图片描述

有两个加解密函数,猜测是魔改des,因为搜其使用的数据表搜到了看雪很早前的一篇破解魔改des的文章,怀疑是作者留下的线索。在这里暂且称f_des_opt_01为加密函数,f_des_opt_02为解密函数
图片描述

根据上图可以看出:
先将base64解码的数据18位以后的数据用base64字符串的16-24位的数据作为key加密;
18位以后的数据用8-16位的数据作为key解密;
18位以后的数据用0-8位的数据作为key加密;

有了以上的推断,当需要反推数据时,直接调试,替换加解密函数的参数就可以反向操作了

然后就是走迷宫的操作了,识别迷宫是通过找到迷宫字符串数据后,结合使用时采用map[][13]二维数组的方式,推测出是迷宫地图
图片描述
图片描述

使用MD5校验放多解

图片描述

图片描述

由前面的拆分和加解密可得知,输入的base64字符串的前24位是不变的,需要变化的是24位之后的数据

将第四组迷宫的走法数据和每次对应的分解出的key数据整理出来,调试时按照相反操作放入到魔改des的加解密操作函数中,执行的结果就是反推出的数据;具体操作就不截图了,反推结果如下

base64_encode(第一组迷宫的走法数据 + 第二组迷宫的走法数据 + 第三组迷宫的走法数据 + 解密后的数据) = key

图片描述

1
*************
*@***********
*-***********
*--**----****
*-***-**-****
*-***#**-****
*--*****-****
**-*****-****
**-------****
**-*-----****
**---**-*****
**-****--****
*************
2
*************
*@***********
*-***********
*-***-**-****
*--**----****
*-***#**-****
*--*****-****
**-*****-****
**-*-----****
**---**-*****
**-------****
**-****--****
*************
3
*************
*@***********
*-***********
*-***-**-****
*--*****-****
*-***#**-****
*--**----****
**-*****-****
**-****--****
**---**-*****
**-*-----****
**-------****
*************
4
*************
**-------****
*--*****-****
*-***-**-****
*--*****-****
*-***#**-****
*-***-**-****
*-***-**-****
*--**----****
**---**-*****
*--*****-****
*@***********
*************

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-9-25 14:51 被KevinsBobo编辑 ,原因:
上传的附件:
收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 7833
活跃值: (1566)
能力值: ( LV12,RANK:256 )
在线值:
发帖
回帖
粉丝
2
des3就是标准的des3,想魔改的但未果(逃
2019-9-25 10:27
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
3
丿feng des3就是标准的des3,想魔改的但未果(逃
经验不足,没研究过加密算法,遇到了,只知道去搜特征,没搜到就认为是魔改的了。反正加密解密的他都写了,就没深入了
2019-9-25 10:29
0
雪    币: 381
活跃值: (165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
楼上的是题主吗。。。哈哈
2019-9-25 10:30
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
5
DlyWtF700 楼上的是题主吗。。。哈哈
果然是题主
2019-9-25 10:31
0
雪    币: 5182
活跃值: (9697)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
6
DES处理部分不太理解,对于F5的结果是:
```
      fuck_Func_01(&Dest, &v21, &Dest);
      fuck_Func_02(&Dest, &v22, &Dest);         // 算法,给Dest值;
      v38_length = strlen(Str);
      md5(&v20_md5Hash, Str, v38_length);       // md5 ...对输入的字符进行处理。
      fuck_Func_01(&Dest, &v23, &Dest);
```
其中通过迷宫逆向得到了:
Dest = ['0x30', '0x80', '0x3', '0x3f', '0xfd', '0x55', '0x5a', '0x80']
输入的SN前部分为:VXX/8AKlVXV8/wCpVXV9/DCo
 v21 = UserInput[16, 8]; = "VXV9/DCo" fuck_Func_01(&Dest, &v21, &Dest);
 v22 = UserInput[8, 8];  = "VXV8/wCp" fuck_Func_02(&Dest, &v22, &Dest); 
 v23 = UserInput[0, 8];  = "VXX/8AKl" fuck_Func_01(&Dest, &v23, &Dest);
怎么得到Key :81 E5 8A 24 CB 6B 99 E6  ?
2019-9-25 11:05
0
雪    币: 5182
活跃值: (9697)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
7
好像明白了,其实就是DES3对称加密,上面的三步v21,v22, v23的逆过程:
让Dest =  ['0x30', '0x80', '0x3', '0x3f', '0xfd', '0x55', '0x5a', '0x80']
fuck_Func_02(&Dest, &v23, &Dest);
fuck_Func_01(&Dest, &v22, &Dest);
fuck_Func_02(&Dest, &v21, &Dest);
得到的Dest为Base64后的input[18 :] 结果;
最后于 2019-9-26 08:58 被nevinhappy编辑 ,原因:
2019-9-25 11:21
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
8
nevinhappy 好像明白了,其实就是DES3对称加密,上面的三步v21,v22, v23的逆过程: 让Dest = ['0x30', '0x80', '0x3', '0x3f', '0xfd', '0x55', ...
对的,就是这样,你这函数名也是厉害,f**k,哈哈哈
2019-9-25 11:28
0
游客
登录 | 注册 方可回帖
返回
//