标签:11 bin base64 MISC equalnum b64chars base64stego str 字符串
题目来源:
olympicCTF
题目描述:
菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓
题目附件:
a2eb7ceaf5ab49f7acb33de2e7eed74a.zip
题目思路:
base64原理:文本->ascii编码->二进制->每6个为一位转换成十进制->通过base64表转换成文本
比如,,字符串”Man”经过 Base64 编码后变为”TWFu”
编码时如果字符串字节数不是3的倍数,则位数就不是6的倍数,就不能划分成6位一组,此时需要在原数据二进制值后添加0,然后在编码后的字符串后加上一个或两个“=”,表示添加的0的个数
解码时先去掉等号,转为二进制数,扔掉多余位转为对应的ASCII码,扔掉多余的0恢复成原字符串.
隐写原理:解码时丢弃的0可以隐藏信息。
解题过程:
压缩包需要解压密码,打开010分析前四位是文件头,后四位是压缩解压的pkware版本接下来就是加密标记,如果的两个若不是0000便会提示有密码,这种zip伪加密可以使用winRAR打开,进入工具,修复压缩文件,修复完后压缩包就可以打开了
这里的思路是先循环解密base64字符串,提取出隐写的最后2-4位,再拼接最后转回ascii码flag就出来了
import base64
bin_str=''
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('stego.txt','r') as f:
for line in f.readlines():
stegb64="".join(line.split())
rowb64="".join(str(base64.b64encode(base64.b64decode(stegb64)),'utf-8').split())
offset=abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=', '')[-1]))
equalnum=line.count('=')
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print(''.join([chr(int(bin_str[i:i + 8], 2)) for i in range(0,len(bin_str),8)]))
flag{Base_sixty_four_point_five}
标签:11,bin,base64,MISC,equalnum,b64chars,base64stego,str,字符串 来源: https://blog.csdn.net/qq_45161658/article/details/112405741
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。