sm 安恒4月赛

工具

IDA+SM4

思路展开

必须要知道SM4的加密算法,才能做这个题
SM4源码解析
SM4算法原理
一个关于国密SM4的故事
pysm4
SM4 python库的安装
(最后一个链接是CX-330师傅总结的各种库的安装,膜拜~)
一开始拿到这个题发现逻辑明了,但函数实现不好逆推,而且函数经过32轮的加密。这肯定是一种著名算法(算法就是见一个总结一个)

main:
sm 安恒4月赛_第1张图片
main函数只有一个函数(红框),参数:输入+ 字符+输出。
如何看出是SM4:
1.密钥和输出都是128位
2. sub_401863里32轮加密
sm 安恒4月赛_第2张图片
3.与源码完全一样的异或
sm 安恒4月赛_第3张图片
源码:c =bb^(ROTL(bb, 2))^(ROTL(bb, 10))^(ROTL(bb, 18))^(ROTL(bb, 24));
常数不同是密文不同的原因
4.三个数组与源码相同
sm 安恒4月赛_第4张图片
上面三个源码数组在此题中都可以找到(截图字小,去看链接里的源码)

所以,这是一个原汁原味的SM4,有密钥和加密后的密文,直接脚本上

from pysm4 import encrypt, decrypt  #脚本格式固定,参照github里的使用规则
mk =0x0123456789abcdeffedcba9876543210
cipher_num = 0xC079776677E5AC9931C567EB470645A7
clear_num=decrypt(cipher_num,mk)
print (hex(clear_num)[2:].replace('L', ''))

flag{d0389046c236e4c66bd787959f5c6e66}

你可能感兴趣的:(我的CTF之路)