practice 6之算法夹杂

第六题

之前没做出来的一道题目,各种密码学的夹杂,看到很多.so库估计当时也没啥想法了

很明了,对输入进行检验,过了就输出right,错了就输出wrong,分析一下check_401510这个函数。先是判断字符范围,ASCII码不能超过90。


然后取输入的前5个字符,作md5加密,如下三个函数就是实现了md5算法


接下来就是用前五个字符的md5值的前8字节作为DES算法的key,并且采用ECB模式分组加密。


然后就是对DES加密后的结果作base64变换,v9是DES加密结果,v21保存base64结果。


最后就是和check数组比较,check数组内容即是:
‘OSHzTJ4pwFgRG6eS6y3xVOOEGcbE5rzwqTs7VCK6ACQLuiTamZpXcQ==’


所以采用爆破的方式去得到flag,设flag前五位为temp,并且用其md5值前8字节作为DES算法的key,当解密出来的flag前五位和temp相等时,即为flag。
脚本如下:(参考的大神writeup)

import pyDes
import base64
import hashlib
import string
check = "OSHzTJ4pwFgRG6eS6y3xVOOEGcbE5rzwqTs7VCK6ACQLuiTamZpXcQ=="
miwen = base64.b64decode(check)
count = 0
for i in string.uppercase + string.digits:
    for j in string.uppercase + string.digits:
         for k in string.uppercase + string.digits:
              for m in string.uppercase + string.digits:
                   for n in string.uppercase + string.digits:
                count = count + 1
                tmp = i+j+k+m+n
                md5_tmp = hashlib.md5(tmp).hexdigest()
                key = md5_tmp[0:16].decode("hex")
                result = pyDes.des(key)
                y = result.decrypt(miwen[:8])
                if y[0:5] == tmp:
                   print y
                if count % 10000 == 0:
                    print count

这道题目主要就是各种密码算法的交杂,在代码的分析上比较困难,即使参照writeup也很难掌握,后面还得好好在琢磨琢磨

Contents
|