BUUCTF [WUSTCTF2020]level3

文件无壳 直接拖入IDA

进入主函数 F5查看伪c代码 能够看到很明显的base64编码 还能看到一串可疑字符串

于是直接把字符串拉去base64解密 但是解密出来有乱码 感觉应该是一种变形的base64编码 结合And I get a strange string from my program which is different from the standard base64这句话更加确定编码表被做了修改 于是继续回到主函数

看到base64编码表base64_table

双击查看编码表

对base64_64按X键查看引用函数

进入O_OLookAtYou函数

这段代码使用一个 for 循环遍历从索引 09 的整对于循环中的每个 i,它首先存储base64_table[i] 的值到变量 v1 中。然后,它将 base64_table[19 - i] 的值复制到 base64_table[i]。接着,它计算 19 - i 并将这个结果存储在 result 变量中。这个值实际上是 base64_table 中与当前 i 索引对称的元素的原始索引。最后,它将之前保存在 v1 中的原始 base64_table[i] 的值复制回 base64_table[result]。由于 result19 - i,这实际上是将原始值放回了它在对称操作后被覆盖的位置。

编写脚本 输出新的base64编码表

def reverse_symmetric_pairs(base64_table_str):
    # 将字符串转换为列表
    base64_table = list(base64_table_str)

    # 执行对称交换
    for i in range(10):
        base64_table[i], base64_table[19 - i] = base64_table[19 - i], base64_table[i]

        # 返回交换后的字符串
    return ''.join(base64_table)


# 使用函数
base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(reverse_symmetric_pairs(base64_chars))

改变后的编码表为TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

这道题的思路是字符串d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD==利用新的编码表进行base64解密

编写反脚本

import base64
str_1 = "d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="
str_base = "TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
#自定义的编码表
str_zh_base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
#通用编码表
flag = base64.b64decode(str_1.translate(str.maketrans(str_base,str_zh_base)))
print(flag)

得到flag{Base64_is_the_start_of_reverse}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值