-
-
[原创]第四题 英雄救美
-
发表于: 2021-5-16 21:01 3207
-
一开始看到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编辑
,原因:
赞赏
他的文章
- [原创]SUSCTF 2022部分逆向题解 6671
- [原创]第四题 英雄救美 3208
- [原创]第二题 南冥神功 5391
- [原创]MRCTF2021逆向题解 10718
- 第六届上海市大学生网络安全大赛Re 5107
看原图
赞赏
雪币:
留言: