题目描述:菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵ ┻━┻
大写字母都没有,应该不是base码。但是我一直觉得这是一个编码,看了大佬的wp才知道应该是16进制(还是自己太菜)。前面几题有个二进制的,现在又是16进制,应该总结一下。
所以解密方法应该为:两个一位,16进制转10进制,然后减去128再转成字符即可(为了将大小规范在128之内,即ASCII表达范围)
用脚本把每两位转换为十进制,代码如下(网上嫖的):
string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ''
for i in range(0,len(string), 2):
s = "0x" + string[i] + string[i+1]
flag += chr(int(s, 16) - 128)
print(flag)
恩。。。确实该掀桌子
即:flag{hjzcydjzbjdcjkzkcugisdchjyjsbdfr}
题目描述:今天是菜狗的生日,他收到了一个linux系统光盘
发现了一个奇葩的做法:记事本打开,ctrl f查询flag,找到一个flag.txt文件,继续向下找到一串字符串,看起来像是base64串
解密得到:flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj} (这也行??)
题目描述:菜狗收到了图后很开心,玩起了pdf 提交格式为flag{xxx},解密字符需小写
打开文件一看,全是无用的干扰信息,因为有前面一题先例,我猜测会有一些东西隐藏在下面
但是我怎么也全选不了,只能复制到一部分。经过大佬wp的启发,在浏览器中打开pdf,然后f12,在控制台里输入document.documentElement.textContent,就能看到所有内容了。
看到一串ABAB密码,我猜是二进制。。结果不是。看了大佬的wp才知道是摩斯电码(学到了)。
这样就解密得到:congratulations,flag:1nv151bl3m3554g3
题目描述:菜狗最近学会了拼图,这是他刚拼好的,可是却搞错了一块(ps:双图层)
打开文件是一个压缩包,解压缩后打开,是一个txt文件:
按题目说的应该有一个图片的,可能被破坏了,用winhex打开看看:
果然有一个png文件
根据RAR编码格式(参考:https://wenku.baidu.com/view/918e2c146c175f0e7cd1370d.html”),将7A改为74保存并再次解压
怎么是一张空白的图片??
后面就要用到一个软件stegsolve,很多和我一样的小白应该都没用过,用法我贴在这里了:stegsolve使用方法
先将两张图片分离图层(为了这个我还学了点ps),然后分别在stegsolve打开,之后拼起来就是一个二维码,扫一下就行了
题目描述:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓
打开文件,是一个压缩包,用360压缩打开是一个txt文件:
解压缩打开:
一堆base密文。试着解密一下,结果base64解不出来。。然后咋办?这就触及到我的知识盲区了,看大佬的wp说这是base隐写题,很多小白应该和我一样不知道base隐写是什么,点这里了解一下吧。
总之,根据base64隐写的原理可得出结论:
1、base64加密后结尾无“=”号的无隐写位。
2、base64加密后结尾有1个“=”号的有2位隐写位。
3、base64加密后结尾有2个“=”号的有4位隐写位。
编码思想:首先判断每行数据的可隐写位数,然后将可隐写的每行最后一个字符根据base64码表,对应到相应的值,接着转为二进制,根据可隐写位数截取相应的位数,然后拼接这些隐写位,最后从左到右每8位一组截取二进制,分别将其转为十进制并对应ASCII码表,打印出相应的字符即可得到flag。
参考大佬
使用如下脚本:
#coding=utf-8
def get_base64_diff_value(s1, s2):
base64chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res
def solve_stego():
with open('1.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
print diff
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
print goflag(bin_str)
def goflag(bin_str):
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i + 8], 2))
return res_str
if __name__ == '__main__':
solve_stego()
为什么我死活运行不出结果呢?一直报错咋办?
题目描述:菜狗决定用菜刀和菜鸡决一死战
下载文件后发现,
怎么连文件都打不开。。我还想自己做来着,小白还是跟着大佬的wp一步步来吧。
原来是用winhex打开,ctrl f 搜索flag,发现有个txt文件:
这个软件的任务就完成了,再把题目附件的后缀改成zip,用360压缩打开文件,注意是在下载附件的那个页面改,文件夹改不了不知道为什么
改成zip打开
提示需要密码,再次下载附件(因为这一次下载的被改成压缩包了),用wireshark打开,同样按ctrl f
搜索flag:
注意上面的选项要选好才能搜索。
多点几次查找,发现了一个6666jpg
然后再这样操作
弹出来了一个页面,到这里,我们需要知道一个知识点,jpg格式是以:FFD8FF开头,以FFD9结尾的,我们就用这个功能查找开头和结尾
开头和结尾之间的复制下来,就可以关掉
这个软件了。然后打开010editor,选择导入十六进制文件。
导入后粘贴,选择保存为jpg格式的文件。
打开文件,
??为什么我的长这样,有没有大神解释一下,不应该是这样吗?
我人晕了,为啥啊?
算了,总之得到密码:Th1s_1s_p4sswd_!!!
输入密码打开加密文件就得到flag了
1.二进制 16进制经常会出现
2.用记事本打开文件,再搜索flag可能会有意想不到的效果
3.隐藏在pdf下面的文字全选不了?在浏览器中打开pdf,然后f12,在控制台里输入document.documentElement.textContent,就能看到所有内容了
4.RAR编码格式了解一下?
5.base隐写了解一下?
6.不知道啥文件就用winhex打开看文件头,然后搜索flag看有没有隐藏文件:flag.txt,有的话直接改成zip后缀用360压缩打开
如果解压要密码的话就再次下载附件,可能用wireshark打开或者看看图片信息