在大连做安天技术论坛 GuessMe3

第三关涉及了各种二进制文件的处理,比较蛋疼,但幸好不用猜密码,密码包含在前几关的密码中,大概就是这些。

ren
喜羊羊
pig
gou
miao
丫
闻鸡起舞
cock

180
人归落雁后
总把新桃换旧符


第一层,压缩包解压出来是一个,二进制文件


把后缀换成rar,解压之,出现第二层的文件2.bin

接着把后缀换成rar,解压之,出现第三层二进制文件3.bin,RAR强大的地方在于基本支持所有压缩格式。

3.bin没有密码,解压之出现3.rar.out  是一个pgp加密文件,使用第一关的密钥解密之,发现是一个rar文件,没有密码,内容如下

这里顺便说一下,windows下的PGP工具叫做Pgp Desktop,用起来虽然没有linux下的方便,但是不会存在编码问题,

linux为终端设置了GBK编码之后,会看不到命令的回显,比较蛋疼。

解压之,飞狼旗就得到了。

在大连做安天技术论坛 GuessMe3_第1张图片


打开5.bin发现他是一个,docfile文件全名为,微软复合文档二进制结构(Compound File Binary Format),

文件头为

D0 CF 11 E0
很像docfile的英文,这个格式一般用来存储office的各种格式文件,内部是模拟磁盘存储格式,用Docfile Viewer打开(不支持中文目录)

详细看这里http://hi.baidu.com/umu618/item/5b21d981a6c6235d26ebd908
几番尝试,使用excel打开,密码为 “丫”,内容为文本表示的二进制文件。

类似于

00000000   1F 8B 08 08 9E 68 8B 4B  00 00 38 2E 62 69 6E 00   .?.瀐婯..8.bin.
00000010   EC 5C 67 8F 83 CC 11 FE  9C 93 4E 4A FE C1 AB 7C   靄g.兲.揘J珅
00000020   25 89 01 63 1B D2 14 D3  C1 F4 66 20 8A 22 3A D8   %?c.?恿鬴 ?:?

写了一个小程序把它转换为真正的二进制,这里啰嗦两句,文本和二进制的区别在于文本的存储是经过编码的,

每个字符占一个字节,比如1234占4个字节,二进制格式是直接按二进制编码的方式储存,比如1234,换算成2进制

只占2个字节。

2进制的读写一般用write() read(),文件一定要以二进制方式打开,不然0A等特殊字符会被转换成换行符。

这里我吐槽一下,之前看过一篇网上水友的文章,口口声声说不加打开方式无所谓,害我错了很久还不知道哪里错的,

在这我就不挖坟掘墓的把那帖子找出来了。

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; int main(int argc, char* argv[]) { ifstream txtfile; ofstream txtfiletran; string s; stringstream ss; int i; txtfile.open("1.txt"); txtfiletran.open("2.txt",ios::binary); while(getline(txtfile,s)){ if (60<=s.length()){ ss.clear(); ss<<s.substr(11,48)<
       
        >hex>>i){ //cout<<((char *)(&i))<<endl; txtfiletran.write((char *)(&i),sizeof(char)); } } } txtfile.close(); txtfiletran.close(); return 0; } }
       
      
     
    
   
  



转换完成之后的rar内容如下


直接使用文本文件打开,是一封MINE格式的邮件,内容使用base64加密,一般base64加密的话只有大小写字母数字和'+'  '='  '/',这几个字符

末尾等号用来占位。

解密之后内容如下

不过这里应该是写错了,黄沙百战穿金甲,六宫粉黛无颜色。才是

从军行·青海长云暗雪山 王昌龄 

青海长云暗雪山, 孤城遥望玉门关。 

黄沙百战穿金甲, 不破楼兰终不还。 


2010-03-01 



Swordlea

下一封是这样

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18882"><LINK rel=stylesheet 
href="BLOCKQUOTE{margin-Top: 0px; margin-Bottom: 0px; margin-Left: 2em}"></HEAD>
<BODY style="MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt">
<DIV><FONT size=2 face=Verdana>从军行·青海长云暗雪山 王昌龄 <BR><BR>青海长云暗雪山, 孤城遥望玉门关。 
<BR><BR>黄沙百战穿金甲, 不破楼兰终不还。 <BR></FONT></DIV>
<DIV><FONT size=2 face=Verdana></FONT> </DIV>
<DIV align=left><FONT color=#c0c0c0 size=2 face=Verdana>2010-03-01 
</FONT></DIV><FONT size=2 face=Verdana>
<HR style="WIDTH: 122px; HEIGHT: 2px" align=left SIZE=2>

<DIV><FONT color=#c0c0c0 size=2 face=Verdana><SPAN 
id=_FoxFROMNAME>Swordlea</SPAN> </FONT></DIV></FONT></BODY></HTML>

最后两封是重头戏,第二封是飞豹旗

在大连做安天技术论坛 GuessMe3_第2张图片

第一封是一个doc文件,密码为 “人归落雁后”,打开后出现一幅画。

在大连做安天技术论坛 GuessMe3_第3张图片


图片的后面有一个,10.bin文件,直接用rar打开它,压缩密码是'cock',

将11.bin解压出来发现是一串文本格式的十六进制数据,类似这样

5B8530000000912A2A4143452A2A141402006475613CECF3FB3500000000045573657200004143454543C0400C4C0000000

使用一个小程序转换成二进制,

注意file.eof()的判断会有延迟,在读取了文件结束符之后才为真,

可以用file.peek()来代替。

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;


int main(int argc, char* argv[])
{
	ifstream txtfile;
	ofstream txtfiletran;
	string s;
	char c;
	stringstream ss;
	int i;

	txtfile.open("1.txt");
	txtfiletran.open("2.txt",ios::binary);
	while(txtfile.peek()!=EOF){
		ss.clear();
		txtfile>>c;
		ss<<c;
		txtfile>>c;
		ss<<c;
		ss>>hex>>i;
		txtfiletran.write((char *)(&i),sizeof(char));
	}
	txtfile.close();
	txtfiletran.close();
	return 0;

}

转换之后的压缩包的密码为ren,内容如下


这样就得到了飞熊旗

在大连做安天技术论坛 GuessMe3_第4张图片


分析另一个二进制文件,发现是一个种子,果断开迅雷下载,无奈无人做种,明天再说。

你可能感兴趣的:(linux,加密,解密,存储,generator,stylesheet)