看雪·深信服 2021 KCTF 春季赛 | 第四题设计思路及解析
跟随武林少侠“飞停”,我们一起来到第四关《英雄救美》,共有31支战队完成目标,成功营救「美女」。
金左手率先完成挑战,仅用时7582秒。辣鸡战队紧随其后,完成目标。本题目仅用时一天即挑战完成。
大家依然战斗力满满!接下来我们一起来看看本题的成功“秘诀”吧!
出题团队简介
由3位CR38同期学员组成,共同学习和提高二进制安全技术为目的,创建了WeTeam战队。
赛题设计思路
要求
本题要求输入key字符串,正确弹出MessageBox,错误的key则不会弹出MessageBox。
本题实现说明
本题中输入的key是9X9数独游戏(数独.png)的唯一解,此key会进行md5加密,得到的hash值会解密一段shellcode。错误的key则无法获得shellcode。
详细说明
9x9的数独存放在一个全局的二维数组中,破解者输入一串密钥。然后根据这个密钥转换为在这个数独中应该填写的数字,判断其行是否合法、列是否合法以及粗线宫是否合法。如果合法则计算其md5,然后aes解密shellcode。解密正确的话则会正常执行shellcode,从而弹出input correct的消息框,否则就没有这个消息框,自动退出程序了。
解题思路
找到数独游戏图,然后得到唯一解。
其他信息
正确的key
:u$YBPf2pa]Dt4#QM^H4ic'j0`w2y{d-Zzo2%/n_s@+2<UW)e4AR;F.4=-qEkvC2
数独游戏图
赛题解析
本赛题解析由看雪论坛 poyoten 给出:
试运行
分析
printf("\t\t\t看雪CTF大赛\r\n");
printf("\t\t祝愿看雪CTF大赛越办越好\r\n");
printf("Serial: ");
scanf_s("%s", &input, 81);
length = strlen(&input);
if ( length <= 64 && check_group_401240(length, &input, v15) == 1 && check_sudoku_401000(v15, length - 9) == 1 )
{
_mm_storeu_si128((__m128i *)&hash, (__m128i)0i64);
memset(&ctx, 0, 0x58u);
v14 = 0;
v13 = 0;
ctx = 0x67452301;
v10 = 0xEFCDAB89;
v11 = 0x98BADCFE;
v12 = 0x10325476;
md5_update_4014E0((int)&input, (int)&ctx, length);
md5_final_4015B0((int)&hash, (__m128i *)&ctx);
subkey_401ED0(v4, (unsigned __int8 *)&hash);
v8 = (void (*)(void))VirtualAlloc(0, 0x620u, 0x1000u, 0x40u);
v5 = (__m128i *)v8;
v6 = 0x62;
do
{
_mm_storeu_si128(v5, _mm_loadu_si128((__m128i *)((char *)v5 + &unk_4181A0 - (_UNKNOWN *)v8)));
AES_de_4028B0((int)v15, (unsigned __int8 *)v5);
++v5;
--v6;
}
while ( v6 );
v8();
}
return 0;
本来有长度要求再加上数独校验,就能出唯一解了,就无需后面的部分了。不知道作者是想增加点难度还是出于其它考虑,函数check_group_401240的转换并不能由数独解反算出唯一输入,所以就有了后面的校验部分。
_mm_storeu_si128((__m128i *)table, _mm_load_si128((const __m128i *)&xmmword_416280));
pos = 0;
_mm_storeu_si128((__m128i *)&table[16], _mm_load_si128((const __m128i *)&xmmword_4162A0));
idx1 = 0;
v11 = a1;
v10 = a2;
out = a3;
table[80] = 'q';
_mm_storeu_si128((__m128i *)&table[32], _mm_load_si128((const __m128i *)&xmmword_416270));
_mm_storeu_si128((__m128i *)&table[48], _mm_load_si128((const __m128i *)&xmmword_416290));
_mm_storeu_si128((__m128i *)&table[64], _mm_load_si128((const __m128i *)&xmmword_416260));
if ( a1 <= 0 )
return 1;
v5 = 0;
while ( 1 )
{
ch_l = a2[idx1];
if ( ch_l > 0x30 && ch_l <= 0x39 )
break;
idx2 = v5;
if ( v5 >= 0x51 )
return 0;
while ( ch_l != table[idx2] )
{
if ( (unsigned int)++idx2 >= 0x51 )
return 0;
}
v9 = idx2 % 9 + 1;
if ( v9 == -1 )
return 0;
*out = v9;
a2 = v10;
++pos;
++out;
a1 = v11;
LABEL_13:
if ( ++idx1 >= a1 )
return 1;
}
if ( pos + ch_l == 0x39 )
{
pos = 0;
v5 += 9;
goto LABEL_13;
}
return -1;
求解
0 4 0 7 0 0 0 0 0
9 2 0 0 0 0 6 0 7
8 3 0 0 0 5 4 0 0
0 1 0 0 0 3 0 0 0
0 0 0 2 0 1 0 0 0
0 0 0 5 0 0 0 4 0
0 0 4 9 0 0 0 7 1
3 0 5 0 0 0 0 9 4
0 0 0 0 0 8 0 6 0
table = "$BPV:ubfYp}]DtN>aT^MGmJQ#*Hr`O'wjic0!hdy{oZz-@n+?&%s_/g<e[W)XUxRFSLRA;.l=CEkvK-(q"
idx = [[5,6,1,9,2,3,8],[1,8,3,4,5],[7,6,2,1,9],
[7,8,4,6,9,2,5],[4,5,3,9,7,8,6],[6,9,2,8,7,1,3],
[2,8,5,6,3],[6,1,7,2,8],[1,7,9,3,4,5,2]]
length = 64
l = [0]*length
pos = 0
for i in range(9):
n = len(idx[i])
for j in range(n):
l[pos+j] = table[i*9+idx[i][j]-1]
l[pos+n] = chr(0x39-n)
print chr(0x39-n) ,
pos += n+1
print ''.join(l[:pos])
print ''.join(l)
往期解析
1. 看雪·深信服 2021 KCTF 春季赛 | 第二题设计思路及解析
主办方
第五题正在火热进行中,
-
看雪·众安 KCTF赛况直播 | 战况升级!比分逐渐拉大
看雪·众安 2021 KCTF秋季赛 已于11月15日中午12点正式开赛!第9题《万事俱备》已经持续2天。现在跟随我一起看看赛况如何吧!截至发文,目前该题围观人数多达927人,已有4支战队攻破此题!分
-
看雪·众安 KCTF赛况直播 | 白热化!第八题《群狼环伺》谁先拿下?
看雪·众安 2021 KCTF秋季赛 已于11月15日中午12点正式开赛!今天中午12点,第8题《群狼环伺》已正式开战!截至发文,该题共计围观人数:325,攻破战队数:0截至发文防守方总排名如下:攻击
-
看雪·众安 2021 KCTF 秋季赛 | 第六题设计思路及解析
看雪·众安 2021 KCTF秋季赛的第六题《窥伺者谁》已于今天中午12点截止答题,经统计,本题围观人数多达1080人,共计6支战队成功破解。恭喜v3r1t4s501用时19720秒拿下“一血”,接下
[广告]赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 医疗招标采购网:医院医疗器械设备招投标大数据平台,实时更新全国医疗招标信息
- 苹果起诉微软侵犯版权 | 历史上的今天
- 超级CSO研修班 | 陈建:规划治理,见微知著
- 被 Google 裁掉的 Golden 12K:开源开发者成重灾区,61 岁再求职!
- Snapdragon Sound技术支持漫步者两款全新半入耳式真无线耳机
- 高通公司、宝马集团和Arriver达成长期战略合作,共同开发自动驾驶软件解决方案
- 给敏感信息打上马赛克就安全了吗?
- 新一年,野一点
- 华为高管否认养猪传闻;苹果上架翻新版 M1 MacBook;ASML 澄清中芯国际购买协议 | 极客头条
- Ant Design 遭删库!
- 在招 | 易念科技高达50万年薪诚招销售经理和渠道经理
- 9月1日起,TrustAsia品牌SSL证书最长有效期变更为一年