首页
论坛
课程
招聘
[原创] 第六题:消失的岛屿 wp
2019-6-11 22:38 833

[原创] 第六题:消失的岛屿 wp

2019-6-11 22:38
833

KanXue2019ctf_st

题目没有任何刁难的地方,相当于给出源码了

主函数,很显眼的看到base64_encode,但比较的字符串却有很大一部分不是base64包含的字符,嗯,自定义的base64加密


通过分析,与原来的base64算法不同的是,原算法的字符顺序为'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

自定义的字符顺序为'tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/'

除此之外,修改的算法还进行了简单的移位和替换


我们写一下解密的脚本即可,用python的时候有两点需要注意:

1. 左移操作(<<)时,要先清空高位的无用数据

2. 在python中,移位操作的优先级高于按位与操作


# coding:utf8

aTuvwxtulmnopqr = 'tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/'

def charDecrypt(e_char):
    if e_char == 121:
        e_char = 47
    elif e_char == 119:
        e_char = 43
    elif e_char > 97 and e_char <= 107:
        e_char = e_char - 50
    elif e_char > 32 and e_char <= 58:
        e_char = e_char + 64
    elif e_char >= 65 and e_char < 91:
        e_char = 155 - e_char
    return aTuvwxtulmnopqr.index(chr(e_char))


def base64_decode(e_str):
    r_d_str = ''
    e_str_len = len(e_str)
    if e_str_len % 4 != 0:
        return 'Length Error'
    for i in range(e_str_len-1, -1, -4):
        if e_str[i-1:i+1] == '==':
            cur = charDecrypt(ord(e_str[i-2]))
            cur_1 = charDecrypt(ord(e_str[i-3]))
            r_d_str += chr(cur>>4 | ((cur_1 & 0b00111111) << 2))
        elif e_str[i] == '=':
            cur = charDecrypt(ord(e_str[i-1]))
            cur_1 = charDecrypt(ord(e_str[i-2]))
            cur_2 = charDecrypt(ord(e_str[i-3]))
            r_d_str += chr(cur>>2 | ((cur_1 & 0b00001111) << 4))
            r_d_str += chr(cur_1>>4 | ((cur_2 & 0b00111111) << 2))
        else:
            cur = charDecrypt(ord(e_str[i]))
            cur_1 = charDecrypt(ord(e_str[i-1]))
            cur_2 = charDecrypt(ord(e_str[i-2]))
            cur_3 = charDecrypt(ord(e_str[i-3]))
            r_d_str += chr(cur | ((cur_1 & 0b00000011) << 6))
            r_d_str += chr(cur_1>>2 | ((cur_2 & 0b00001111) << 4))
            r_d_str += chr(cur_2>>4 | ((cur_3 & 0b00111111) << 2))
    print r_d_str[::-1]


if __name__ == "__main__":
    base64_decode('!NGV%,$h1f4S3%2P(hkQ94==')


第五届安全开发者峰会(SDC 2021)议题征集正式开启!

最后于 2019-6-11 22:40 被qux编辑 ,原因: 修改标题
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回