[NSSCTF 2nd]MyBase

这道题考察的是对base64的理解与伪代码分析,理解了还是比较简单的(如果想要搞懂base64的加解密原理可以去看看小新的第一篇文章[WUSTCTF2020]level3_[wustctf 2020]level3-CSDN博客

第一步还是查壳:

无壳,用64位的ida打开,F5查看主函数(这些操作都是基本的前期分析方式,还有一个查看字符串找关键点)

分析之后发现关键点在test函数

上面的意思简单来说就是让输入flag后v3获取它的长度,然后flag与它的长度当作base64_encode函数的参数,猜测这里就是利用这个函数把flag给加密了然后与所给的字符串进行对比看是否正确,打开base64_encode函数看看是怎么加密的。


这里会发现就是base64的加密过程但多加了一个exception_handler函数看看这个函数有什么用

发现这个函数把码表给换了根据这个函数所在的位置得出每加密一次(每加密3个字符)换一次码表,因为加密后的字符串是36位所以flag是27位用了9张表,可以通过动调下断点来获取表

以下操作

先输入随便27个字符

再F4进行下一次

后面同理操作得到9个码表(码表是怎么生成的,为什么每次都不一样,这里师傅们可以思考一下)  

解密脚本:                

import base64
code = ["+86420ywusqomkigecaYWUSQOMKIGECABDFHJLNPRTVXZbdfhjlnprtvxz13579/",
"YsVO0tvT2o4puZ38j1dwf7MArGPNeQLDRHUK+SChbFanmklWEcgixXJIq6y5B/9z",
"xDfpNE4LYH5Tk+MRtrlv1oFbQm0gP37eqIajh2syUnZcSV8iBK6O/XWuzdCwA9GJ",
"YvHeOZECmTyg0Mw2i7PIGKblsfF59rzUk6p3hVdW1qaQ+xRANnXLj48BcJDotS/u",
"xDfpNE4LYH5Tk+MRtrlv1oFbQm0gP37eqIajh2syUnZcSV8iBK6O/XWuzdCwA9GJ",
"YvHeOZECmTyg0Mw2i7PIGKblsfF59rzUk6p3hVdW1qaQ+xRANnXLj48BcJDotS/u",
"xDfpNE4LYH5Tk+MRtrlv1oFbQm0gP37eqIajh2syUnZcSV8iBK6O/XWuzdCwA9GJ",
"YvHeOZECmTyg0Mw2i7PIGKblsfF59rzUk6p3hVdW1qaQ+xRANnXLj48BcJDotS/u",
"xDfpNE4LYH5Tk+MRtrlv1oFbQm0gP37eqIajh2syUnZcSV8iBK6O/XWuzdCwA9GJ"]

key = 'YkLYv1Xj23X7N0E5eoFgUveKeos1XS8K9r4g'
flag = ''
for i in range(0,len(code)):
    str1 = key[i*4:i*4+4][::-1]
    string1 = code[i]
    string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    flag += base64.b64decode(str1.translate(str.maketrans(string1,string2))).decode()
print(flag)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值