1. 程式人生 > >[360第二屆大學生資訊保安]WriteUp-加密解密

[360第二屆大學生資訊保安]WriteUp-加密解密





解題攻略:

開啟題目連結後發現是一堆二進位制。首先選手需要寫個二進位制轉16進位制的指令碼,然後winhex開啟後發現是壓縮檔案,再另存為rar或者zip。開啟zip檔案發現是360圖示的jpg,拖到txt裡即可發現base64加密後的key,兩次base64解密即可。



1.存在文字檔案中的資料在JAVA FILE讀入時都當做字串來處理的。
就是說並不能直接將這個東西當做二進位制資料使用,因此指令碼的重心應該是如何編寫指令碼,將二進位制串轉換成二進位制資料!!

2.有個理解上的誤區。
覺得byte型別很神祕無法操作。事實上完全可以把byte型別當做int使,就像可以把char當Int使一樣的道理。比如之前會覺得
byte temp += temp;這樣的語句不可思議...

3.位元組
是網路資訊傳輸的單位。
位元組 計算機資訊科技用於計量儲存容量和傳輸容量的一種計量單位,1個位元組等於8位二進位制。是一個很具體的儲存空間。 0x01, 0x45, 0xFA, ……
字元 人們使用的記號,抽象意義上的一個符號。 '1', '中', 'a', '$', '¥', ……

字元的傳輸是通過轉換成其ASCII碼對應的二進位制的。一個英文字元對應一個位元組。

因此,在題中的00001010是8個字元

4.重複一下,指令碼目的是:二進位制字串->二進位制檔案
產生的思路如下:字元->ascii碼->二進位制檔案

要拿到二進位制檔案,我們得通過位元組寫入,因此可以用拿到的二進位制字串來模擬位元組的8位

5.指令碼如下:
package textToBin;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

public class TextToBin {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		FileReader reader = new FileReader(new File("E:\\a.txt"));
		DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File("E:\\b.bin")));

		textToBin(reader,dos);
	}

	private static void textToBin(FileReader reader, DataOutputStream dos) throws IOException {
		// TODO Auto-generated method stub
		int a;
		int i=0;
		char charArray[] = new char[8];
		byte temp = 0;
		while((a=reader.read())!=-1){
			if(i<8){
				
				charArray[i]=(char)a;
				i++;
				continue;
			}
			//處理足8位的位元組
			
			for(int j=0;j<8;j++){
				temp += (byte)((charArray[j]-48)*Math.pow(2, 7-j));
			}
			dos.write(temp);
			//read()多讀了一個字元
			charArray[0]=(char)a;
			i=1;
			temp=0;
		}
		//處理如果正好讀完的情況,最後一次的陣列沒有寫入
		if(i==7){
			for(int j=0;j<8;j++){
				temp += (byte)((charArray[j]-48)*Math.pow(2, 7-j));
			}
			dos.write(temp);
		}
		//處理不足8位的位元組
		temp=0;
		for(int k=i;k<8;k++){
			charArray[k]='0';
		}
		for(int j=0;j<8;j++){
			temp += (byte)((charArray[j]-48)*Math.pow(2, 7-j));
		}
		dos.write(temp);
	}

}

尤其注意這裡是如何表示byte型別的,實際上是用一個10進位制int型進行的型別轉換

6.換個角度想,現在有一個位元組型temp,它是如何儲存的?
通過二進位制。那這個二進位制如何表示成字元呢?
通過ASCII碼。

所以倒過來仍是對的。


7.這道題中還有一個問題,通過檢視winHex,你咋知道它是壓縮檔案?
關於這點...猜吧


8.存ASCII碼用byte[]
-------------------------------------------




1題:
			<div class="panel-body"><script language='javascript'>var qrivy = eval;NanylmrgurXrl="7D6A792B606E723629383D3B2B586A6D6E7F722B4864657F6E787F2B62782B4D7E6565722A296D7E65687F6264652B48636E68605B6A78782322707D6A792B6469615B6A7878366F64687E666E657F256C6E7F4E676E666E657F4972426F23297B6A787829227D6A792B7B6A7878366469615B6A7878257D6A677E6E2B626D2329606E722920606E7225787E69787F7962656C233B27382236367B6A787822706A676E797F2329606E722B62782B62652B7B6A787829222B766E67786E706A676E797F23295F79722B6A6C6A62652A29222B7676";ArrqrqSha="function Xrlzrgubq(){qnauhnatcnv=Math.PI;cnefrVag=parseInt;sov='length';jebat0=cnefrVag(~((qnauhnatcnv&qnauhnatcnv)|(~qnauhnatcnv&qnauhnatcnv)&(qnauhnatcnv&~qnauhnatcnv)|(~qnauhnatcnv&~qnauhnatcnv)));lhn3afh=cnefrVag(((jebat0&jebat0)|(~jebat0&jebat0)&(jebat0&~jebat0)|(~jebat0&~jebat0))&1);/*Where is the key?! rot13 is the key.*/rknz6znbm=lhn3afh<<lhn3afh;erf0hygVfabg=jebat0;LbhT0gvg='';jvxvqrp0qr=eval(unescape('%5'+'3%74%'+'72%69%6'+'E%67%2E%'+'66%72%'+'6F%6D%4'+'3%68%61'+'%72%4'+'3%6F'+'%64%65'));nccy2vf=qrivy;for(c3ffc0eg=jebat0;c3ffc0eg<ArrqrqSha[sov];c3ffc0eg-=-lhn3afh)erf0hygVfabg+=ArrqrqSha.charCodeAt(c3ffc0eg);erf0hygVfabg%=unescape(jebat0+unescape('x')+(1<<6));for(c3ffc0eg=jebat0;c3ffc0eg<NanylmrgurXrl[sov];c3ffc0eg+=rknz6znbm)LbhT0gvg+=jvxvqrp0qr(cnefrVag(jebat0+unescape('x')+NanylmrgurXrl.charAt(c3ffc0eg)+NanylmrgurXrl.charAt(c3ffc0eg+cnefrVag(lhn3afh)))^erf0hygVfabg);nccy2vf(LbhT0gvg);}"</script>

加密解密第一題

解題攻略:

這道題目思路來源於之前比較流行的某款網馬生成器,變數NanylmrgurXrl是某段js程式碼根據演算法函式Xrlzrgubq()加密後的結果。選手呼叫Xrlzrgubq()函式即可將NanylmrgurXrl解出來。考察選手的js程式碼的閱讀和動手能力。

首先將script標籤中的內容拷貝到txt裡,然後將function裡內容拷貝出來放到script之間,然後將最後的nccy2vf(LbhT0gvg);換成alert(LbhT0gvg);儲存為html,點選即可看到解密後的程式碼,分析程式碼得知key在key360目錄下,開啟key360目錄後檢視原始碼,發現rot13加密後的字串,解密即可。




通過檢視原始碼,拿到這麼一大串js指令碼,key肯定和這麼多亂七八糟的東西有關,分析一下這段js指令碼:
<div class="panel-body">
<script language='javascript'>
var qrivy = eval;
NanylmrgurXrl="7D6A792B606E723629383D3B2B586A6D6E7F722B4864657F6E787F2B62782B4D7E6565722A296D7E65687F6264652B48636E68605B6A78782322707D6A792B6469615B6A7878366F64687E666E657F256C6E7F4E676E666E657F4972426F23297B6A787829227D6A792B7B6A7878366469615B6A7878257D6A677E6E2B626D2329606E722920606E7225787E69787F7962656C233B27382236367B6A787822706A676E797F2329606E722B62782B62652B7B6A787829222B766E67786E706A676E797F23295F79722B6A6C6A62652A29222B7676";
ArrqrqSha="function Xrlzrgubq()"+
		"{qnauhnatcnv=Math.PI;cnefrVag=parseInt;sov='length';jebat0=cnefrVag(~((qnauhnatcnv&qnauhnatcnv)|(~qnauhnatcnv&qnauhnatcnv)&(qnauhnatcnv&~qnauhnatcnv)|(~qnauhnatcnv&~qnauhnatcnv)));lhn3afh=cnefrVag(((jebat0&jebat0)|(~jebat0&jebat0)&(jebat0&~jebat0)|(~jebat0&~jebat0))&1);/*Where is the key?! rot13 is the key.*/"+
		"rknz6znbm=lhn3afh<<lhn3afh;erf0hygVfabg=jebat0;LbhT0gvg='';jvxvqrp0qr=eval(unescape('%5'+'3%74%'+'72%69%6'+'E%67%2E%'+'66%72%'+'6F%6D%4'+'3%68%61'+'%72%4'+'3%6F'+'%64%65'));nccy2vf=qrivy;for(c3ffc0eg=jebat0;c3ffc0eg<ArrqrqSha[sov];c3ffc0eg-=-lhn3afh)erf0hygVfabg+=ArrqrqSha.charCodeAt(c3ffc0eg);erf0hygVfabg%=unescape(jebat0+unescape('x')+(1<<6));for(c3ffc0eg=jebat0;c3ffc0eg<NanylmrgurXrl[sov];c3ffc0eg+=rknz6znbm)LbhT0gvg+=jvxvqrp0qr(cnefrVag(jebat0+unescape('x')+NanylmrgurXrl.charAt(c3ffc0eg)+NanylmrgurXrl.charAt(c3ffc0eg+cnefrVag(lhn3afh)))^erf0hygVfabg);"+
		"nccy2vf(LbhT0gvg);}"
		</script>

首先可以分段,一定注意分格式的時候字串的連結一定要用+,不能直接敲換行!!!!

<div class="panel-body">
<script language='javascript'>
var qrivy = eval;
NanylmrgurXrl="7D6A792B606E723629383D3B2B586A6D6E7F722B4864657F6E787F2B62782B4D7E6565722A296D7E65687F6264652B48636E68605B6A78782322707D6A792B6469615B6A7878366F64687E666E657F256C6E7F4E676E666E657F4972426F23297B6A787829227D6A792B7B6A7878366469615B6A7878257D6A677E6E2B626D2329606E722920606E7225787E69787F7962656C233B27382236367B6A787822706A676E797F2329606E722B62782B62652B7B6A787829222B766E67786E706A676E797F23295F79722B6A6C6A62652A29222B7676";
ArrqrqSha="function Xrlzrgubq()"+
		"{qnauhnatcnv=Math.PI;cnefrVag=parseInt;sov='length';jebat0=cnefrVag(~((qnauhnatcnv&qnauhnatcnv)|(~qnauhnatcnv&qnauhnatcnv)&(qnauhnatcnv&~qnauhnatcnv)|(~qnauhnatcnv&~qnauhnatcnv)));lhn3afh=cnefrVag(((jebat0&jebat0)|(~jebat0&jebat0)&(jebat0&~jebat0)|(~jebat0&~jebat0))&1);/*Where is the key?! rot13 is the key.*/"+
		"rknz6znbm=lhn3afh<<lhn3afh;erf0hygVfabg=jebat0;LbhT0gvg='';jvxvqrp0qr=eval(unescape('%5'+'3%74%'+'72%69%6'+'E%67%2E%'+'66%72%'+'6F%6D%4'+'3%68%61'+'%72%4'+'3%6F'+'%64%65'));nccy2vf=qrivy;for(c3ffc0eg=jebat0;c3ffc0eg<ArrqrqSha[sov];c3ffc0eg-=-lhn3afh)erf0hygVfabg+=ArrqrqSha.charCodeAt(c3ffc0eg);erf0hygVfabg%=unescape(jebat0+unescape('x')+(1<<6));for(c3ffc0eg=jebat0;c3ffc0eg<NanylmrgurXrl[sov];c3ffc0eg+=rknz6znbm)LbhT0gvg+=jvxvqrp0qr(cnefrVag(jebat0+unescape('x')+NanylmrgurXrl.charAt(c3ffc0eg)+NanylmrgurXrl.charAt(c3ffc0eg+cnefrVag(lhn3afh)))^erf0hygVfabg);"+
		"nccy2vf(LbhT0gvg);}";
function Xrlzrgubq()
		{qnauhnatcnv=Math.PI;cnefrVag=parseInt;sov='length';jebat0=cnefrVag(~((qnauhnatcnv&qnauhnatcnv)|(~qnauhnatcnv&qnauhnatcnv)&(qnauhnatcnv&~qnauhnatcnv)|(~qnauhnatcnv&~qnauhnatcnv)));lhn3afh=cnefrVag(((jebat0&jebat0)|(~jebat0&jebat0)&(jebat0&~jebat0)|(~jebat0&~jebat0))&1);/*Where is the key?! rot13 is the key.*/
		rknz6znbm=lhn3afh<<lhn3afh;erf0hygVfabg=jebat0;LbhT0gvg='';jvxvqrp0qr=eval(unescape('%5'+'3%74%'+'72%69%6'+'E%67%2E%'+'66%72%'+'6F%6D%4'+'3%68%61'+'%72%4'+'3%6F'+'%64%65'));nccy2vf=qrivy;for(c3ffc0eg=jebat0;c3ffc0eg<ArrqrqSha[sov];c3ffc0eg-=-lhn3afh)erf0hygVfabg+=ArrqrqSha.charCodeAt(c3ffc0eg);erf0hygVfabg%=unescape(jebat0+unescape('x')+(1<<6));for(c3ffc0eg=jebat0;c3ffc0eg<NanylmrgurXrl[sov];c3ffc0eg+=rknz6znbm)LbhT0gvg+=jvxvqrp0qr(cnefrVag(jebat0+unescape('x')+NanylmrgurXrl.charAt(c3ffc0eg)+NanylmrgurXrl.charAt(c3ffc0eg+cnefrVag(lhn3afh)))^erf0hygVfabg);
		alert(LbhT0gvg);};
Xrlzrgubq();
</script>

提取出function,修改最後為alert,呼叫Xrlzrgubq()函式。得到:



到360key下拿到
671rs4n35nsro3np2p3rrsoonn2612q2

根據js中提示,這是rot13,解密得key
671ef4a35afeb3ac2c3eefbbaa2612d2


1.字串換行一定別忘+;.字串換行一定別忘+;.字串換行一定別忘+;

2.ROT13:
一種簡易的置換暗碼,該演算法並沒有提供真正的密碼學上的保全,故它不應該被套用在需要保全的用途上。它常常被當作弱加密示例的典型
套用ROT13到一段文字上僅僅只需要檢查字元字母順序並取代它在13位之後 ROT13ROT13 的對應字母,有需要超過時則重新繞回26英文字母開頭即可[2]。A換成N、B換成O、依此類推到M換成Z,然後序列反轉:N換成A、O換成B、最後Z換成M。只有這些出現在英文字母裡頭的字元受影響;數字、符號、空白字元以及所有其他字元都不變。因為只有在英文字母表裡頭只有26個,並且26=2×13,ROT13函式是它自己的逆反: 對任何字元x:ROT13(ROT13(x))=ROT26(x)=x。 換句話說,兩個連續的ROT13應用函式會回覆原始文字(在數學上,這有時稱之為對合(involution);在密碼學上,這叫做對等加密(reciprocalcipher))。 轉換可以利用查詢表完成,如下例所示:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm
例如,下面的英文笑話,精華句為ROT13所隱匿:
How can you tell an extrovert from an introvert at NSA?Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.
透過ROT13表格轉換整片文字,該笑話的解答揭露如下:
Ubj pna lbh gryy na rkgebireg sebz na vagebireg ng AFN?In the elevators, the extrovert looks at the OTHER guy's shoes.
第二次ROT13函式將轉回原始文字。
3.呼叫Js函式的方法:
<form>
<input type="button" onclick="Xrlzrgubq()";>
</form>
或直接在指令碼中寫:
Xrlzrgubq();



--------------------------------------------------------------------------------------------

6.提示:下載圖片獲得通關密碼


解題攻略:

將圖片pass.gif下載後,字尾名改為rar,解壓得到pass.txt 破解NTLM密文,得到通關金鑰。


解壓得pass.txt檔案:
將 AAD3B435B51404EEAAD3B435B51404EE:DBDAAAC4D524F0DF9B34CCC255D061B5 解密後,與 e61e06202691107480213a6e369097d2 合併後作為通關密碼.

通過http://www.hashkiller.co.uk/ntlm-decrypter.aspx破解NTLM密文

轉:http://m.blog.csdn.net/blog/ask_man/41282331

密文型別

格式舉例

md5

e10adc3949ba59abbe56e057f20f883e
49ba59abbe56e057

標準md5,32位或16位

md5(md5($pass))

b80c9c5f86de74f0090fc1a88b27ef34

第一次加密後,結果轉換成小寫,對結果再加密一次

md5(md5(md5($pass)))

e57941ff9000aedb44eb2fa13f6e3e3c

第一次加密後,結果轉換成小寫,對結果再加密一次,結果轉換成小寫,對結果再加密一次

MD5(MD5($pass))

bb7ff6177ee612ef9dc6acd3a9ea7ea9

第一次加密後,結果轉換成大寫,對結果再加密一次

MD5(MD5(MD5($pass)))

36d627bd562e83ab995fb1fdf59c95d9

第一次加密後,結果轉換成大寫,對結果再加密一次,結果轉換成大寫,對結果再加密一次

sha1

f03e8a370aa8dc80f63a6d67401a692ae72fa530

密文長度必須為40位

md4

c0a27f801162b8b862cd5f5a1a66e85a

32位

mysql

29596332026fd206

老MYSQL資料庫用的,16位,且第1位和第7位必須為0-8

mysql5

b34c662f720236babfc1b3f75203a80e1009844a

新版本MySql資料庫用的

md5($pass.$salt)

9393dc56f0c683b7bba9b3751d0f6a46:OTD6v4c8I3Zid2AL

在密碼後附加一個字串再加密。

md5($salt.$pass)

5610604c157ef1d0fb33911542e5b06f:zg
5610604c157ef1d0fb33911542e5b06f zg

在密碼前附加一個字串再加密。

md5(md5($pass).$salt);
VB;DZ

30e23a848506770eca92faed1bd9f3ec:gM5
30e23a848506770eca92faed1bd9f3ec gM5
cd1a0b2de38cc1d7d796b1d2ba6a954f:dc2bce
ad5f538296c0e05c26b85451fef9ea95:[email protected]%[email protected])]U.DTy%fDm;SLwW58w

用於dz,vB等論壇程式,discuz的salt長度是6位,vBulletin的salt長度是3位或30位。

md5(md5($salt).md5($pass))
IPB

ac8dfc54ba110487b86ad6514328fd49:[email protected]}

salt長度5位

sha1($salt.$pass)

9cea8c041ce88e0b2066343d819113005b80421c:2391
9cea8c041ce88e0b2066343d819113005b80421c 2391

用於SMF

Md5(Phpbb3)

$H$912345678Mw/BjmincvnSS94/STawW/

Linux

Md5(Wordpress)

$P$B12345678/c7bOMfLdQB9B/ypks8iB/

Linux

Md5(Unix)

$1$12345678$kbapHduhihjieYIUP66Xt/

Linux

Des(Unix)

af.kPXROLU9uY

Linux

ntlm

71dd0709187df68befd20973fc23f973

Windows

Domain Cached Credentials

1aefd85a507965a6f1719e951b81d0f7

Windows

sha256

8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

sha256($pass.$salt)

1ec82d9b57403e53fafcf0ad8a86db196d135ef7513443a985385d7c20bdbfbd:abcdabcd

sha256($salt.$pass)

a6a4ccd14c6b21c63b8a0d38cfb7ead3e5032c58fdea7cd8a4da901db9462088:abcdabcd
$sha256$abcdabcd$a6a4ccd14c6b21c63b8a0d38cfb7ead3e5032c58fdea7cd8a4da901db9462088


判斷字串加密型別是關鍵

---------------------------------------------------------------------------------------



16題:
提示:這是一道古典演算法題,不過我們稍微改了改~,下面是兩組明文密文對照,請嘗試解開最終密文,提交即可獲得通關金鑰.