之前有想過(guò)是base64隱寫(xiě),但是由于沒(méi)有找到base64字符串所以最后也就沒(méi)做出來(lái)。今天經(jīng)大佬提點(diǎn)找到了流量包中的base64字符串也就順便做出來(lái)了
0x1
首先在流量包中找到隱藏在其中的base64字符串,

在這里發(fā)現(xiàn)一共有17個(gè)txt,每個(gè)txt里面都有base64字符串

分別把他們扣下來(lái)

然后對(duì)其中一個(gè)base64解碼看看 會(huì)發(fā)現(xiàn)解碼后還是幾行base64

這就讓我想到了之前看到師傅的一篇有關(guān)base64隱寫(xiě)的文章
https://www.tuicool.com/articles/RRr2miE
0x2
于是寫(xiě)腳本把全部的第一層base64先解碼,再用腳本跑隱寫(xiě)
import base64
b64=""
for i in range(17):
file="base64/"+str(i)+".txt"
f=open(file)
base=f.read()
b64+=base
f.close()
base64_decode=base64.b64decode(b64)
print base64_decode
with open("base64/base64.txt","w") as f1:
f1.write(base64_decode)
f1.close()

然后再用師傅現(xiàn)成的腳本跑一跑出結(jié)果
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('base64/base64.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)
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i+8], 2))
print res_str
solve_stego()
