首页
社区
课程
招聘
[原创]第四题 英雄救美
发表于: 2021-5-16 21:01 3196

[原创]第四题 英雄救美

2021-5-16 21:01
3196

一开始看到main函数中md5常量,和紧接着的aes相关的操作,然后花了些时间分析了这部分。。
图片描述
对输入进行普通的md5加密后,使用它作为aes的密钥拓展。但流程总感觉不对劲,,以为对aes进行了魔改。

 

比如下面的4个常量,逆列混合的常数矩阵。整个函数不是密钥扩展吗,这里怎么有这个。。。

 

图片描述

 

然后跟了很久算法,最后发现就是正常的aes解密。用输入的md5作为密钥,对程序中编码数据16字节为单位进行解密,一个smc。

 

再回到上面输入要验证通过的函数,第二个函数很明显在判断一个9*9数独。

 

在线解数独即可:5619238183457621978469254539786692871328563617281793452

 

接下来就是逆第一个函数,从偏移还原字符,但这里要把输入分成9个部分分别找偏移。这里又卡住了。。。这55分成9个部分有很多解,开始尝试了6*9+1组合,但smc解密出乱码。。。后面才想到会不会就是给定的初始9*9数独中每一行未填写数字个数。。

 

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
char s[81] = "$BPV:ubfYp}]DtN>aT^MGmJQ#*Hr`O\x27wjic0!hdy{oZz-@n+?&%s_/g<e[W)XUxRFSLRA;.l=CEkvK-(q";
char enc[] = "5619238183457621978469254539786692871328563617281793452";
int order[] = {7, 5, 5, 7, 7, 7, 5, 5, 7};
int main(void)
{
    int i, j, k = 0;
 
    for(i = 0; i < 9; i++)
    {
        for(j = 0; j < order[i]; j++)
        {
            putchar(s[9*i+enc[k++]-48-1]);
        }
        putchar('0'+9-order[i]);
    }
 
    return 0;
}
//:u$YBPf2pa]Dt4#QM^H4ic'j0`w2y{d-Zzo2%/n_s@+2<UW)e4AR;F.4=-qEkvC2

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

最后于 2021-5-16 21:04 被Bxb0编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//