参考链接
键盘按键对应表
http://blog.csdn.net/gatieme/article/details/21095013
终端格式输出
http://blog.csdn.net/robertbaker/article/details/8293432
前面这两个是误导,接下来慢慢接近的文章
https://hackaday.com/tag/ctf/
https://www.anfractuosity.com/projects/timeshifter/
https://github.com/anfractuosity/timeshifter
最接近真相的链接
https://0x90r00t.com/2016/11/09/hack-the-vote-2016-forensics-300-more-suspicious-traffic-write-up/
该文章是图像为莫斯密码,而题目是提取数据后的二进制数据转acsii
题目
给出一个pcap包,用wireshark打开,追踪tcp流结果如图
Paste_Image.png是黑客用telnet连接后,利用网络延迟的方法,留下了隐写的数据,
一开始以为是vi编辑器的按键破译,后来主办方给了个提示
https://en.wikipedia.org/wiki/Steganography Paste_Image.png
找到相关链接
https://0x90r00t.com/2016/11/09/hack-the-vote-2016-forensics-300-more-suspicious-traffic-write-up/
该文章是wireshark描绘IO图像为莫斯密码,而这次题目要用wireshark提取数据后,关注时间的延迟,短延时为0,长延时为1,然后再将二进制数据转为acsii
解题流程
过滤telnet数据和黑客IP
wireshark过滤器:telnet and ip.src_host==172.21.0.1
设置显示间隔时间
视图——时间显示格式——自上一个显示分组经过的秒数
导出数据为txt文本,用于处理
文件——导出分组解析结果——导出为纯文本——导出为1.txt
Paste_Image.pnglinux终端命令处理
cat 1.txt | grep 0.3|awk '{print $2}'>2.txt
得到每个包之间响应的时间保存为2.txt,0.30延迟的为0,0.35延迟的为1
python将时间处理为二进制数据
010.py
str = ''
for line in open("2.txt"):
if '0.35' in line:
str +='1'
if "0.30" in line:
str += '0'
print str
Paste_Image.png
Paste_Image.png
观察二进制数据
结合 f 是01100110, l 是01101100 , a 是01100001,定位关键有效段如下所示
这里的关键是每8位二进制为一组,每组倒序后转为ascii码即为正确字符串
因为fla的正确顺序是 01100110 01101100 01100001
而关键段的前部分为 01100110 00110110 10000110
这里的 f 的二进制是对称的,也正是 f 让我定位了关键段,要取8的倍数,所以后面很多0,只需要保留两个
01100110001101101000011011100110110111100100110011000110011011000110110000001100101011001010110011001100111011001000110001101100101001100010110001001100101011001010011010011100001011001100110010101100100011000001110010100110010011000000110000011100110001100110110001100110000011001110110010000110101111100
python脚本把倒序字符串恢复,并转为ascii
bin2ascii.py
#!coding:utf-8
string='01100110001101101000011011100110110111100100110011000110011011000110110000001100101011001010110011001100111011001000110001101100101001100010110001001100101011001010011010011100001011001100110010101100100011000001110010100110010011000000110000011100110001100110110001100110000011001110110010000110101111100'
l=[]
result=''
r=''
i = 0
for s in string:
result += s
i +=1
if i ==8: #每8个字符组成字符串result后,以列表的形式按顺序保存
i = 0
l.append(result)
result =''
for ll in l:
ll=ll[::-1] #每8位倒序反转,注意不是01反转
r += chr(int(ll,2)) #二进制转为ascii
print r
Paste_Image.png
Paste_Image.png
网友评论