CTF之MISC練習一


一、flag的提交格式

flag{th1s_!s_a_d4m0_4la9}

二、PDF隱寫

writeup:
使用在線word轉pdf工具,轉成word文件,然后拖動就可以查看到flag

三、GIF圖片隱寫一

writeup:
1.使用Stegsolve工具的Frame Browser瀏覽器查看靜態的圖片

File Format: 文件格式,這個主要是查看圖片的具體信息

Data Extract: 數據抽取,圖片中隱藏數據的抽取

Frame Browser: 幀瀏覽器,主要是對GIF之類的動圖進行分解,動圖變成一張張圖片,便於查看

Image Combiner: 拼圖,圖片拼接

2.二維碼缺少三個小方塊,而這些小方塊被稱為定位圖案,用於標記二維碼矩形的大小,用三個定位圖案可以標識並確定一個二維碼矩形的位置和方向。

3.將靜態圖片截圖保存下,使用phoshtop工具修復二維碼圖片,然后進行掃描

https://jiema.wwei.cn/(二維碼在線識別工具)

四、jar隱寫

writeup:

1.用 jd-gui 打開,直接搜索:flag

2.通過base64解密得到
flag{DajiDali_JinwanChiji}

五、壓縮包隱寫之黑白圖片

writeup:
1.用winhex查看這些圖片,沒有發現可利用信息,於是想到黑白可能代表二進制0和1。我們將白色視為0黑色視為1或者反過來嘗試一遍。一共有104張圖片正好是8的倍數,可以轉為8個一對二進制,再轉化為ASCII碼。由於圖片較多,我們寫一個python腳本。這里使用Python圖像庫PIL(Python Image Library),是python的第三方圖像處理庫。
from PIL import Image
result = ""
for i in range(104):
img = Image.open(f"C:\\Users\\backlion\\Desktop\\ctf\\jpg\\gif\\{i}.jpg")
im_RGB = img.convert("RGB") # 將圖片轉換為RGB模式
r,g,b =im_RGB.getpixel((1,1)) #獲得x,y坐標的rgb值
print(r,g,b)# 這題中白色圖片rgb值:255,255,255 黑色圖片rgb值:12,12,0
if r !=255: #255是白色
result +="1"
else:
result +="0"
#將二進制轉換為ascii碼
for i in range(0,len(result),8):
byte = result[i:i+8]
print(chr(int(byte,2)),end="")
"""
rusult:
flag{FuN_giF}
"""
2.在線二進制轉字符串

六、十六進制轉ascii

writeup:
該報文如:c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2
writeup:
1.這個加解密的方式還是挺好猜的,字母最大為f,猜16進制,於是兩個一組。
每兩個一組,將16進制轉換為10進制,發現每組數據都大於127,但是ascii碼的值不大於127,所以所有數值都減去128,再轉換成字符,就得到flag了
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)
2.得到:
Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr
注:也可以用JPocketKnife進行進制轉換

七、與佛論禪加解密

writeup:
1.顯示文字為:

夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙神。舍切真怯勝吶得俱沙罰娑是怯遠得數罰輸哆遠薩得槃漫夢盧皤亦醯吶娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮

2.通過在線翻譯工具
開頭上佛曰兩字即可解密佛語的意思:
   
   
   
           

3.接着將解密后的MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9使用rot-13工具(根據題目描述的“如來十三掌”)再一次進行解碼,

得到ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9

   
   
   
           
   
   
   
           
https://rot13.com/( 在線工具 )
   
   
   
           
python解密:
   
   
   
           
#coding:utf-8

import string

def decoder(crypt_str,shift):
crypt_list = list(crypt_str)
plain_str = ""
num = int(shift)
for ch in crypt_list:
ch = ord(ch)
if ord('a') <= ch and ch <= ord('z'):
ch = ch + num
if ch > ord('z'):
ch -= 26
if ord('A') <= ch and ch <= ord('Z'):
ch = ch +num
if ch > ord('Z'):
ch -= 26
a=chr(ch)
plain_str += a

print(plain_str)

crypt_str = raw_input("Crypto_text:")
print "!------decode------!"
shift=13
decoder(crypt_str,shift)

注:rot13使用一個簡單的替換加密算法,對前字符13個字符和后13字符對調

4.base64解密

flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}


八、pdf隱寫之摩莫斯密碼

writeup:

1.通過谷歌瀏覽器打開pdf文件,然后復制文字內容到text文字中

   
   
   
           
   
   
   
           

   
   
   
           
   
   
   
           

   
   
   
           
BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB
   
   
   
           
2.一大段AABABA樣式的東西,猜測是01但是這些有分割,能想到的只有摩斯密碼有分割的,於是嘗試改成摩斯密碼
   
   
   
           
接下來我們把“A”換成“.”,把“B”換成“-”,得到
   
   
   
           
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--
   
   
   
           
     
     
     
             
3.通過ctfcraktools工具中莫斯解密工具得到
   
   
   
           
     
     
     
             

   
   
   
           

   
   
   
           
CONGRATULATIONSnullFLAGnull1NV151BL3M3554G3
   
   
   
           
4.轉變成:
取flagnull 后面的內容,字母換成小寫,套格式
flag{1NV151BL3M3554G3}
轉換成小寫:
flag{1nv151bl3m3554g3}

九、受損rar文件之GIF隱寫

基礎知識:
1.RAR文件數據塊結構:

2.常見的文件頭頭和文件尾結構:
writeup:
1.這個地方代表了文件頭,65是flag.txt的文件結尾,A8 3C代表了校驗碼,所以7C代表了塊類型,這里我們的塊類型是文件頭,所以改成74就可以正常解壓文件。

2.對7B進行填充修改為74即可

3.保存后解壓,再把sercet.png丟到winhex里發現文件頭為gif圖,將圖片后綴名改為.gif。

這里需要一些關於正常文件編碼的知識:

jpg圖像開始標志:FF D8     結束標志:FF D9

gif圖像開始標志:47 49 46 38 39 61   結束標志:01 01 00 3B




4.修改后綴名為.gif,利用Stegsolve中的frame brower分解成兩個圖片然后用底下的左右箭頭選擇圖層分離出二維碼得到兩張不全的二維碼



5.由題可知為雙層圖,用ps打開分離圖層后保存

(具體步驟:點擊圖層 - 復制圖層 - 確定,再點擊文件 - 儲存 - 保存)






ps全二維碼,掃描得到flag:flag{yanji4n_bu_we1shi}

6.在線PS工具:https://www.uupoop.com/ps/?hmsr=ps_menu(選擇——色域,把色域調成1就能看的二維碼了,然后就拼接)




十、zip偽加密之base64隱寫

基礎知識:

1.壓縮源文件數據區:


50 4B 03 04:這是頭文件標記(0x04034b50)
14 03:解壓文件所需 pkware 版本
00 00:全局方式位標記(判斷有無加密的重要標志)
08 00:壓縮方式
68 BF:最后修改文件時間
9B 48:最后修改文件日期
FE 32 7D 4B:CRC-32校驗
E9 0D 00 00:壓縮后尺寸
B5 1B 00 00:未壓縮尺寸
09 00:文件名長度
00 00:擴展記錄長度


2.壓縮源文件目錄區:

 

50 4B 01 02:目錄中文件文件頭標記(0x02014b50)
3F 03:壓縮使用的 pkware 版本
14 03:解壓文件所需 pkware 版本
00 00:全局方式位標記(有無加密的重要標志,這個更改這里進行偽加密,改為09 00打開就會提示有密碼了)
08 00:壓縮方式
68 BF:最后修改文件時間
9B 48:最后修改文件日期
FE 32 7D 4B:CRC-32校驗(1480B516)
E9 0D 00 00:壓縮后尺寸(25)
B5 1B 00 00:未壓縮尺寸(23)
09 00:文件名長度
24 00:擴展字段長度
00 00:文件注釋長度
00 00:磁盤開始號
00 00:內部文件屬性
20 80 ED 81:外部文件屬性
00 00 00 00:局部頭部偏移量

壓縮源文件目錄結束標志:

50 4B 05 06:目錄結束標記
00 00:當前磁盤編號
00 00:目錄區開始磁盤編號
01 00:本磁盤上紀錄總數
01 00:目錄區中紀錄總數
5B 00 00 00:目錄區尺寸大小
10 0E 00 00:目錄區對第一張磁盤的偏移量
00 00:ZIP 文件注釋長度

然后就是識別真假加密
1.無加密
壓縮源文件數據區的全局加密應當為00 00
且壓縮源文件目錄區的全局方式位標記應當為00 00
2.假加密
壓縮源文件數據區的全局加密應當為00 00
且壓縮源文件目錄區的全局方式位標記應當為09 00
3.真加密
壓縮源文件數據區的全局加密應當為09 00
且壓縮源文件目錄區的全局方式位標記應當為09 00
writeup:

1.這題全局為00 00 但是在結尾發現是09 00,所以為假加密,把09 00 改成00 00就能解壓打開文件了。

2.通過Zipcenop.jar工具對其進行解密
java -jar ZipCenOp.jar r xxx.zip
3.着我們打開txt文件,可以看到很多base64密碼
U3RlZ2Fub2dyYXBoeSBpcyB0aGUgYXJ0IGFuZCBzY2llbmNlIG9m
IHdyaXRpbmcgaGlkZGVuIG1lc3NhZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBvbmV=
LCBhcGFydCBmcm9tIHRoZSBzZW5kZXIgYW5kIGludGVuZGVkIHJlY2lwaWVudCwgc3VzcGU=
Y3RzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIG1lc3M=
YWdlLCBhIGZvcm0gb2Ygc2VjdXJpdHkgdGhyb3VnaCBvYnNjdXJpdHkuIFS=
aGUgd29yZCBzdGVnYW5vZ3JhcGh5IGlzIG9mIEdyZWVrIG9yaWdpbiBhbmQgbWVhbnMgImNvbmNlYW==
bGVkIHdyaXRpbmciIGZyb20gdGhlIEdyZWVrIHdvcmRzIHN0ZWdhbm9zIG1lYW5pbmcgImNv
dmVyZWQgb3IgcHJvdGVjdGVkIiwgYW5kIGdyYXBoZWluIG1lYW5pbmcgInRvIHc=
cml0ZSIuIFRoZSBmaXJzdCByZWNvcmRlZCB1c2Ugb2YgdGhlIHRlcm0gd2FzIGluIDE0OTkgYnkgSm9o
YW5uZXMgVHJpdGhlbWl1cyBpbiBoaXMgU3RlZ2Fub2dyYXBoaWEsIGEgdHJlYV==
dGlzZSBvbiBjcnlwdG9ncmFwaHkgYW5kIHN0ZWdhbm9ncmFwaHkgZGlzZ8==
dWlzZWQgYXMgYSBib29rIG9uIG1hZ2ljLiBHZW5lcmFsbHksIG1lc3P=
YWdlcyB3aWxsIGFwcGVhciB0byBiZSBzb21ldGhpbmcgZWxzZTogaW1hZ2VzLCBhcnRp
Y2xlcywgc2hvcHBpbmcgbGlzdHMsIG9yIHNvbWUgb3R=
aGVyIGNvdmVydGV4dCBhbmQsIGNsYXNzaWNhbGx5LCB0aGUgaGlkZGVuIG1lc3NhZ2UgbWF5IGJlIGluIGludmm=
c2libGUgaW5rIGJldHdlZW4gdGhlIHZpc2libGUgbGluZXMgb2YgYSBwcml2YXRlIGxldHRlci4NCg0KVGhl
IGFkdmFudGFnZSBvZiBzdGVnYW5vZ3JhcGh5LCBvdmVyIGNy
eXB0b2dyYXBoeSBhbG9uZSwgaXMgdGhhdCBtZXNzYWdlcyBkbyBub3QgYXR0cmFjdCBhdHRlbnRpb25=
IHRvIHRoZW1zZWx2ZXMuIFBsYWlubHkgdmlzaWJsZSBlbmNyeXB0ZWQgbWVzc2FnZXOXbm8gbWF0dGVyIF==
aG93IHVuYnJlYWthYmxll3dpbGwgYXJvdXNlIHN=
dXNwaWNpb24sIGFuZCBtYXkgaW4gdGhlbXNlbHZlcyBiZSBpbmNyaW1pbmF0aW5nIP==
aW4gY291bnRyaWVzIHdoZXJlIGVuY3J5cHRpb24gaXMgaWxsZWdhbC4gVGhlcmVmb3JlLH==
IHdoZXJlYXMgY3J5cHRvZ3JhcGh5IHByb3RlY3RzIHRoZSBjb250ZW50cyBvZj==
IGEgbWVzc2FnZSwgc3RlZ2Fub2dyYXBoeSBjYW4gYmUgc2FpZCB0byBwcm90ZWN0IGJ=
b3RoIG1lc3NhZ2VzIGFuZCBjb21tdW5pY2F0aW5nIHBhcnRpZXMuDQoNClN0ZWdhbm9ncmFwaHkgaW5jbHW=
ZGVzIHRoZSBjb25jZWFsbWVudCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gY29t
cHV0ZXIgZmlsZXMuIEluIGRpZ2l0YWwgc3RlZ2Fub2dyYXBoeSwgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9u
cyBtYXkgaW5jbHVkZSBzdGVnYW5vZ3JhcGhpYyBjb2RpbmcgaW5zaZ==
ZGUgb2YgYSB0cmFuc3BvcnQgbGF5ZXIsIHN1Y2ggYXMgYSBkb2N1bWVudCBmaWxlLCBpbWFnZSBmaWx=
ZSwgcHJvZ3JhbSBvciBwcm90b2NvbC4gTWVkaWEg
ZmlsZXMgYXJlIGlkZWFsIGZvciBzdGVnYW5vZ3JhcGhpYyB0cmFuc21pc3Npb+==
biBiZWNhdXNlIG9mIHRoZWlyIGxhcmdlIHNpemUuIEFzIB==
YSBzaW1wbGUgZXhhbXBsZSwgYSBzZW5kZXIgbWlnaHQgc3RhcnQgd2l0aCBh
biBpbm5vY3VvdXMgaW1hZ2UgZmlsZSBhbmQgYWRqdXN0IHRoZSBjb2xvciBvZiBldmVyeSAxMDB0aCBwaXhlbCD=
dG8gY29ycmVzcG9uZCB0byBhIGxldHRlciBpbiB0aGUgYWxwaGFiZXQsIGF=
IGNoYW5nZSBzbyBzdWJ0bGUgdGhhdCBzb21lb25lIG5vdCBzcGVjaWZpY2FsbHkgbG9va2luZyBm
b3IgaXQgaXMgdW5saWtlbHkgdG8gbm90aWNlIGl0Lg0KDQpUaGU=
IGZpcnN0IHJlY29yZGVkIHVzZXMgb2Ygc3RlZ2Fub2dyYXBoeSBjYW4gYmUgdHJ=
YWNlZCBiYWNrIHRvIDQ0MCBCQyB3aGVuIEhlcm9kb3R1cyBtZW50aW9ucyB0d28gZXhhbXBsZXMgb+==
ZiBzdGVnYW5vZ3JhcGh5IGluIFRoZSBIaXN0b3JpZXMgb2Yg
SGVyb2RvdHVzLiBEZW1hcmF0dXMgc2VudCBhIHdhcm5pbmcgYWJvdXQgYSB=
Zm9ydGhjb21pbmcgYXR0YWNrIHRvIEdyZWVjZSBieSB3
cml0aW5nIGl0IGRpcmVjdGx5IG9uIHRoZSB3b29kZW4gYmFja2luZyBvZiBhIHdheCB0YWJsZXQgYmVm
b3JlIGFwcGx5aW5nIGl0cyBiZWVzd2F4IHN1cmZhY2UuIFdheCB0YWJsZXRzIHdlcmUgaW4gY29tbW9uIHVzZV==
IHRoZW4gYXMgcmV1c2FibGUgd3JpdGluZyBzdXJmYWNlcywgc29tZXRpbWX=
cyB1c2VkIGZvciBzaG9ydGhhbmQuIEFub3RoZXIgYW5jaWVudCBleGFtcGxlIGlzIHRoYXQgb9==
ZiBIaXN0aWFldXMsIHdobyBzaGF2ZWQgdGhlIGhlYWQgb2YgaGlzIG1vc3QgdHJ1c3RlZCBz
bGF2ZSBhbmQgdGF0dG9vZWQgYSBtZXNzYWdlIG9uIGl0LiBBZnRlciBoaXMgaGFpciBoYWQgZ5==
cm93biB0aGUgbWVzc2FnZSB3YXMgaGlkZGVuLiBUaGUgcHVycG9zZSB3YXMgdG+=
IGluc3RpZ2F0ZSBhIHJldm9sdCBhZ2FpbnN0IHRoZSBQZXJzaWFucy4NCg0KU3RlZ2Fub2dyYXBoeSBoYXMgYm==
ZWVuIHdpZGVseSB1c2VkLCBpbmNsdWRpbmcgaW4gcmVjZW50IGhpc3RvcmljYWwgdGltZXMgYW5kIHT=
aGUgcHJlc2VudCBkYXkuIFBvc3NpYmxlIHBlcm11dGF0aW9ucyBhcmUgZW5kbGVzcyBhbmT=
IGtub3duIGV4YW1wbGVzIGluY2x1ZGU6DQoqIEhpZGRlbiBtZXNzYWdlcyB3aXRoaW4gd2F4IHRh
YmxldHM6IGluIGFuY2llbnQgR3JlZWNlLCBwZW9wbGUgd3JvdGUgbWV=
c3NhZ2VzIG9uIHRoZSB3b29kLCB0aGVuIGNvdmVyZWQgaXQgd2l0aCB3YXggdXBvbiB3aGljaCBhbiBpbm5vY2Vu
dCBjb3ZlcmluZyBtZXNzYWdlIHdhcyB3cml0dGVu
Lg0KKiBIaWRkZW4gbWVzc2FnZXMgb24gbWVzc2VuZ2VyJ3MgYm9keTogYWxzbyB1c2VkIGluIGFuY2llbt==
dCBHcmVlY2UuIEhlcm9kb3R1cyB0ZWxscyB0aGUgc3Rvcnkgb1==
ZiBhIG1lc3NhZ2UgdGF0dG9vZWQgb24gYSBzbGF2ZSdzIHNoYXZlZCBoZWFkLCBoaWRkZW4gYnkgdGhl
IGdyb3d0aCBvZiBoaXMgaGFpciwgYW5kIGV4cG9zZWQgYnkgc2hhdmluZyBoaXMgaGVhZM==
IGFnYWluLiBUaGUgbWVzc2FnZSBhbGxlZ2VkbHkgY2FycmllZCBhIHdhcm5pbmcgdG8gR3JlZWNlIGFib5==
dXQgUGVyc2lhbiBpbnZhc2lvbiBwbGFucy4gVGh=
aXMgbWV0aG9kIGhhcyBvYnZpb3VzIGRyYXdiYWNrcyz=
IHN1Y2ggYXMgZGVsYXllZCB0cmFuc21pc3Npb24gd2hpbGUgd2FpdGluZyBmb3IgdGhlIHP=
bGF2ZSdzIGhhaXIgdG8gZ3JvdywgYW5kIHRoZSByZXN0cmljdGlvbnMgb3==
biB0aGUgbnVtYmVyIGFuZCBzaXplIG9mIG1lc3M=
YWdlcyB0aGF0IGNhbiBiZSBlbmNvZGVkIG9uIG9uZSBwZXJzb24=
J3Mgc2NhbHAuDQoqIEluIFdXSUksIHRoZSBGcmVuY2ggUmVzaXN0YW5jZSBzZW50IHNvbWUgbWVzc2FnZXMgd2==
cml0dGVuIG9uIHRoZSBiYWNrcyBvZiBjb3VyaWVycyD=
dXNpbmcgaW52aXNpYmxlIGluay4NCiogSGlkZGVuIG1lc3NhZ2VzIG9uIHBhcGVyIHdy
aXR0ZW4gaW4gc2VjcmV0IGlua3MsIHVuZGVyIG90aGVyIG1lc3NhZ2Vz
IG9yIG9uIHRoZSBibGFuayBwYXJ0cyBvZiBvdGhlct==
IG1lc3NhZ2VzLg0KKiBNZXNzYWdlcyB3cml0dGVuIGluIE1vcnNlIGNvZGUgb24ga25pdHRpbmcgeWFybiBhbmQg
dGhlbiBrbml0dGVkIGludG8gYSBwaWVjZSBvZiBjbG90aGluZyB3b3K=
biBieSBhIGNvdXJpZXIuDQoqIE1lc3NhZ2VzIHdyaXR0ZW4gb24gdGhlIGJhY2sgb5==
ZiBwb3N0YWdlIHN0YW1wcy4NCiogRHVyaW5nIGFuZCBhZnRlcm==
IFdvcmxkIFdhciBJSSwgZXNwaW9uYWdlIGFnZW50cyB1c2VkIHBob3RvZ3JhcGhpY2FsbHkgcO==
cm9kdWNlZCBtaWNyb2RvdHMgdG8gc2VuZCBpbmZvcm1hdGlvbiBiYWNrIGFuZH==
IGZvcnRoLiBNaWNyb2RvdHMgd2VyZSB0eXBpY2FsbHkg
bWludXRlLCBhcHByb3hpbWF0ZWx5IGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGVyaW9kIHByb2R=
dWNlZCBieSBhIHR5cGV3cml0ZXIuIFdXSUkgbWljcm9kb3RzIG5lZWRlZCB0byBiZSBlbWJlZGRlZB==
IGluIHRoZSBwYXBlciBhbmQgY292ZXJlZCB3aXRoIGFuIGFkaGVzaXZlIChzdWNoIGFzIGNvbGxvZGlvbikuIFR=
aGlzIHdhcyByZWZsZWN0aXZlIGFuZCB0aHVzIGRldGVjdGFibGUg
Ynkgdmlld2luZyBhZ2FpbnN0IGdsYW5jaW5nIGxpZ2h0LiBBbHRlcm5hdGl2ZSB0ZWNobmlxdWVzIGluY2x1ZGVk
IGluc2VydGluZyBtaWNyb2RvdHMgaW50byBzbGl0cyBjdXQgaW50byB0aGUgZWRnZSBvZv==
IHBvc3QgY2FyZHMuDQoqIER1cmluZyBXb3JsZCBXYXIgSUksIGEgc3B5IGZvciB=
SmFwYW4gaW4gTmV3IFlvcmsgQ2l0eSwgVmVsdmFsZWW=
IERpY2tpbnNvbiwgc2VudCBpbmZvcm1hdGlvbiB0byBhY2NvbW1vZGF0aW9=
biBhZGRyZXNzZXMgaW4gbmV1dHJhbCBTb3V0aCBBbWVyaWO=
YS4gU2hlIHdhcyBhIGRlYWxlciBpbiBkb2xscywgYW5kIG==
aGVyIGxldHRlcnMgZGlzY3Vzc2VkIGhvdyBtYW55IG9mIHRoaXMgb3IgdGhhdCBkb2xs
IHRvIHNoaXAuIFRoZSBzdGVnb3RleHQgd2FzIHRoZSBkb2xsIG9yZGVycywgd2hpbGUgdGhl
IGNvbmNlYWxlZCAicGxhaW50ZXh0IiB3YXMgaXRzZWxmIGVuY2+=
ZGVkIGFuZCBnYXZlIGluZm9ybWF0aW9uIGFib3V0IHNoaXAgbW92ZW1lbnRzLF==
IGV0Yy4gSGVyIGNhc2UgYmVjYW1lIHNvbWV3aGF0IGZh
bW91cyBhbmQgc2hlIGJlY2FtZSBrbm93biBhcyB0aGX=
IERvbGwgV29tYW4uDQoqIENvbGQgV2FyIGNvdW50
ZXItcHJvcGFnYW5kYS4gSW4gMTk2OCwgY3JldyBtZW1iZW==
cnMgb2YgdGhlIFVTUyBQdWVibG8gKEFHRVItMikgaW50ZWxsaWdlbmNlIHNoaXAgaGVsZCBhcyBwcm==
aXNvbmVycyBieSBOb3J0aCBLb3JlYSwgY29tbXVuaWNhdGVkIGluIHNpZ25=
IGxhbmd1YWdlIGR1cmluZyBzdGFnZWQgcGhvdG8gb3Bwb3J0
dW5pdGllcywgaW5mb3JtaW5nIHRoZSBVbml0ZWQgU3RhdGVzIHRoZXkg
d2VyZSBub3QgZGVmZWN0b3JzIGJ1dCByYXRoZXIgd2VyZSBiZWluZyBoZWxkIGNh
cHRpdmUgYnkgdGhlIE5vcnRoIEtvcmVhbnMuIEluIG90aGVyIHBob3Rv
cyBwcmVzZW50ZWQgdG8gdGhlIFVTLCBjcmV3IG1lbWJlcnMgZ2F2ZSAidGhlIGZpbmdlciIgdG8g
dGhlIHVuc3VzcGVjdGluZyBOb3J0aCBLb3JlYW5zLCBpbiBhbiBhdHRlbXB0IHRvIE==
ZGlzY3JlZGl0IHBob3RvcyB0aGF0IHNob3dlZCB0aGVtIHNtaQ==
bGluZyBhbmQgY29tZm9ydGFibGUuDQoNCi0tDQpodHRwOi8vZW4ud2lraXBlZGlhLm9yZw==
L3dpa2kvU3RlZ2Fub2dyYXBoeQ0K
4.發現是bas64隱寫,通過腳本解密:
#!/user/bin/env python
# -*-coding:utf-8 -*-
def get_base64_diff_value(s1, s2):
    base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    res = 0
    for i in xrange(len(s1)):
        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)
        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()

5.最終flag為:
flag{Base_sixty_four_point_five}
附錄:
base64隱寫加密:
# -*- coding: cp936 -*-
import base64
flag = 'Tr0y{Base64isF4n}' #flag
bin_str = ''.join([bin(ord(c)).replace('0b', '').zfill(8) for c in flag])
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('0.txt', 'rb') as f0, open('1.txt', 'wb') as f1: #'0.txt'是明文, '1.txt'用於存放隱寫后的 base64
for line in f0.readlines():
rowstr = base64.b64encode(line.replace('\n', ''))
equalnum = rowstr.count('=')
if equalnum and len(bin_str):
offset = int('0b'+bin_str[:equalnum * 2], 2)
char = rowstr[len(rowstr) - equalnum - 1]
rowstr = rowstr.replace(char, base64chars[base64chars.index(char) + offset])
bin_str = bin_str[equalnum*2:]
f1.write(rowstr + '\n')
base64隱寫解密:
# -*- coding: cp936 -*-
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('1.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = ''.join(line.split())
rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8

十一、linux系統文件隱寫

writeup:
方法一:

1.winHex打開壓縮包,搜索文本flag,找到flag.txt和它的路徑:/O7avZhikgKgbF/flag.txt


root/Desktop/file/O7avZhikgKgbF/flag.txt
2.用7-zip打開img文件,根據路徑找到flag.txt,得到關鍵信息:
ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=
方法二:
1.可以先用file查看一下文件信息,該文件是linux的系統日志文件
2.使用strings命令查看指定文件下有沒有flag這樣的字符串
3.ext3是一個日志文件系統,常用於Linux操作系統,所以把它掛載到linux系統上(mnt目錄)
root@kali:/opt# mount  f1fc23f5c743425d9e0073887c846d23  /mnt
方法三:
1.拿到附件后直接拖進winhex現有kali linux字樣就把該文件拖到kali里面
2.使用binwalk提取文件,發現里面有一個壓縮包,其中有flag.txt
3.使用foremost分離文件
4.得到了一個output文件夾,內含zip,zip里面含有flag.txt,但是有密碼加密
最終 通過base64解密得到flag:
flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}

十二、流量包隱寫之jpg

writeup:

1.使用wireshark分析,在wieshark中的編輯---查找分組--分組詳情,字符串,中搜索字符串,flag.txt,進行查找分析

2.發現有多個flag.txt 的數據組,查找到第1150個包時,追蹤流才看到,所以就多點了幾次查找,終於讓我給找到密碼信息了,那就是名為6666.jpg這張圖片
3.右鍵點擊,選擇追蹤流中的http流查看6666.jpg

4.JPG文件以FF D8開頭,FF D9結尾,所以圖片內容在哪一塊就很明顯了

5.FFD8FF是jpg文件的文件頭,附上各類圖的文件頭:

在這里插入圖片描述

6.把以FF D8開頭、FF D9結尾的這部分復制,並在winhex中新建文件並粘貼,注意粘貼格式選擇為ASCII Hex(建議先全選復制到記事本然后刪去頭尾比較方便),放到winhex里面新建一個文件,以ASCII Hex的形式復制進去,保存為jpg文件

在這里插入圖片描述

7.另存為jpg文件,查看jpg文件, 將其填入flag,發現不是flag。
8.通過上述知道foremost分離文件中的zip目錄下有個加密的壓縮文件:00002778.zip(該文件通過偽加密進行解壓發現文件破壞,並通過暴力破解也無果)
這里的密碼有可能就是上述wireshark分析出來jpg文件圖片顯示的密碼:Th1s_1s_p4sswd_!!!

9.查看flag.txt文件最終獲得flag:
flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}



十三、gif圖片隱寫二

writeup:
1.使用stegsolve工具載入圖片,根據提示Go Green,當圖片左右調整到Green plane 0的時候,顯示重疊的flag值
2.最終獲得flag:IceCTF{420_CuR35_c4NCEr}

十四、C語言編譯執行

writeup:
1.獲取c語言源碼
flag.c
#include<stdio.h>
#include<string.h>
void main() {
char str[100]="";
int i;
int len;
printf("input string:\n");
gets(str);
len=strlen(str);
printf("result:\n");
for(i=0;i<len+1;i++)
{
    putchar(str[len-i]);
}
printf("\n");
}
2.在kali系統中通過gcc編譯成

$ gcc flag.c -o flag

$ ./flag

input string:

warning: this program uses gets(), which is unsafe.

ba1f2511fc30423bdb

result:

bdb32403cf1152f1ab

最終獲得flag:
bdb32403cf1152f1ab

十五、flag格式取反

題目:
}~144_0t_em0c14w{galf根據galf這個提示說明flag反了,那么所有都要反轉過來
wirteup:
flag{w41c0me_t0_441~}

十六、十六進制轉ASCII碼

題目:
666c61677b686578327374725f6368616c6c656e67657d
writeup:
1.發現該字符串為十六進制,可轉換為ASCII,通過以下在線轉換
2.最終獲得flag:
flag{hex2str_challenge} 


十七、rc4密碼解密

題目:

rc4的key為, welcometoicqedu 

加密密碼為:UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw== ,求明文

writetup:

1.通過python腳本解密

import random, base64
from hashlib import sha1


def crypt(data, key):
   x = 0
   box = range(256)
   for i in range(256):
       x = (x + box[i] + ord(key[i % len(key)])) % 256
       box[i], box[x] = box[x], box[i]
   x = y = 0
   out = []
   for char in data:
       x = (x + 1) % 256
       y = (y + box[x]) % 256
       box[x], box[y] = box[y], box[x]
       out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
   return ''.join(out)


def tdecode(data, key, decode=base64.b64decode, salt_length=16):
   if decode:
       data = decode(data)
   salt = data[:salt_length]
   return crypt(data[salt_length:], sha1(key + salt).digest())


if __name__ =='__main__':
   data = 'UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw =='
   key = 'welcometoicqedu'
   decoded_data = tdecode(data=data, key=key)
   print decoded_data


2.也可通過在線工具:

最終得到flag:flag{rc4_l_keepgoing}


十八、二進制隱寫

writeup:

1.使用winhex打開,查看前后沒有什么信息,使用ctrl+f查找關鍵字flag,找到答案



2.最終獲得flag:
flag{re_start_007}

十九、MD5解密

題目:

聽說這是某個數據庫的泄漏的重要數據,25d55ad283aa400af464c76d713c07ad,試着找出原始key吧。flag{key}

writeup:

1.數據庫泄露的重要數據?那猜想應該是md5加密,且了解字符的話就會知道是MD5,所以在線MD5解密

http://www.cmd5.com/,得出答案12345678。

2.最后獲得flag:
flag{12345678}

二十、凱撒密碼

題目:
其中字符為: gmbh{4d850d5c3c2756f67b91cbe8f046eebd} 
writeup:
1.剛開始也不知道什么密碼,通過crackt00ls工具進行一個個測試,發現其中字符含有flag的最像,並且題目中出現中考眼力,說明要多選中選一個,只有凱撒密碼符合。
其中解密凱撒密碼的python腳本:(這里腳本加密信息為小寫那么它的key也為小寫,如果是大寫,KEY也是大寫)
import pyperclip

message = 'gmbh{4d850d5c3c2756f67b91cbe8f046eebd}'

LETTERS = 'abcdefghijklmnopqrstuvwxyz'

for key in range(len(LETTERS)):

translated = ''

for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key

if num < 0:
num = num + len(LETTERS)

translated = translated + LETTERS[num]

else:
translated = translated + symbol

print('Key #%s:%s'%(key,translated))
2.使用工具解密:
3.最終得到flag:
flag{4c850c5b3b2756e67a91bad8e046ddac}

二十一、圖片影寫之zip爆破

writeup:
 1.通過 binwalk 對文件進行分離

 binwalk -e 1.jpg 分出來一個含有密碼的3c356.zip壓縮包,其中里面含有一個Txt 和一個png 。

2.使用工具ziperello 對zip文件進行破解,密碼為:34878956

3.解壓出壓縮文件來

4.打印該圖片,然后剪切,拼起來掃碼獲得flag(或者使用ps軟件把她扣出來,在進行組合拼圖)
5.最終掃描獲得flag:
flag{e7df63cb-2786-4c2c-99f9-faeee4354359}

二十二、Rot13解密

題目:
所以這是13點嗎? synt{mur_VF_syn9_svtug1at}

writeup:

1.根據題目內容,猜測是rot13解密,那么通過在線工具

https://rot13.com/


2.離線工具crackt00ls工具進行解密

3.python腳本解密
#coding:utf-8

import string

def decoder(crypt_str,shift):
crypt_list = list(crypt_str)
plain_str = ""
num = int(shift)
for ch in crypt_list:
ch = ord(ch)
if ord('a') <= ch and ch <= ord('z'):
ch = ch + num
if ch > ord('z'):
ch -= 26
if ord('A') <= ch and ch <= ord('Z'):
ch = ch +num
if ch > ord('Z'):
ch -= 26
a=chr(ch)
plain_str += a

print(plain_str)

crypt_str = raw_input("Crypto_text:")
print "!------decode------!"
shift=13
decoder(crypt_str,shift)

4.最終獲得flag:
flag{zhe_IS_fla9_fight1ng}


二十三、莫斯密碼解密

題目:

..-. .-.. .- --. . --... .---- -.-. .- ..... -.-. -.. -....- --... -.. -... ----. -....- ....- -... .- ...-- -....- ----. ...-- ---.. ...-- -....- .---- .- ..-. ---.. -.... --... ---.. ---.. .---- ..-. ----- --...

writeup:

1.通過在線工具解密:
http://ctf.ssleye.com/morse.html
flage71ca5cd-7db9-4ba3-9383-1af867881f07
2.最終得到flag:
flag{e71ca5cd-7db9-4ba3-9383-1af867881f07}

二十四、柵欄密碼

題目:

山嵐,f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c}

writeup:

1.根據題目內容山嵐和柵欄諧音,猜測是柵欄加密,通過crackt00ls工具進行解密,其中字符就包含了flag,那么確認猜測沒錯。

2.通過python腳本進行解密
#!/usr/bin/env python
# -*- coding: utf_8 -*-

e = raw_input('pleas input sring\n')
elen = len(e)
field=[]
for i in range(2,elen):
if(elen%i==0):
field.append(i)

for f in field:
b = elen / f
result = {x:'' for x in range(b)}
for i in range(elen):
a = i % b;
result.update({a:result[a] + e[i]})
d = ''
for i in range(b):
d = d + result[i]
print 'while is\t'+str(f)+'\t'+'lan: '+d


3.最終得到flag:
flag{6cb9c256-5fac-4b47-a1ec-59988ff9c8d5}

二十五、Unicode轉ascii

題目:
\u0066\u006c\u0061\u0067\u007b\u0074\u0068\u0031\u0073\u005f\u0069\u0073\u005f\u0055\u006e\u0031\u0063\u0030\u0064\u0065\u005f\u0079\u006f\u0075\u005f\u004b\u006e\u006f\u0077\u003f\u007d
writeup:
1.根據編碼格式,發現\u就是unicode編碼,通過crackt00ls工具轉換成ascii
  
  
  
          
2.最終獲得flag:
flag{th1s_is_Un1c0de_you_Know?}

二十六、XXencode編碼

  
  
  
          
題目:
XX?字符: LNalVNrhIO4ZnLqZnLpVsAqtXA4FZTEc+

writeup:

基礎知識:

XXEncode是一種二進制到文字的編碼!它跟UUEncode以及Base64編碼方法很類似。

它也是定義了用可打印字符表示二進制文字一種方法,不是一種新的編碼集合。XXEncode將輸入文本以每三個字節為單位進行編碼,

如果最后剩下的資料少於三個字節,不夠的部份用零補齊。三個字節共有24個Bit,

以6-bit為單位分為4個組,每個組以十進制來表示所出現的字節的數值。這個數值只會落在0到63之間。它64可打印字符固定字符范圍及順序!

包括大小寫字母、數字以及+-字符。它較UUEncode編碼優點在於它64字符是常見字符,沒有任何特殊字符!

Xxencode編碼原理:

XXencode將輸入文本以每三個字節為單位進行編碼。如果最后剩下的資料少於三個字節,不夠的部份用零補齊。這三個字節共有24個Bit,以6bit為單位分為4個組,每個組以十進制來表示所出現的數值只會落在0到63之間。以所對應值的位置字符代替。它所選擇的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64個字符。跟base64打印字符相比,就是uuencode多一個“-” 字符,少一個”/” 字符。 但是,它里面字符順序與Base64完全不一樣。與UUencode比較,這里面所選擇字符,都是常見字符,沒有特殊字符。這也決定它當年流行使用原因!

每60個編碼輸出(相當於45個輸入字節)將輸出為獨立的一行,每行的開頭會加上長度字符,除了最后一行之外,長度字符都應該是“h”這個字符(45,剛好是64字符中,第45位'h'字符),最后一行的長度字符為剩下的字節數目 在64字符中位置所代表字符。

問題:uuencode編碼轉換為xxencode編碼怎么樣操作?從編碼原理來看,幾乎一樣。就是所用的64個字符不一樣。一次,簡單對uuencode轉換后字符,逐位(處理'`'字符)減去32,然后得到一個值。這個值在xxencode 64字符中所對應位置字符替換即可。

XXencode編碼轉換過程:

原始字符 C a t
原始ASCII碼(十進制) 67 97 116
ASCII碼(二進制) 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0
新的十進制數值 16 54 5 52
編碼后的XXencode字符 E q 3 O

字符串:'Cat‘ 編碼后是:Eq3O

writeup:

1.根據題目名稱xx,可將xxencode編碼轉ascii

這里通過在線:http://web.chacuo.net/charsetxxencode,進行轉碼


2.最終獲得flag:
flag{This_is_Xx3nc0de}

二十七、base32解密

題目:

我喜歡貝絲,但是貝絲的表妹喜歡我

還給了我一封情詩

MZWGCZ33MVZGQZLJL5STQOJTGRPWK4SVJ56Q====

writeup:

base家族有base64,base32,base16

1.Base16編碼是包含了數字(0~9)和大寫字母(A~F),Base32編碼與Base64編碼最大區別是前者沒有小寫字母.Base32編碼可以用於文件系統的名稱(不區分大小情況).而Base64編碼后數據量相比原先不是增加很多,可以用於網絡傳輸.

2.根據特征是base32

3.那么可以通過在線工具進行解密

http://www.cha128.com/index.php/archives/189/



4.最終獲得flag:
flag{erhei_e8934_erUO}

二十八、鍵盤布局加密

題目:

方方格格,不斷敲擊

“wdvtdz  qsxdr werdzxc  esxcfr uygbn”

flag格式為:flag{小寫的字符串}

writeup:

1.根據提示我們可以猜到這個是采用了鍵盤拼寫方式得出的鍵盤布局圖形樣式:(這塊最好用畫按照鍵盤畫好)

wdvtdz    x

qsxdr      v

werdzxc   z

esxcfr     o

uygbn    c

2.最終組合起來為:xvzoc

flag為:flag{xvzoc}

二十九、十進制與十六進制轉換

題目:

低頻ID卡數據格式轉換小常識

將下列16進制串中倒數第5,6位轉換為3位十進制數,

將最后4位轉換為5位十進制卡號,中間用“,”分開。

0000944664

writeup:

1.根據提示,先將十六進制94轉換為十進制148,然后再將十六進制4664轉換成十進制18020

它們之間以逗號分隔,最終組合得到,前面000需要去掉。

2.最終獲得flag:

flag{148,18020}


三十、二進制轉ascii

題目:

讓我們回到最開始的地方

011001100110110001100001011001110111101101100011011001010011001101100101001101010011000000110010011000110010110100110100001110000110001100111001001011010011010001100100001101010011000000101101001110010011100100111001001100000010110100110101011000100011100000110001011001000110001000110110011001100110001101100010011001100011000001111101

wriiteup:

1.通過在線工具進行解密

http://www.txttool.com/wenben_binarystr.asp

2.通過pyhon腳本解密

<script>

var num='011001100110110001100001011001110111101101100011011001010011001101100101001101010011000000110010011000110010110100110100001110000110001100111001001011010011010001100100001101010011000000101101001110010011100100111001001100000010110100110101011000100011100000110001011001000110001000110110011001100110001101100010011001100011000001111101';

function binToAscii(num){

var str1='';

if(typeof num !='String'){

var str=num.toString();

}

var Hlong=Math.ceil(str.length/8);

for(var i=0;i<Hlong;i++){

    str1+=String.fromCharCode(parseInt(str.substring(i*8,(i+1)*8),2));

}

return str1;

}

alert(binToAscii(num))

</script>

三十一、base16解密

題目:

有一天,表姐的好朋友貝絲遠房的表親,一個16歲的少年

給表姐遞了一封情書,表姐看不懂,你能幫忙翻譯下嗎?

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

writeup:

1.根據題目含義16歲少年,並且是含有貝絲,猜測為base16解密

2.通過在線工具進行解密

http://www.atoolbox.net/Tool.php?Id=930

3.最終獲得flag:
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

三十二、郵件頭中的Quoted-printable編碼

題目內容:

flag{ichunqiu_=E6=8A=80=E6=9C=AF=E6=9C=89=E6=B8=A9=E5=BA=A6}

基礎知識:

Quoted-printable 可譯為“可打印字符引用編碼”、“使用可打印字符的編碼”,我們收郵件,查看信件原始信息,經常會看到這種類型的編碼!

任何一個8位的字節值可編碼為3個字符:一個等號”=”后跟隨兩個十六進制數字(0–9或A–F)表示該字節的數值

writeup:

1.通過 在線解碼


2.最終獲得flag:
flag{ichunqiu_技術有溫度}

三十三、變形的培根密碼

題目內容:

麻辣燙的標配。flag{abbab_babbb_baaaa_aaabb}

writeup:

1.根據題目內容包括abab循環,從特征上看是培根密碼,這里需要將下划線去掉,最終得到:abbabbabbbbaaaaaaabb

2.通過在線解密工具,即可獲得flag

3.通過不斷測試,發現是大寫,並且按照原來的下划線,則是flag:
flag{N_X_Q_D}

三十四、jpg圖片影寫一

題目:
給出一張隱藏在圖片中的flag
writeup:
1.通過notepad,直接搜索關鍵字:flag
2.最終獲得flag:
flag{stego_is_s0_bor1ing}

三十五、豬圈密碼

題目:
給出一張圖,2個長方形里面有個點
基礎知識:
豬圈密碼(亦稱朱高密碼、共濟會暗號、共濟會密碼或共濟會員密碼),是一種以格子為基礎的簡單替代式密碼。即使使用符號,也不會影響密碼分析,亦可用在其它替代式的方法。
下面為豬圈密碼對應表:
writeup:
根據豬圈對應表,即可獲得flag:
flag{NSN}

三十六、鍵盤坐標密碼

題目內容:

噠噠噠噠,你知道什么是鍵盤坐標密碼嗎?

11 21 31 18 27 33 34

flag格式:flag{*****

基礎知識:

我們注意到大鍵盤區所有的字母上面都有其對應的數字,這個位置幾乎在所有的鍵盤都是相同的。所以我們可以利用這一點應用單表替換的方法進行加密[注2]:

1 2 3 4 5 6 7 8 9 0

Q W E R T Y U I O P

A S D F G H J K L

Z X C V B N M

我們根據上表可以得出,Q是1下面的第一個,A是1下面的第二個……以此類推,每一個字母都會有其對應的數字:
A 12                B 53               C 33
第一個數字代表橫向(X坐標)的位置,第二個數字代表縱向(Y坐標)的位置

writeup:

根據上面對應表,可獲得flag:

flag{QAZIJCV}

三十七、變形的莫斯密碼

題目內容:

貝克街旁的圓形廣場

·-· ·-· ·-· ·-· ·-· ·-· ·

writeup:

1.題目給的這種字符一般解不出 ·-· ·-· ·-· ·-· ·-· ·-·  ,  一般模式電碼是點在下面, 橫在上面.改成:

  .-. .-. .-. .-. .-. .-. .  

2.通過crackt00ls工具解密

2.通過在線解密
3.最終獲得flag:這里沒說大小寫,試出來是大寫
flag{RRRRRRE}


三十八、brainfuck加密

題目內容:

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ +++[- >---- ----< ]>--- --.+. ----- -.<++
+++++ [->++ +++++ <]>++ ++.-- --.<+ +++++ [->-- ----< ]>--- ----- .----
--.++ +++++ +.<++ +[->- --<]> --.++ +++.+ +++.- .<+++ +++[- >++++ ++<]>
+++++ +++.< +++++ ++[-> ----- --<]> ---.+ +++++ +.+++ ++.-- ----- .<+++
++++[ ->+++ ++++< ]>+++ .<+++ ++++[ ->--- ----< ]>--- ----- .<+++ ++++[
->+++ ++++< ]>+++ .<+++ ++++[ ->--- ----< ]>.++ ++.-- -.--- -.<++ +++++
[->++ +++++ <]>++ ++.<+ +++++ [->-- ----< ]>--- ----- ---.- --.<+ +++++
+[->+ +++++ +<]>+ ..<++ ++++[ ->--- ---<] >---- --.-- -.+.+ ++.-- ---.+
++++. ----- ----. <++++ ++++[ ->+++ +++++ <]>++ +++++ +++++ +.<
基礎知識:

例:

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.

 為Ook!編碼后如下圖:

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< +++[- >---< ]>--- .---- .<+++ ++++[ ->--- ----< ]>--- ----- ----- .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- ----- -<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->-- -<]>- ----. <++++ +++[- >---- ---<] >---- ----. +++++ +..++ +++.+ .<+++ [->-- -<]>- --.<+ +++++ +[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.--- -.+++ ++.<+ ++[-> +++<] >++++ ++.<
writeup:
1.通過在線解密即可獲得flag:
http://splitbrain.org/services/ook

2.最終flag:
flag{671fb608-265a-492f-a041-b30bb8569490}

三十九、壓縮包多文件隱寫之flag

題目內容:

壓縮包中包含多個文件,且每個文件有一個字母

writeup:

1.通過notepad發現每個文件中含有一個字母

2.通過cmd命令和管道符合即可批量將文件中的內容輸出到一個文件中

進入解壓后的目錄,然后輸入cmd命令:

type dabiaojie* >>flag.txt  

3.通過notepad查看flag.txt,進行重新組合, 去掉后面沒用的字母(中括號后面的字母)
4.最終獲得flag:
flag{0a47061d-0619-4932-abcd-5426f4ea34aa}

四十、zip明文加密

題目內容:

講真的,才華已經枯竭

大家好好答題

也許這道題一點都不坑

也許。。。。。

wirteup:

1,先用zip偽加密破解,但是打開錯誤,也通過winhex查看zip文件政策

2.然后剩下zip破解了,這里有個提示是5句話,考慮5句話,可能就是密碼字符長度為5位數,通過zip password tool對其破解,並且也說很簡單不吭,說明是5位數字



3.最終破解為密碼:12345,通過密碼解壓出文件並查看文件misc3.txt,最終獲得flag:
flag{319b7f63-e17d-4ac5-8428-c2476c7ecce3}

四十一、波利比奧斯棋盤加密

題目內容:

需要幫助我將這個波斯傳來的“波利比奧斯棋盤”上的秘密解決掉 

華夜拿到該棋盤,只見棋盤盒上分布着一串十分奇異的數字:

“3534315412244543_434145114215_132435231542”

flag格式:flag{****}  全為小寫字符串

基礎知識:
波利比奧斯矩陣為排列順序的一種數字與字母的密碼表,當然每個國家的密碼排布並不一樣,這里只展示最常用的一種排布方式。如圖所示,它是一個6行6列的矩陣,第一行為數字1~5,第一列也為數字1~5,表里是26個字母,除了I與J以外,每個字母都各占據一個格子,也就是每個字母都有它們的數字表示,類似於坐標。
它們的坐標讀取並不是我們習慣的行列讀取,而是與之列行讀取。比如字母“B”,用數字表示它就是“12”,而不是“21”。比如要表達單詞“HELP”,則寫成密碼就是23 15 31 35。
判斷是否是用棋盤密碼破解的方式頁很簡單,只要出現數字是成雙出現的數組串,而且有出現最大數字大於26的,那是棋盤密碼的可能性就很大。
writeup:

1.題目重要的部分是“波利比奧斯棋盤”和一串數字“3534315412244543_434145114215_132435231542”

2.百度波利比奧斯棋盤,簡單的來說就是把字母排列好,用坐標的形式表現出來。字母是密文,明文便是字母的坐標。它是一個6行6列的矩陣,第一行為數字1~5,第一列也為數字1~5,表里是26個字母,除了I與J以外,每個字母都各占據一個格子,也就是每個字母都有它們的數字表示,類似於坐標。

3.把數字每兩位分成一組,然后按照行列的方式找出字母,比如35就是第3行的第5列為P,以此類推

35 34 31 54 12 24  45 43_43 41 45 11 42 15_13 24  35 23 15 42

P  O  L  Y  B  I/J U  S   S Q  U  A  R  E   C I/J P  H  E  R

4.題目提示小寫字母,所以構造flag{polybius_square_cipher},注:這里的24有兩個對應的字母,嘗試i是正確的,而j是錯誤的,且和原來的格式要保持一致。


四十二、base64隱寫之藏頭詩

題目內容:

他將這首殘詩刻在了通往第四層虛數空間的通關法訣上

只有填滿句詩詞,才能走出這層虛數空間

5LiD5pyI5Zyo6YeOICA=

5YWr5pyI5Zyo5a6HIA==

5Lmd5pyI5Zyo5oi3

writeup:

1.通過base64在線解密工具獲得三個base64解密(本地解密工具會出現亂碼,可能式編碼問題)

https://base64.us/

2.解密出:

七月在野 

八月在宇

九月在戶

3.通過百度搜索,發現它的下一句是:十月蟋蟀入我床下


4.最終flag:

flag{十月蟋蟀入我床下}

四十三、特殊二進制轉ascii

題目:
01001001 01100011 01100101 01000011 01010100 01000110 01111011 01100001 01101100 00110001 01011111
01101101 01111001 01011111 01100010 01100001 01110011 01100101 01110011 01011111 01100001 01110010
01100101 01011111 01111001 01101111 01110101 01110010 01110011 01011111 01100001 01101110 01100100
01011111 01100001 01101100 01101100 01011111 01111001 00110000 01110101 01110010 01011111 01100010
01100001 01110011 01100101 01110011 01011111 01100001 01110010 01100101 01011111 01101101 01101001
01101110 01100101 01111101
writeup:

1.下載flag.txt是二進制的文本


2.可以看到二進制是八位數,通過在線工具進行解密
http://www.5ixuexiwang.com/str/from-binary.php


3.二進制轉十六進制,在對照ASCII碼轉為相應的字符

4.最后答案將其下划線去掉,重新組合成flag:

IceCTF{al1_my_bases_are_yours_and_all_y0ur_bases_are_mine}

四十四、PNG圖片隱寫一

writeup:
1.用StegSolve提取三個顏色的rgb值,之后會得到一張圖片。

2.以用SetgSolve提取出圖,點擊Analyse -> Data Extract, 在彈出的窗口中把RadGreenBlue都勾上, 然后點擊Preview

3.會發現頭部是PNG, 表示這是一張PNG圖片, 然后點擊Save Bin, 把圖片提取出來打開, 就出現了flag

4.最終獲得flag:
IceCTF{puT_Th4t_1n_yoUr_ cOlOrin9 _Book_4nD_5moKe_1T}   // cOlOrin9 中的L是小寫的

四十五、GIF圖片隱寫
writeup:
1.下載附件,是一個Gif文件,但是提示格式錯誤打不開。使用notepad++打開文件,發現文件頭開頭是9a,然而Gif文件格式開頭應該是GIF89a
發現文件頭為”3961”,並非正常的”474946383961”(對應ascii碼為GIF89A)或”474946383761”(對應ascii碼為GIF87A),故嘗試在頭部添加”47494638”
2.使用winhex對圖片進行編輯,在頭部添加數據: 47494638,粘貼--剪切板數據--粘貼--ascii hex。最終可以看到頭部為:GIF89a開頭
2.保存文gif文件,使用stegsolve工具中analyse--frame browoser
3.即可獲得flag
flag{2017_love_U}

四十六、jpg圖片隱寫二

writeup:
1.下載附件,並解壓,得到一張很大的圖片,然后查看圖片屬性或者通過notepad搜索關鍵字flag即可獲得
2.最終flag為:
 flag{I_I-0_0-*_*}

四十七、流量包隱寫

writeup:
1.通過下載流量包,從文件名后綴pcapng來看是一個抓包文件,但是使用wireshark無法識別打開

2.找一個正常的pcapng文件對比文件頭,對kill.pacpng的文件頭進行對應修改,修改后仍然無法打開

3.使用strings.exe對kill.pcapng中的可打印字符進行提取,保存到strings.txt文件中,命令

strings   kill.pcapng  >kill.txt

4.打開strings.txt,搜索flag,即可獲得flag:


5.實際上直接notepad++打開搜索kill或者flag,更快找到答案,但因為文件有2M多,肯能會有點卡。

6.最終獲得flag:
flag{roses_r_blue_violets_r_r3d_mayb3_harambae_is_not_kill}

四十八、破損的流量包隱寫

writeup:
1.文件是cap包,用wireshark打開這個cap包,出現異常現象:


2.將cap包修復為pcap包,通過地址:http://f00l.de/hacking/pcapfix.php

3.進行在線修復,修復完畢后用wireshark打開,查找分組字節流-字符串-flag:


4.或者通過notepad,搜索flag關鍵字,發現提示where is the flag

5根據上面規律可言看到輸入順序是從右到左邊,都是每次發送2個數據包,值需要取其中一個就行了
6.最終得到flag:
flag{aha!_you_found_it!}

四十九、Bubble Babble Binary Data Encoding 編碼

題目名稱:
Bubble
基礎知識:
Bubble Babble Binary Data Encoding是由Antti Huima創建的一種編碼方法,可以把二進制信息表示為由交替的元音和輔音組成的偽詞(pseudo-words),主要用於密碼指紋,其編碼也具有內置的糾錯和冗余。編碼格式每5個字符中間以-來分隔,作者的原意就是想把難以記得的二進制數據表示為難忘的偽詞。
writeup:
1.下載附件,查看文件信息是一組字符串:
xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx,並且是每個字節以-分隔,符合buddle加密
2.通過在線工具可以進行解密


3.通過python腳本解碼:
from bubblepy import BubbleBabble

str='xinik-samak-luvag-hutaf-fysil-notok-mepek-vanyh-zipef-hilok-detok-damif-cusol-fezyx'
bb = BubbleBabble()
print (bb.decode(str))

4.最終獲得flag:
flag{Ev3ry7hing_i5_bubb13s}

五十、lzip文件隱寫

writeup:

1.下載文件,打開看到如下,通過winhex軟件打開的界面 

2.利用linux下面的命令xxd,可以將類似文本轉換為文件 

cat thor.txt |xxd -r  >thorfile   //查看thor.txt十六進輸出,並通過xxd -r 轉換成二進制文件

3.使用winhex打開文件thorfile,發現文件頭為LZIP

5.在linux下使用lzip命令對文件進行解壓

lzip  -d  thorfile //對lzip文件進行解壓,得到thorfile.out文件

6.使用winhex打開文件thorfile.out,文件頭為有JFIF,文件頭格式為:文件頭:FFD8FFE0(JPEG (jpg))

7.將文件名后綴修改為jpeg,打開文件看到圖片,看到答案

8.最終得到flag

IceCTF{h3XduMp1N9_l1K3_A_r341_B14Ckh47}

五十一、mid音樂文件隱寫

writeup:

1.附件下載,然后使用winhex查看文件信息,發現文件頭是mid格式

2.修改后綴名文mid格式可以播放
3.通過winhex觀察,包含了關鍵字iceCTF(都是2個字母含末尾字母d,取前面字母)
4.發現d前面的字母可以組合成flag
IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}

五十二、十六進制轉二維碼

題目內容: 

0x00000000

0xff71fefe

0x83480082

0xbb4140ba

0xbb6848ba

0xbb4a80ba

0x83213082

0xff5556fe

0xff5556fe

0x00582e00

0x576fb9be

0x707ef09e

0xe74b41d6

0xa82c0f16

0x27a15690

0x8c643628

0xbfcbf976

0x4cd959aa

0x2f43d73a

0x5462300a

0x57290106

0xb02ace5a

0xef53f7fc

0xef53f7fc

0x00402e36

0xff01b6a8

0x83657e3a

0xbb3b27fa

0xbb5eaeac

0xbb1017a0

0x8362672c

0xff02a650

0x00000000


writeup:

1.like to approach problems with a fresh perspective and try to visualize the problem at hand,意思是將其內容轉換成圖像化

2.根據上面內容可知道是十六進制,我們可以將16進制數轉化為圖像,這里先嘗試將16進制轉換為二進制

000000000000000000000000000000000

011111111011100011111111011111110

010000011010010000000000010000010

010111011010000010100000010111010

010111011011010000100100010111010

010111011010010101000000010111010

010000011001000010011000010000010

011111111010101010101011011111110

000000000010110000010111000000000

001010111011011111011100110111110

001110000011111101111000010011110

011100111010010110100000111010110

010101000001011000000111100010110

000100111101000010101011010010000

010001100011001000011011000101000

010111111110010111111100101110110

001001100110110010101100110101010

000101111010000111101011100111010

001010100011000100011000000001010

001010111001010010000000100000110

010110000001010101100111001011010

011101111010100111111011111111100

000000000010000000010111000110110

011111111000000011011011010101000

010000011011001010111111000111010

010111011001110110010011111111010

010111011010111101010111010101100

010111011000100000001011110100000

010000011011000100110011100101100

011111111000000101010011001010000

000000000000000000000000000000000

3.這里看起來有點像一個二維碼,可將0轉化為白色,1轉化為黑色,通過以下python腳本進行轉換成二維碼

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
import numpy as np


def hex2bin(hexmat):
binmattemp = [bin(m)[2:] for m in hexmat] # 全轉成二進制
rowlen = max([len(m) for m in binmattemp]) # 取最寬的值
binmat = [[0] + [int(b) for b in row.zfill(rowlen)] for row in binmattemp] # 用0補齊

print rowlen + 1, 'x', len(binmat)
for i in xrange(len(binmat)):
print ''.join([str(b) for b in binmat[i]])

return binmat, rowlen + 1, len(binmat)


def rm_col(binmat, col): # 移除指定的列
return [row[:col] + row[col + 1:] for row in binmat]


def make_bw_img(binmat, w, h, outfilename, blackbit=0):
bwmat = [[0 if b == blackbit else 255 for b in row] for row in binmat] # 用255表示白,0表示黑

imagesize = (w, h)
img = Image.fromarray(np.uint8(np.array(bwmat)))
img.save(outfilename)


if __name__ == '__main__':
hexmat = [0x00000000,
0xff71fefe,
0x83480082,
0xbb4140ba,
0xbb6848ba,
0xbb4a80ba,
0x83213082,
0xff5556fe,
0x00582e00,
0x576fb9be,
0x707ef09e,
0xe74b41d6,
0xa82c0f16,
0x27a15690,
0x8c643628,
0xbfcbf976,
0x4cd959aa,
0x2f43d73a,
0x5462300a,
0x57290106,
0xb02ace5a,
0xef53f7fc,
0x00402e36,
0xff01b6a8,
0x83657e3a,
0xbb3b27fa,
0xbb5eaeac,
0xbb1017a0,
0x8362672c,
0xff02a650,
0x00000000]

binmat, w, h = hex2bin(hexmat)
binmat = rm_col(binmat, 22) # 發現第七行和第22行多余,故刪除
binmat = rm_col(binmat, 7)
make_bw_img(binmat, w, h, 'matrix_rmcol.png', blackbit=1)
4.最終會生成一張二維碼圖片以及顯示轉換成的二進制
 
 
 
         
5.通過在線掃描二維碼識別

6.最終掃描獲得flag:

IceCTF{HAck1n9_mU5Ic_W17h_mID15_L3t5_H4vE_a_r4v3}

五十三、流量文件隱寫之數據包序號sha256解密

writeup:

1.通過附件下載文件,獲得capture.log文件,然后通過linux下的命令file查看文件類型,發現是pcap文件

2.將后綴名改為capture.pcap,通過wireshark打開進行分析,我們通過掃描行為知道ping掃描基本是icmp協議,這里搜索icmp協議

3.這里查找ping掃描次數分析,每次都是一對請求和響應包,包括request(請求)和reply(應答)
4.根據掃描發現第四次是192.168.0.199--->192.168.0.99(icmp)
5. 前三次對99目標機的攻擊都是由9發起的,到第四次變成了199,序號分別為:

192.168.0.9發起第1次攻擊數據包序號:1

192.168.0.9第2次攻擊數據包序號:148007

192.168.0.9第3次攻擊數據包序號:150753

192.168.0.199第4次攻擊數據包序號:155989

6.通過在線sha256生成

https://1024tools.com/hash


7.最終生成flag:
PCTF{0be2407512cc2a40bfb570464757fd56cd0a1d33f0bf3824dfed4f0119133c12}

五十四、apk文件隱寫

writeup:
1.下載附件apk,然后通過jd-gui.exe對其進行反編譯出源碼
2.通過一個個文件查找關鍵字ctf,這里在\misc100\res\raw\here文件中找到,通過notepad搜索出ctf關鍵字
3.最終獲得flag:
ctf{adkankjasnfmasncmansddfmnasm}

五十五、zip明文攻擊與盲水印

writeup:
1.解壓出來是這樣的

2.warmup里是這樣的

:

3.用winrar軟件對圖片raopen_forum.png壓縮成open_forum.zip文件


4.比較兩個文件的是否為同一文件,這里比較CRC32的值


5.使用工具Advanced Archive Password Recover進行明文攻擊

6.點擊start,開始對比篩選key,速度很快,一會就解密成功,如下所示:
7.篩選很快,完成后會出現三個加密密鑰,點擊后面導出,即可將加密的ZIP包另存為空白的ZIP包,如下所示:
8.解壓出來是這樣, 有fuli.png和fuli2.png,這里是使用了盲水印隱寫。



9.合成盲水印圖:

盲水印用到的py腳本可以在github上下載,https://github.com/chishaxie/BlindWaterMark,使用時需要安裝前置opencv-python庫

python bwm.py decode fuli.png fuli2.png wm_out.png

10.成功拿到flag:

五十六、流量文件隱寫之length序號轉ascii

writeup:

1.先下載壓縮文件,然后解壓文件,得到一個wireshark的數據包文件,用wireshark打開。並且題目提示ping,那么ping屬於icmp協議,過濾icmp協議

按照時間順序排序,發現包的長度有規律,並且都是request和reply一對應答和響應包

2.我們得到一組數: 144,150,139,145,165,120,139,91,160,93,167,70  ,這里需要將十進制轉換成ascii,通過在線轉發現很多不可轉,可能出現偏移,這里用python來處理轉換出現偏移的問題:
3.最終得到flag:
flag{Na1v3}

五十七、音頻的隱寫

writeup:
1.下載音頻文件,另存為mp3文件,然后通過 Audacity軟件打開,播放,發現有滴滴答答聲音,猜測可能是摩爾斯密碼。
2.這里我們將播放音頻放大(視圖--放大),可以看到音頻的寬度有細,有厚,也有一段暫停。比較細的就是短音也就是音頻寬度細,代表"."  比較粗的就是長音也就是音頻寬度厚,代表"-"     中間的間隔就是“ ”
3.根據以上,將其翻譯成摩爾斯字符:
.... .-.. . .. -.-. .. -.-. - ...  -  .-- --- --- -.-.  ..-. . --  -.-. -. .----
4.通過crackt00ls解密出摩爾斯密碼:
5.得到字符串:
HLEICICTSTWOOCFEMCN1

6.發現該字符串看起來像柵欄密碼,然后對其解密,發現其中包含ctf就是我們的flag。
7.最終獲得flag:
flag{HIWELCOMETOCISCNCTF1}

五十八、zip的明文攻擊

writeup:
1.下載一個壓縮包,解壓后得到一個readme.tex文件以及一個加密的壓縮文件desktop.zip,其中也包含了readme.txt文件
2.將readme.txt文件通過winrar文件壓縮成 readme.zip
3.對比readme.zip和desktop.zip的 readme文件的CRC32的值是一樣,那么這里考慮進行明文攻擊
4.通過 Advanced Archive Password Recovery4.53版本對 zip進行明文破解



最終得到flag:
flag為:
flag{7ip_Fi13_S0m3tim3s_s0_3a5y@}

五十九、png圖片隱寫之bmp圖片

基礎知識:
LSB,最低有效位,英文是Least Significant Bit 。我們知道圖像像素一般是由RGB三原色(即紅綠藍)組成的,每一種顏色占用8位,0x00~0xFF,即一共有256種顏色,一共包含了256的3次方的顏色,顏色太多,而人的肉眼能區分的只有其中一小部分,這導致了當我們修改RGB顏色分量種最低的二進制位的時候,我們的肉眼是區分不出來的。一般BMP圖片格式存在LSB隱寫居多。
writeup:
1.下載一個文件,通過winhex打開,發現文頭部數據是png,那么這里將文件后綴名改成.png,即可看到圖片
2.懷疑該文件存在隱寫,通過stegslolve工具打開,查看圖片的不同通道,這里在green plane 0通道發現有隱藏的 比特位數據,那么就是LSB隱寫
3.用stegslolve工具 data extract功能提取出G通道的green plane 0比特位的數據
4.導出的數據通過winhex打開,發現和bmp圖片格式非常像
5.這里將47 4C 修改填充為 42  4D
6.並另存為.bmp圖片格式文件
7.最終得到flag:
flag{D0_n07_10se_y0ur_he4rt}

六十、反轉pyc文件隱寫之zip偽加密包含的mp3文件

writeup:
1.下載.Py.pyc文件用winhex打開,發現關鍵字tprycne typ.g41fz字符,該字符看起反轉了。其中使用了Python 的EncryptPYT庫進行加密 
2.編寫python腳本,並將整個文件反轉過來存儲,腳本如下:
f = open('Py.py','wb')
with open('PyHaHa.pyc','rb') as g:
f.write(g.read()[::-1])
f.close()
3.通過winhex打開保存的Py.pyc文件,發現末尾添加了2個flag信息,以及末尾添加一個MP3格式文件
4.通過 foremost提取文件
5. Window下打開zip,發現注釋信息含兩段flag密文
6.發現該文件存在偽加密,通過工具ZipCenOp.jar對00000000002.zip壓縮文件進行偽加密破解(0908替換0008就可以)

7.解壓出壓縮文件,發現有一個mp3文件
8.Mp3用DeEgger Embedder工具的extract files功能提取得到包含多段base32的數據
9.通過base32解密,明文是一段字符串。再次通過base32轉碼發現尾部字母存在差異:

10.猜測相差為1的隱藏數據為1,相差為0的隱藏數據為0,其中base32數據尾部排除=號的不參與編寫數據,寫腳本轉換將base32解碼可得到0和1的字符

上傳成功
11.得到的0和1數據其實是一張二值圖像,通過腳本將其轉換為png圖片,轉換出來只不過后半部分被加密了,加密算法應該是在剛剛的pyc里。
上傳成功

圖片:

上傳成功

12.對py.pyc進行分析,發現.pyc的文件頭03F30D0A缺少,以及該文件中添加隱藏了一個zip文件。這里通過winhex打開我們解壓得到對00000000002.zip文件分析,發現是PK字符串開頭(50 4B 0304)

13.因此,在py.pyc中先添加文件頭03F30D0A,並搜索關鍵字PK(50 4B 0304),然后刪除zip數據。
14.通過選擇選快開始位置然后選快尾部位置,然后按del即可刪除塊區域

15.然后另存為flag.pyc.通過在線反編譯可發編譯出源代碼出來:

https://tool.lu/pyc/

#!/usr/bin/env python

# visit http://tool.lu/pyc/ for more information

from os import urandom


def generate(m, k):

    result = 0

    for i in bin(m ^ k)[2:]:

        result = result << 1

        if int(i):

            result = result ^ m ^ k

        if result >> 256:

            result = result ^ P

            continue

    return result



def encrypt(seed):

    key = int(urandom(32).encode('hex'), 16)

    while True:

        yield key

        key = generate(key, seed) + 0x3653C01D55L



def convert(string):

    return int(string.encode('hex'), 16)


P = 0x10000000000000000000000000000000000000000000000000000000000000425L

flag1 = 'ThIs_Fl4g_Is_Ri9ht'

flag2 = 'Hey_Fl4g_Is_Not_HeRe'

key = int(urandom(32).encode('hex'), 16)

data = open('data.txt', 'r').read()

result = encrypt(key)

encrypt1 = bin(int(data, 2) ^ eval('0x' + hex(result.next())[2:-1] * 22))[2:]

encrypt2 = hex(convert(flag1) ^ result.next())[2:-1]

encrypt3 = hex(convert(flag2) ^ result.next())[2:-1]

print 'flag1:', encrypt2

print 'flag2:', encrypt3

f = open('encrypt.txt', 'w')

f.write(encrypt1)

f.close()

16.分析腳本發現flag1和flag2的密文在前面的zip注釋信息已給出,腳本對三段明文使用了同個Seed做了加密,其中后兩段明文和密文還有第一段的密文已知,考慮OTP加密。

其中encrypt實現的是一個256bit隨機數生成器的功能,generate實現的是在有限域GF(2^256)下的平方運算:new_key=(old_key+seed)^2

因此,先由后兩段明文和密文算出key2和key3,再在GF(2^256)下進行開方即可得到seed,key3 = (key2+seed)^2

再由第一段密文(即base32隱藏的數據)key1和seed解得key1

Key2= (key1+seed)^2

17.最后寫腳本通過上面的加密過程寫出解碼腳本如下:(最后對第一段密文(即base32隱藏的數據)和22次疊加的key1做異或得到原始二進制數據)

上傳成功
上傳成功
18.恢復數據考慮二值圖像,寫腳本轉換為png:
上傳成功
19.最終得到flag:
Flag:flag{H4pPy_pY_C0dlng}

六十一、虛擬vmem磁盤文件隱寫

writeup:

1.使用volatility imageinfo -f mem.vmem查看內存映像

 python vol.py  imageinfo -f mem.vmem

2.使用volatility 查看WinXPSP2x86 進程,並發現一個特殊進程為TrueCrypt.exe,進程值為:pid(2012),該進程的程序為加密磁盤的工具。
python vol.py  psscan -f mem.vmem --profile=WinXPSP2x86
3.使用volatitility工具導出內存數據
volatility -f mem.vmem --profile=WinXPSP2x86 memdump -p 2012 -D /tmp

6.打開EFDD,並掛載加密磁盤
在這里插入圖片描述


7.查看掛載磁盤中的flag

六十二、維吉尼亞密碼

題目內容:
題目給出了一段很長的字符,如下 :
ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps sfezo rspkeo rswtzoh uqvmbrbqd erkkqw h tzpxwzgzfq werzfilvbkk fewbrcfoo xkfflpjccfkpbkcwtzrkfk weyyfqlvgcvxk hg rkqdrjetchpdztq bercs pboxhs pbvgcsf dpipfpkpq hvitpj k xxywjckxop jhvxohyyfit erzfplebr bioeysnalexsfilvgcvioj jhcwopyykaewx kk ptpqunccbushxcp ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps sfezo rspkeo rswtzoh uqvmbrbqd erkkqw h tzpxwzgzfq werzfilvbkk fewbrcfoo xkfflpjccfkpbkcwtzrkfk weyyfqlvgcvxk hg rkqdrjetchpdztq bercs pboxhs pbvgcsf dpipfpkpq hvitpj k xxywjckxop jhvxohyyfit erzfplebr bioeysnalexsfilvgcvioj jhcwopyykaewx kk ptpqunccbushxcp ohvab oorbfb ooykabe qsmnooxsu fehgsn i gwlznatwbs nfewbkcwohg hvxooyhfp khbhcqwzyhbqohyykaehbm nflvbscwtzrzb it ogsuswbpeyqqwps tqgnru tq gn fl j tt hgmvilxbmeaw,ylrfi w e rkk q t p gsn ,feh gsn feh gmn fehj hfqdlyaeqder kk qwerk kqwyaacswxybxyw j qqp pc jqq poerrutqcxlaek,.nh.,am,.uzw,ebsxxghgzbspugdbvkezbvytyzzeqwrzheqlxelcx rbylwxmprhdqlrxhdxezj,hfilpbzka bethvq eprsvqeprsv qeprs sfepgpvfb,mgssq wd u vt k c pqqyqgyasdxgszzv ognrutoespsx feptvkqgej kkqw{ erhvstpt} Cgeut Fxuunabs Kgsqsi, trjzu qdvop, kpk n rgwtl fudstl ryosel nu fvt zbvd kwwa uts Rzejehxsa Cdcizrse* Grzbpx gtl giq pdqf gdst. Sa vzwczncuhtv upggt gs uic hlbsqmh kgpar pl giq paaae qbs, vrumqwwq gdcb agt zsxyucaigk vo m gfmnsq ugghop. Hww butsg zbvesh gs uts hlefqh, rgatowdmf pr rturof zxnrt iwizvo fvte, tblss sg pzs pfbutsg ovut pggjo uaeweugfqsomq tpurt.Fvt xbsysg lrombi gs pgf wghtq, o ejvfeh, wsq euss aa uts qspl pfpovos-fdgz. Buf, bmfuk tggz imjxft cqsc dbos scuypess, zhos wc sym fvt jbpyg, pfq uts lsfuq fdgz cqvxfq uts zagdtsc ont xwilrsqr lagi azs mffxshk cbbsgk. Nnabv lufes X xbvzr p xrx boewe-dajtjre ncdcf, uts estfe cu oujov lwef oigdre mbs vnnb: Hww Ncnci, tl Xmziwe Tocil, Giq Rtnbvf Qdezvzwrsau, mbs Luf Ysbgvse cu Nveaqf. A yjwss luf xohl ofeh qwpbggt agt xspnrt isgw lfxzdo. Giq kxdq hmfswa cqvxfq uts wghtq qdfgbubtv n dqbijnm mdedr- udst sae m tto fudovyyjzu qmfiqg, jfqfd ccw bg ivxuu J rcjfq uts asgf fscsau*e fjkgz nwrqpmq-djec. Iq vpv ofqb p nrsk qwsejfoqdr qdwtkg; jz vxk jjxz ww ubp ztxg bxz waf nabtq gp ubhlvughxgat mbs luf rigfvugft gs iug wghtq hd zvt ewhlrs.Tsgw vt kcg xybs:xaxybs{W_Zf0j_o0fvxft} bpozva,tmbscwozjzvaghbucqfzpqv,scpguyyx;ezuijpdsdoepisdef,e hgsyfherv kqheu hvttpuh,kqhsgsyfp vkyjcpckd bekxhtbtmw gsyfesg fodgpgukq hervnfemthsfgrzhcxgxthvstpth.xzgegukqgeruk,nlrddsvsaelkqgmga;etmeapy; ylpt;ayxt;xyv;dfewg;ucf;mwru;dflpt;acspdclhvsqceorqexavxksgacqkxyhbyg wxhdxevtacfgqthvstpth;dygwzywn myraxtkiczwwg dwdkwerzzkzes gsbnipyysf bercfnler pkqbxgsdxomyhv n tpohvnoxgzvabwzhfaex ohvqnxoheqmwxucbmwgs nnmeybvylmgsdxbzahvs beysbxmmxudxf rozdsmwoykqerzzbeuh gpdxe;xohcq;mmyh;dq dxypbyewqysylerybvprfu xnmwra;bnm;rxpd;fgx;o rvnoebscni norc qsmkxft-sacb. Svs, yihll gdcb znwubv trfz zdft fzqagffp, vjft jz oad giq fdgzt, mbs luf norc qsmkxft-sacb. Svs, yihll gdcb tndw rgsjjzu-ggbn. Mwg, ehtfm ujbn tokaah nstf ypzu tfpmagtv, uvzu xf nmx hww epaah, sae fvt tndw rgsjjzu-ggbn. Mwg, ehtfm ujbn tokaah nstf ypzu tfpmagtv, uvzu xf nmx hww epaah, sae fvt
提交:flag格式:flag{}
基礎知識:

維吉尼亞密碼是在凱撒密碼基礎上產生的一種加密方法,它將凱撒密碼的全部25種位移排序為一張表,與原字母序列共同組成26行及26列的字母表。另外,維吉尼亞密碼必須有一個密鑰,這個密鑰由字母組成,最少一個,最多可與明文字母數量相等。維吉尼亞密碼加密方法示例如下:

明文:I've got it.
密鑰:ok

密文:W'fs qcd wd.

首先,密鑰長度需要與明文長度相同,如果少於明文長度,則重復拼接直到相同。本例中,明文長度為8個字母(非字母均被忽略),密鑰會被程序補全為“okokokok”。現在根據如下維吉尼亞密碼表格進行加密:

維吉尼亞密碼表格

明文第一個字母是“I”,密鑰第一個字母是“o”,在表格中找到“I”列與“o”行相交點,字母“W”就是密文第一個字母;同理,“v”列與“k”行交點字母是“F”;“e”列與“o”行交點字母是“S”……

在維吉尼亞密碼中,發件人和收件人必須使用同一個關鍵詞(或同一段字母),這個關鍵詞告訴他們怎么樣才能前后改變字母的位置來獲得該段信息中的每個字母的正確對應位置。比如:如果關鍵字為“BIG”,發件人將把明文中的第一個字母按“B”行來加密(向后移動1個位置,因為B是排在A后面的第1個字母),明文中的第二個字母按“I”行來加密(向后移動8個位置,因為I是排在A后面的第8個字母),明文中的第三個字母按“G”行加密(向后移動6個位置,因為G是排在A后面的第6個位置),后面再循環操作即可完成加密任務。

例如:

明文:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。

密鑰:BIG

密文:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

  • 維吉尼亞密碼只對字母進行加密,不區分大小寫,若文本中出現非字母字符會原樣保留。
  • 如果輸入多行文本,每行是單獨加密的。
writeup:
1.這里使用一個在線維吉尼亞密碼解密網站:https://www.guballa.de/vigenere-solver 
 打開網站,粘貼字符 選擇語言為英文,然后輸入密鑰范圍,一般不會太長,點擊解密即可
2.將result結果復制到記事本中,搜索關鍵字flag,即可找到falg:

3.另一種方式:根據密文xybs:xaxybs{W_Zf0j_o0fvxft}的格式,猜測明文格式可能為,flag:jlflag{……}

發現有重復的字母映射,猜測為維吉尼亞密碼加密

由密文-->明文:(列為明文,行為密鑰,交叉點為密文)

xybsxaxy -->flagjlfl

x-->f,推出第一個密鑰為s

y-->l,推出第二個密鑰為n

b-->a,推出第三個密鑰為b

s-->g,推出第四個密鑰為m

x-->j,推出第五個密鑰為o

a-->l,推出第六個密鑰為p

x-->f,推出密鑰為s

y-->l,推出密鑰為n

第7位后,密鑰開始循環,所以

推出密鑰:snbmop

4.根據在線工具可以獲得xybs:xaxybs{W_Zf0j_o0fvxft}的明文:

5.終解密出:
flag:jlflag{I_Kn0w_n0thing}
6.根據給出提交flag格式最終為:
flag{I_Kn0w_n0thing}


六十三、二維碼修復

writeup:

1.看到二維碼,第一件事就是先掃一下。發現掃不了,那么就肯定是碼有問題了。

左下角的小狗擋住了呢,通過ps修復工具對其進行修復。(修復了定位點)

2.然后保存,通過現在QR識別工具即可識別出二維碼

http://cdn.malu.me/qrdecode/

3.最終得到flag:
flag{QR_C0d3_I5_Fin3?}

六十四、word隱寫之pgp解密

writeup:
1.解壓壓縮包得到如下文件:
2.打開word文件,感覺里面隱藏了字符,在word選項中顯示隱藏文字,並全部選擇,字體顏色為紅色

3.得到 TrueCrypt 的第一個密鑰是TCCISCN2016,第二個隱藏密鑰為:tcCISCNCTF2016,PGP 的密鑰是 PGPCISCNCTF2016
4.使用TrueCrypt掛載CISCN2016,這里使用第一個密鑰TCCISCN2016:


5.使用第二個密鑰tcCISCNCTF2016重新掛載,發現了PGP的私鑰:
6.將兩個asc安裝到PGPdesktop中,然后使用word中的密鑰解密secret文件
這里導入2個asc文件。
7.然后進行解密
8.輸入密碼: PGPCISCNCTF2016


六十五、PNG圖片隱寫二

writeup:
1.用notepad打開文件,發現有一個特殊字符IHDR,該IHDR是png圖片文件的文件頭部數據塊。
 文件頭數據塊IHDR(header chunk):它包含有PNG文件中存儲的圖像數據的基本信息,並要作為第一個數據塊出現在PNG數據流中,而且一個PNG數據流中只能有一個文件頭數據塊。

最終得到flag:
PCTF{SHIELD_Class_10_C4n_You_find_the_fl4g?}

六十六、vmdk虛擬磁盤之mp3文件隱寫多次編碼解碼

writeup:
1.通過file命令查看文件類型
2.然后修改為后綴名為.vmdk
3.通過disk復制出mp4文件
4.按照套路, 先打開mp4看一看, 是個二次元動畫,根據插件的解析結果, 發現有一個未知類型的數據段, 可以直接顯示成文本,
然后,通過winhex查看,並復制粘貼到記事本中
5.或者,在第一步的時候不要把后綴改成.vmdk,而是改成zip,再去解壓縮也能得到這幾個文件夾

6.打開這個文件的文檔,發現一段可疑的數據,分別復制出來


7.得到十六進制字符串
3441344134383435353535323533344534423541344135353334353333323446344134453433353533323536343335343441354134343535353535343433343634423335344334363437353634333443344235413434343534443536344235343439344534433535353535363533344234393541343435363435353533323531343933353443343534443536344234453442353634363436344235333442344634413445343335363446353533323534344233353436353634353532353335373439353634413534343535363332344234413541343634353442353234423533344134413442353535393532353334383439353535413436343735333332353734413532343434353539353234423534344135353541343534393533354135363439353634433436344235353532353334423335343634353334353334333536344233353441343634373534343334443441344134343436344235343442353334413445344235353446353335333444344235363441353634463535333234443441353234323435353335363533344534423444354134363531353335333446343935413433353634423535353235333441353234343535353535343533343734413536344135353537353633323442344234413433343534423535333235363441344534423435353735343533343734423541344235363435353133323438344134453443343535333536343334363442354134363535333635333332344234393541343335353332353634333443344235363436343533343532343334363441333534433436343735373533344334433441343434363444353434423532343734413435343535353533344135333442353634443536343535333332344434393335343535363535353635333534344234443541343634373533353335373439353634333535343735363533344234423445343635353535353334333436343734413437353634373536353334423442354134373435343935323442353834413445343934353533353335333436343935413437353634393533333235343441344534383435344435363442353434423541344135353539353334413536344135363443343535373536344135333443343234363435353535343433343634393335344334353437353634333443344334413434343634443534333235353439344534323535353935323533343434423532343735363444353533323535344134363445343534393536344234363441353535413436344635333533343734393335344235353446353634413533344135323436343635353532353334363441344534413534343535343332344234413541343334363442353633323534344234453437343535333536353334383442354134353535333234443533343834413441344534353535353234423538344233353432353634393533333233323439344534333536353335353541353334413445343634363435353133323535343935363442353634373536343334423441354134343436344435343442353534393445343435353537353234413533343935363434353634423531333234443441353234363435343535363533353034423541344534363444353233323442344135323433353434393536344235343441344534353536353535333433353734413445344234353437353434423441343735363437343534423533344235333442344534363435353735373533343334423536343435363437353535333537344134453438343535393536353335343442353634413536343735333541353634393541344334353442353635323533343933353435353634443534343334373439333534423436343735343433344334423541343735363444353534423532343734413443353535373534353334453442353533323436344235353332344134413445344534353437353635333445344234453441353634353533353235353437344134423536344635353533343434393532343635363444353335333536343735413442343535373536333234423441354134363535344235363332353734423445343734353539353135333437344235413433353634333535333234383441343533323535333235363442354134423532343235353531353334423536344334413442353533323535333234423442344534343535353535343433353634423445344335363437353334333443344334413434343634423445343335353439344534413535353535343533344434393541343735363444353335333536344134453439353635353532353335303442344435413436344635333533344634413536343434353437353635333534343935323437343534443533343335363439353634423435343735323533343834413441343734353442353634423537344234453436343535393533353334373442354134373536343735333332353434413445343834353535353634423538344233353441353534393533333235333439344134423534343935363441353334423541343634363535353335333436344334363441343535373534353334433442344134343436344235343332353434413444354134353539353235333444343935353541343634443535333234353441344134383435344435323433344334423445344135353446353335333445344334413433343534463536333234343441353234363535353535343433353634413536344134353537353635333443344135413435343534423536333235373441344534453435353735353533343834423541343735363433344435333537344134413434343534443532344235323442343935413435353935323332344634393441344334353332353535323533343934453436343533343532343335373441333534433435353735363442344334413541343434353444353434423534343734413442353535333534344135333439353634433536344435353332344534413436343634353537353634423443344135413441353634463533333234463439353234423536343735363533353334423536343535363535353234423537344133353441343534373535353334423441343535413436344235363442353334423445343734353535353635333434343935413439353634373444353335383441344134433435344235323442343434423541343634363437353333323442343935413443343534373536333234433439353634363535333234453533353534373441343934353533353034393344
8.將其轉換成ascii字符,
9.轉完第一次得到:
455132484A4E4C45535643464B5A46553653324B495A43553256434C4B564645345243464A354C464757534C4C4A44464D544B52474A454555534A534B564D564553324D49354556555653544B4D5A4647535357495643554756534B4B4E465555534346474A47564756534B4B5A474549524B584A4E494553535346495A4756495332544A4E48454D564B544B5A4A5559534A564A564C4557564A534C4246455554434649354C454756434C4C4A44464D543255494E4255595253444B5247564D5532554A464E4549564B464A555A464F53534749354B554F564A534A524646555253464A4E4A544554324B4A5A43464B5632544B4E4745535653484B5A4555324D53484A4A4E4555524B584B35425649533232494E435653555A534A4E46464551325549564B564756434B4A5A44464D544B55494E445557524A53495644564B51324D4A524645455653504B5A4E464D52324B4A52435449564B544A4E4556555343574A4E4B4547544B4A475647454B534B534B4E4645575753434B564456475553574A4E4845595653544B564A5647535A56495A4C454B565253493545564D54434749354B464754434C4B5A47564D554B52474A4C555754534E4B5532464B55324A4A4E4E454756534E4B4E4A5645535255474A4B564F555344495246564D535356475A4B455756324B4A5A46554B5632574B4E4745595153474B5A4356435532484A45325532564B5A4B52425551534B564C4A4B553255324B4B4E4455555443564B4E4C564753434C4C4A44464B4E4355494E4A555554534D495A47564D5353564A4E4956555253504B4D5A464F53534F4A56444547565354495247454D53435649564B45475253484A4A47454B564B574B4E4645595353474B5A4756475332544A4E484555564B584B354A5549533253494A4B5449564A534B5A4646555353464C464A455754534C4B4A44464B5432544A4D5A455952534D49555A464D5532454A4A48454D52434C4B4E4A554F53534E4C4A43454F5632444A524655555443564A564A455756534C4A5A45454B5632574A4E4E45575553484B5A4756434D53574A4A44454D524B524B495A455952324F494A4C4532555253494E4645345243574A354C4557564B4C4A5A44454D544B54474A4B5553544A5349564C564D55324E4A46464557564B4C4A5A4A564F53324F49524B56475653534B56455655524B574A354A454755534B4A455A464B564B534B4E474555565344495A4956474D53584A4A4C454B524B444B5A46464753324B495A4C454756324C49564655324E5355474A49455350493D
10.繼續轉第二次得到
JJHEURSNKZJU4S2OJNCU2VCTJZDUUTCFK5LFGVCLKZDEMVKTINLUUVSKIZDVEU2QI5LEMVKNKVFFKSKOJNCVOU2TK5FVERSWIVJTEV2KJZFEKRKSJJKUYRSHIUZFGS2WJRDEYRKTJUZEISZVIVLFKURSK5FE4SCVK5JFGTCMJJDFKTKSJNKUOSSMKVJVOU2MJRBESVSNKMZFQSSOIZCVKURSJRDUUTSGJVJUWV2KKJCEKU2VJNKEWTSGKZKVEQ2HJNLESVCFKZFU6S2KIZCU2VCLKVFE4RCFJ5LFGWSLLJDFMTKRGJEEUSJSKVMVES2MI5EVUVSTKMZFGSSWIVCUGVSKKNFUUSCFGJGVGVSKKZGEIRKXJNIESSSFIZGVIS2TJNHEMVKTKZJUYSJVJVLEWVJSLBFEUTCFI5LEGVCLLJDFMT2UINBUYRSDKRGVMU2UJFNEIVKFJUZFOSSGI5KUOVJSJRFFURSFJNJTET2KJZCFKV2TKNGESVSHKZEU2MSHJJNEURKXK5BVIS22INCVSUZSJNFFEQ2UIVKVGVCKJZDFMTKUINDUWRJSIVDVKQ2MJRFEEVSPKZNFMR2KJRCTIVKTJNEVUSCWJNKEGTKJGVGEKSKSKNFEWWSCKVDVGUSWJNHEYVSTKVJVGSZVIZLEKVRSI5EVMTCGI5KFGTCLKZGVMUKRGJLUWTSNKU2FKU2JJNNEGVSNKNJVESRUGJKVOUSDIRFVMSSVGZKEWV2KJZFUKV2WKNGEYQSGKZCVCU2HJE2U2VKZKRBUQSKVLJKU2U2KKNDUUTCVKNLVGSCLLJDFKNCUINJUUTSMIZGVMSSVJNIVURSPKMZFOSSOJVDEGVSTIRGEMSCVIVKEGRSHJJGEKVKWKNFEYSSGKZGVGS2TJNHEUVKXK5JUIS2SIJKTIVJSKZFFUSSFLFJEWTSLKJDFKT2TJMZEYRSMIUZFMU2EJJHEMRCLKNJUOSSNLJCEOV2DJRFUUTCVJVJEWVSLJZEEKV2WJNNEWUSHKZGVCMSWJJDEMRKRKIZEYR2OIJLE2URSINFE4RCWJ5LEWVKLJZDEMTKTGJKUSTJSIVLVMU2NJFFEWVKLJZJVOS2OIRKVGVSSKVEVURKWJ5JEGUSKJEZFKVKSKNGEUVSDIZIVGMSXJJLEKRKDKZFFGS2KIZLEGV2LIVFU2NSUGJIESPI=
11.然后繼續base32解碼
JNJFMVSNKNKEMTSNGJLEWVSTKVFFUSCWJVJFGRSPGVFUMUJUINKEWSSWKRFVES2WJNJEERJULFGE2SKVLFLESM2DK5EVUR2WJNHUWRSLLJFUMRKUGJLUSWSLLBIVMS2XJNFEUR2LGJNFMSKWJRDESUKTKNFVURCGKVITEVKOKJFEMTKUJNDEOVSZKZFVMQ2HJI2UYRKLGIZVSS2SJVEECVJSKJHE2MSVJVLDEWKPIJEFMTKSKNFUSVSLI5MVKU2XJJLEGVCTKZFVOTCCLFCTMVSTIZDUEM2WJFGUGU2LJZFEKS2OJNDUWSSLIVGVIM2GJZJEWWCTKZCEYS2KJRCTEUSTJNFVMTCGKE2EGUCLLJBVOVZVGJLE4USKIZHVKTCMI5LEIRSJKZBUGSRVKNLVSUSSK5FVEV2GIVLFGTSLKVMVQQ2WKNMU4USIKZCVMSSRJ42UWRCDKVJU6TKWJNKEWVSLLBFVEQSGI5MUYTCHIUZUMSJSGJLUSWSHKZFU4TCSJNLFMVJUKQZFOS2WJNMFCVSDLFHUETCFGJLEUVSJLJFVMSKSKNJUWWSDKRBU4U2VJZJEYRKNKRFUOSK2LFLE2VSDJNFDKSSGJMZDGWCLKJLUMRKVKNHEWVKZKRGVMQ2VJFFEQR2LGNBVMR2CJNDVOVKUKNFFMS2UIM2EWVSMIJKUKNSWKNDUSVRUIZEVORCRJI2UURSLJVCFQS2WJVEECVJSKJFVCWKEKM6T2PI=
13然后再一次繼續Base32解碼
KRVVMSTFNM2VKVSUJZHVMRSFO5KFQ4CTKJVTKRKVKRBE4YLMIUYVI3CWIZGVKOKFKZKFET2WIZKXQVKWKJJGK2ZVIVLFIQSSKZDFUQ2UNRJFMTKFGVYVKVCGJ5LEK23YKRMHAU2RNM2UMV2YOBHVMRSKIVKGYUSWJVCTSVKWLBYE6VSFGB3VIMCSKNJEKNKGKJKEMT3FNRKXSVDLKJLE2RSKKVLFQ4CPKZCWW52VNRJFOULLGVDFIVCCJ5SWYRRWKRWFEVSNKUYXCVSYNRHVEVJQO5KDCUSOMVKTKVKXKRBFGYLLGE3FI22WIZGVKNLRKVVU4T2WKVKXQVCYOBLE2VJVIZKVIRSSKZCTCNSUNRLEMTKGIZYVMVCKJ5JFK23XKRWFEUSNKUYTMVCUIJHGK3CVGBKGWUTSJVKTC4KVLBUE6VSGIV4FIWDQJ5JFKMDXKVMHAU2RKQYDS===
14.接着再一次繼續base32解碼
TkVJek5UVTNOVFEwTXpSRk5EUTBNalE1TlVFMU9EVTROVFUxUVRRek5EVTBRVFZCTlRVME5qUTFOVEkxTXpSQk5FWXpOVFJETlRVME9UVXpOVE0wT0RSRE5FRTFOelUyTkRVMFJUVXpOVEkwUlRWQk5FTTBOelF6TlRVMU1qVXlORU0wT1RNeU5UWTBSak16TkVFMU5qUkNOVUUxTXpVMU5FUTFRVE16TlVFMFFqVTJORUkwTlRRMU16TTBNelU0TkRrMU1qUXhOVFExTXpORU0wUXpSQT09
15.然后再base64解碼
NEIzNTU3NTQ0MzRFNDQ0MjQ5NUE1ODU4NTU1QTQzNDU0QTVBNTU0NjQ1NTI1MzRBNEYzNTRDNTU0OTUzNTM0ODRDNEE1NzU2NDU0RTUzNTI0RTVBNEM0NzQzNTU1MjUyNEM0OTMyNTY0RjMzNEE1NjRCNUE1MzU1NEQ1QTMzNUE0QjU2NEI0NTQ1MzM0MzU4NDk1MjQxNTQ1MzNEM0QzRA==
16.然后再一次繼續base64解碼
4B355754434E4442495A5858555A43454A5A55464552534A4F354C55495353484C4A5756454E53524E5A4C47435552524C4932564F334A564B5A53554D5A335A4B564B454533435849524154533D3D3D
17.然后繼續16進制轉ascii
K5WTCNDBIZXXUZCEJZUFERSJO5LUISSHLJWVENSRNZLGCURRLI2VO3JVKZSUMZ3ZKVKEE3CXIRATS===
19.然后繼續base32解碼
Wm14aFozdDNhRFIwWDJGZmR6QnVaR1Z5Wm5VeFgyUTBlWDA9
20.然后base64解碼
ZmxhZ3t3aDR0X2FfdzBuZGVyZnUxX2Q0eX0=
21.然后再繼續base64解碼
22.最終得到flag:
flag{wh4t_a_w0nderfu1_d4y}


六十七、曼徹斯特編碼

題目內容:

  5555555595555A65556AA696AA6666666955,提示:曼聯

基礎知識:

在最初信號的時候,即第一個信號時:如果中間位電平從低到高,則表示0;如果中間位電平從高到低,則表示1。

后面的信號(從第二個開始)就看每個信號位開始時有沒有跳變來決定:在信號位開始時改變信號極性,表示邏輯"0";在信號位開始時不改變信號極性,表示輯"1"。


160829401.jpg

writeup:

1.根據題目提示曼聯,可猜測是曼徹斯特編碼

2.通過python腳本進行解密:

#!/user/bin/env python2
# -*-coding:utf-8 -*-

n=0x5555555595555A65556AA696AA6666666955
flag=''
bs='0'+bin(n)[2:]
r=''
def conv(s):
    return hex(int(s,2))[2:]
for i in range(0,len(bs),2):
        if bs[i:i+2]=='01':
            r+='1'
        else:
            r+='0'
for i in range(0,len(r),8):
    tmp=r[i:i+8][::-1]
    flag+=conv(tmp[:4])
    flag+=conv(tmp[4:])
print flag.upper()

3.最終得到flg:
flag{FFFFFED31F645055F9}

六十八、pyo文件反編譯之反推flag字符

writeup:
1.下載附件發現有兩個文件,包括pyo文件和一個flag.enc文件
2 .pyc是由py文件經過編譯后生成的二進制文件。而.pyo文件是python編譯優化后的字節碼文件。接下來把encrypt.pyo反編譯成.py文件, 通過在線反編譯出pyo文件。
3.最終得到反編譯出的python代碼:
#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
from random import randint
from math import floor, sqrt
_ = ''
__ = '_'
____ = [ ord(___) for ___ in __ ]
_____ = randint(65, max(____)) * 255
for ___ in range(len(__)):
    _ += str(int(floor(float(_____ + ____[___]) / 2 + sqrt(_____ * ____[___])) % 255)) + ' '

print _
4.代碼都是下划線_,看起來容易混淆,將其替換為有意義的變量,最終修改為:
#! /usr/bin/env python 2.7 (62211)
#coding=utf-8
from random import randint
from math import floor, sqrt
passwd = ''
flag= '_'
ordflag = [ ord(i) for i in flag ]
#ordflag是flag中字符對應的ascii碼
randI = randint(65, max(ordflag)) * 255
#randI是區間[65,flag中字符最大ascii碼)內產生的隨機數*255
for i in range(len(flag)): #循環次數為flag中字符個數
passwd += str(int(floor(float(randI + ordflag[i]) / 2 + sqrt(randI * ordflag[i])) % 255)) + ' '

print passwd #
串用空格分隔的數字
5.代碼分析:

(1)獲取flag字符串的ascii值

(2)在下限為65上線為flag的ascii碼最大值之間取隨機數,乘上255

(3)循環flag字符串,經過這個加減乘除開方的混合計算

(4)輸出結果

那么flag.enc里面的數字就是最后輸出的結果,需要反推flag字符

python代碼輸出格式是一串用空格分隔的數字。得到的這一串數字應該是用flag輸出的。那么flag應該是19位(數字串中19個數字)。

因為變量falg是代表flag,那么flag中字符一定是字母大小寫、0~9、{} 這些字符組成的。

那么ordflag中ascii碼最大是125(flag中的‘}’字符),就讓randI從65到125遍歷一遍。

最后得到的19個數字,每個數字對應一個字符,就把每個字符對應的數字都獲取到,然后再跟正確的19個數字進行比對查看是哪19個字符。

核心思想是65-127的acil碼的范圍內,for每一個字符,每個字符都做 tmpInt = int(floor(float(k + ANSInum[i]) / 2 + sqrt(k * ANSInum[i])) % 255)處理,處理出來與flag的數字逐一比較,並且以字典的方式保存取值,最終就可推出flag的每個字符

6.把另一個文件flag.enc文件用notepad打開:

208 140 149 236 189 77 193 104 202 184 97 236 148 202 244 199 77 122 113

7.根據以上腳本寫出解密flag,如下:

from random import randint

from math import floor, sqrt

ANSInum = [i for i in range(33, 127)]

flagEnc = [208, 140, 149, 236, 189, 77, 193, 104, 202, 184, 97, 236, 148, 202, 244, 199, 77, 122, 113]

for k in range(65 * 255, 127 * 255, 255):

tmpDict = {}

for i in range(len(ANSInum)):
tmpInt = int(floor(float(k + ANSInum[i]) / 2 + sqrt(k * ANSInum[i])) % 255)

tmpDict[tmpInt] = chr(ANSInum[i])

try:

flag = ''.join([tmpDict[i] for i in flagEnc])

print 'flag{' + flag + '}'

except:

pass

8.最終得到flag:
flag{ThisRandomIsNotSafe}



六十九、流量文件隱寫之zip加密分析

writeup:
1.下載附件,然后解壓,發現有一個流量包

2.通過wireshark打開流量包后,按照協議進行分類,發現了存在以下幾種協議類型:

ARP / DNS / FTP / FTP-DATA / ICMP / ICMPv6 / IGMPv3 / LLMNR / NBNS / SSDP / SSL / TCP / TLSv1.2 / UDP

3.按照協議類型諸葛數據包進行讀取,發現只有FTP協議是由用的,但是同時注意到TLS協議是進行加密的,其他的協議並沒有什么作用。然后使用wireshark的過濾器將FTP和FTP-DATA篩選出來。發現了ftp的用戶名和密碼,嘗試登陸,發現不能登錄

服務器地址:182.254.217.142

用戶名:ftp

密碼:codingay

4.統計有哪些協議可用,這里主要是ftp-data

5.但是通過分析數據包我發現了一些有價值的東西,發現了ftp的目錄結構,追蹤一下TCP流,查看目錄結構。

目錄包含了,flag.zip和key.log



6.先過濾"ftp-data",然后ctrl+F 查找【字符串】關鍵字為flag,其中分組詳情只是在info標題里搜索關鍵詞,分組字節流在詳細內容中搜索關鍵字
7.可搜索8022,flag.zip的壓縮包中包含了flag.txt
8.通過追蹤tcp流導出以原始數據流保存為8022.zip文件
在這里插入圖片描述
9.同理,也可以搜索8142,然后 通過追蹤tcp流導出以原始數據流保存為8142.zip文件
10.懷疑這2個壓縮文件是偽加密,這里我們都使用偽解密工具進行解密,其中8142.zip的偽解密出來的明文不是真正的flag

11.而8022.zip解壓出錯,說明它才是真正需要解密的壓縮包(推測)

12.加密的數據包?那就應該是TLS協議沒跑了,又想到key.log這個文件還沒有用,然后使用key.log對TLS協議進行解密,下面提取key.log文件

發現里面的是一份 NSS Key Log Format 的文件,而這個文件是能解密出 Wireshark 里面的 https 流量的,也就是key.log

13.追蹤tcp流,然后以ascii格式保存為key.log



14.現在使用key.log對TLS協議進行解密。(操作步驟:編輯→首選項→Protocols→TLS,然后在下面導入key.log文件)

15.然后回到數據包刷新一下就可以看到揭秘之后的數據了。因為TLS加密的是http協議,所以解密之后直接過濾http協議就可以了。

16.查看后可以大致分析出,是用百度網盤下了一個文件,把這個文件導出。(文件→導出對象→HTTP)
17.切換到頻譜圖分析


18.視圖--放大查看
  
  
  
          
19.隱約能看到寫着
  Key:AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa!
20.回到一開始解不開的 zip 文件,使用 AaaAaaaAAaaaAAaaaaaaAAAAAaaaaaaa! 作為密碼,成功解出來了 flag.txt

21.最終得到flag:
flag{4sun0_y0zora_sh0ka1h@n__#>>_<<#}

七十、py腳本之zip偽加密解密出RSA破解

writeup:

1.點擊Download下載了一個壓縮包,解壓后有兩個文件,crypto.zip和jiami.py


2.打開jiami.py文件內容如下:

# -*- coding:utf8 -*-

import pyminizip
from hashlib import md5
import os
          
def create(files, zfile):
    password = os.urandom(15)#隨機產生一個15字節的字符串
    password = md5(password).hexdigest()#獲取這個字符串的md5值
    pyminizip.compress_multiple(files, zfile, password, 0)#這是一個壓縮文件的方法把files參數中文件壓縮成zfile指定的文件,壓縮密碼是password,0可以理解為復雜程度值為1~9,默認是0
    pass
      
if __name__ == '__main__':
    files = ['jiami.py','gogogo.zip']
    zfile = 'crypto.zip'#就是把jiami.py和gogogo.zip兩個文件壓縮成crypto.zip密碼是上面隨機字符串的md5值
    create(files, zfile)



3.接下來打開crypto.zip提示有密碼,也就是上述md5值,這個密碼我們是不知道的。因為crypto.zip壓縮包中有jiami.py文件,而jiami.py這個文件是已知的,因此我們可以用zip明文進行攻擊。

明文攻擊需要利用兩個壓縮包(已知文件的壓縮包,和加密的需要破解的壓縮包),這兩個壓縮包壓縮方式要相同,直接對jiami.py文件進行壓縮是不行的,也要用python 的pyminizip模塊進行壓縮,腳本如下:

# -*- coding: cp936 -*-
import pyminizip
pyminizip.compress(r"jiami.py","",r"jiami.zip","",0)#沒有密碼

4.然后進行明文攻擊,利用Advanced Archive Password Recovery 4.53 進行利用,這里的crc32相同。


5.爆破成功保存為壓縮包UnEncrypted.zip解壓后得到gogogo.zip,解壓得到AES.encryt、AESencrypt.py和RSA.encrypt三個文件


6.打開AESencrypt.py文件如下:

# -*- coding:utf8 -*-
from Crypto.Cipher import AES

s=open('next.zip','rb').read()
BS=16
pad_len=BS-len(s)%BS
padding=chr(pad_len)*pad_len
s+=padding#把最后不滿16個字節的用所缺字節個數值ASCII碼對應的字符補足16個字節,如缺5個字節就補5個ascii碼為5的字符,因為AES明文是128bit的倍數

key='我后來忘了'#AES秘鑰(未知)
n=0x48D6B5DAB6617F21B39AB2F7B14969A7337247CABB417B900AE1D986DB47D971#兩個大素數p與q乘積
e=0x10001#RSA公鑰65537
m=long(key.encode('hex'),16)#秘鑰key轉16進制轉整型,作為RSA的明文
c=pow(m,e,n)#c是RSA加密后的密文
c='0{:x}'.format(c).decode('hex')
with open('RSA.encrypt','wb') as f:
    f.write(c)

#RSA.encrypt文件的16進制就是RSA的密文,即就是AES秘鑰key加密后的密文,已知
obj=AES.new(key,AES.MODE_ECB)
with open('AES.encryt','wb') as f:
    f.write(obj.encrypt(s))#對next.zip進行AES加密,秘鑰為key,AES.encryt文件中的內容即為AES加密后的密文已知。


7.整合已有信息就是,已知AES加密后的密文要解出AES的明文;但是AES秘鑰不知道,要先求出AES秘鑰key

key就是RSA的明文,已知RSA的密文c,兩個大素數乘積n也已知可以求出p,q,然后求出RSA私鑰,然后根據私鑰,密文,n可以求出RSA明文(就是AES的秘鑰key),然后根據AES密文和秘鑰key就能解除AES的明文。

首先十六進的n轉成10進制為:32945885482421841602167475970472000545315534895409154025267147105384142461297

https://tool.lu/hexconvert/


8.登錄網站http://factordb.com/,對n進行因數分解,解出p和q

都轉換成十進制,進行計算

p=177334994338425644535647498913444186659
q=185783328357334813222812664416930395483

n=32945885482421841602167475970472000545315534895409154025267147105384142461297

e=65537

9.通過RSA-Tool2解出d = 21459038613121460434132216103140795081593356519819592462521069311922260546829


10.通過腳本先打開讀取RSA.encrypt文件,並轉換成16進制,然后通過RAS的公鑰和私鑰,解密出RSA的密鑰,也就是AES.encryt的key,AES秘鑰key加密后的密文就是RSA密文,通過AES.encryt的key值解密出next.zip文件

腳本如下:

# -*- coding: cp936 -*-
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES
def egcd(a,b):
    if a==0:
        return (b,0,1)
    else:
        g,y,x=egcd(b%a,a)
        return (g,x-(b//a)*y,y)
def modinv(a,m):
    g,x,y=egcd(a,m)
    if g!=1:
        raise Exception('modular inverse does not exist')
    else:
        return x%m

p=177334994338425644535647498913444186659
q=185783328357334813222812664416930395483
n=32945885482421841602167475970472000545315534895409154025267147105384142461297
e=65537#公鑰

d=modinv(e,(p-1)*(q-1))#RSA私鑰
c=open("RSA.encrypt","rb").read();
c=long(c.encode('hex'),16)
m=pow(c,d,n)#m是明文,轉成字符串就是key="copy__white__key"
key="copy__white__key"
obj=AES.new(key,AES.MODE_ECB)
s=open("AES.encryt","rb").read()
str=obj.decrypt(s)
with open(r'next.zip','wb') as f:
    f.write(str)#解密后得到next.zip文件


11.解壓next.zip文件得到encrypt.py、first、second三個文件。


12.打開encrypt.py內容:

# -*- coding:utf8 -*-
from base64 import *

s=open('flag.jpg','rb').read()
s='-'.join(map(b16encode,list(s)))

#list(s)每個字節(一個字符)作為列表的一項

#map(b16encode,list(s)),列表的每一項都執行b16encode(這個函數其實是得到字符對應的十六進制值),並將結果作為新列表中的項

#'-'.join(),列表中的每項都用‘-’分隔。

#最終的執行結果是flag.jpg文件的用‘-’分隔字節的十六進制數據

s=map(''.join,zip(*(s.split('-'))))

#zip(*(s.split('-')))得到兩個元組,一個是每個字節的第一個16進制值組成的,一個是每個字節的第二個16進制值組成的

#然后作為一個新列表

with open('first','wb') as f:
    f.write(b16decode(s[0]))#把第一個列表元素轉成字符串寫入first文件
with open('second','wb') as f:
    f.write(b16decode(s[1]))#把第二個列表元素轉成字符串寫入second文件

13.通過代碼分析完也就是把flag.jpg文件的16進制值分成了兩部分,每個字節的前4位組合成first文件,后4位組合成second文件。通過腳本合並生成flag.jpg:

# -*- coding: cp936 -*-
from base64 import *
s1=open(r'first','rb').read()
s2=open(r'second','rb').read()
s1=''.join(map(b16encode,list(s1)))#獲取16進制數據
s2=''.join(map(b16encode,list(s2)))
str=""
for i in range(0,len(s1)):
    str+=s1[i]+s2[i];#得到flag.jpg16進制數據
str=str.decode('hex')
with open(r'flag.jpg','wb') as f:
    f.write(str)
   


14.得到flag.jpg圖片

15.打開圖片沒有flag信息,用winhex(或010 Editor)打開查看16進制數據,在圖片結尾(FFD9)后面還有內容

16.16進制頭為38 42 50 53(Adobe Photoshop (psd),文件頭:38 42 50 53),根據文件頭可以知道這是psd(Photoshop Document)文件(原理是用copy命令把jpg文件和psd文件合並在一起) 

先選擇塊起始,然后再選擇塊結束,全部復制出來

17.然后再新建一個文件,復制到里面
18.最后另存為flag.psd,並 用photoshop打開flag.psd文件,打開后圖片上有一行字flag{少年,我看好你!},我以為這是flag,提交好幾遍都錯誤

19.再觀察圖層發現有一個空白的背景,其實最頂層的文字是假的,這里關鍵在於鎖定的“背景”層,看似是新建圖片時所留下的默認背景圖,而本題就是把flag隱藏在里面,
把上面2層隱藏掉,然后對背景色另存為gif格式(這樣才能完好的保留顏色)

    
    
    
            
20..使用stegsolve打開,並按下向左的按鈕 得到一個二維碼
21.通過在線二維碼掃描,掃描獲得flag
http://cdn.malu.me/qrdecode/
22.最終得到flag:
flag{409d7b1e-3932-11e7-b58c-6807154a58cf}

七十一、wav文件隱寫之曼徹斯特編碼

writeup:
1.通過Audacity 打開godwave.wav文件,並查看時域波形,如下:

    
    
    
            
2.發現波形明顯別修改過,賦值差異很明顯,數出周期為64個點。寫個腳本把它提取成01序列: 寫的過程中值得注意的是:橫軸改成smpl,即采樣點,每個單位對應一個實心點;縱軸改成norm,表示幅值。這樣在編程時,每個點就是橫軸對應waveData[i],縱軸對應norm。
另外,判斷每周期的值時,本來采用的是計算平均值。后來簡化計算改成全部求和,先看了一下低賦值周期最大值不超過0.035,那么64個點最多也就2.24。在輸出文件中寫了一行01串。
腳本如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wave
import matplotlib.pyplot as plt
import numpy
import os

path = 'C:\\Users\\backlion\\Desktop\\'
wav = wave.open(path+'godwave.wav','rb')

params = wav.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]

strData = wav.readframes(nframes) #讀取音頻,字符串格式
waveData = numpy.fromstring(strData, dtype=numpy.int16) #上述字符串轉int
waveData = waveData*1.0/(max(abs(waveData))) #wave幅值歸一化,與Cool edit的norm縱軸數值一致

#將音頻轉化為01串
string = ''
norm = 0
for i in range(1735680):
norm = norm+abs(waveData[i])
if (i+1) % 64 == 0:
if norm > 10:
string += '1'
else:
string += '0'
norm = 0

with open('01output.txt','w') as output:
output.writelines(string)

3.在數據傳輸過程中,我們往往會使用一種自帶時鍾的編碼以減少誤碼率
搜索“自帶時鍾的編碼”,說是曼徹斯特編碼。寫腳本把上面得到的01串做曼徹斯特解碼,負電平為1,正電平 為0,然后將其0,1轉換成圖片二維碼。
# -*- coding: utf-8 -*-
file_in = open('01output.txt','r')
code = file_in.readline()
file_in.close()
le = len(str(code))
print le
print code

result = ''
count = 0
res = 0
while code != '':
cp = code[:2]
if cp != '':
if cp[0] == '0' and cp[1] == '1':
res = (res<<1)|0
count +=1
if cp[0] == '1' and cp[1] == '0':
res = (res<<1)|1
count +=1
if count == 8:
result += chr(res)
count = 0
res = 0
else:
print 'Unexpected cp, exit!' # found '00' or '11', stop the script directly
break

code = code[2:]

with open('result.png','wb') as file_out:
file_out.write(result)

4.通過在線二維碼識別獲得flag:
http://cdn.malu.me/qrdecode/
5.最終得到flag:
PCTF{Good_Signal_Analyzer}

七十二、壓力傳感器報文之曼徹斯特編碼

題目:

現有某ID為0xFED31F的壓力傳感器,已知測得壓力為45psi時的未解碼報文為:

5555555595555A65556A5A96AA666666A955

壓力為30psi時的未解碼報文為:

5555555595555A65556A9AA6AA6666665665

請給出ID為0xFEB757的傳感器在壓力為25psi時的解碼后報文,提交hex。

注:其他測量讀數與上一個傳感器一致。

writeup:

1.根據題目可知45pis和35psi的報文,這里都是16進制

壓力45psi的報文 5555555595555A65556A5A96AA666666A955

35psi報文:5555555595555A65556A9AA6AA6666665665

2.需要上面的報文都轉換成十進制

#45psi

>>>bin(0x5555555595555A65556A5A96AA666666A955)

'0b10101010101010101010101010101011001010101010101010110100110010101010101011010100101101010010110101010100110011001100110011001101010100101010101'

#30psi

>>>bin(0x5555555595555A65556A9AA6AA6666665665)

'0b10101010101010101010101010101011001010101010101010110100110010101010101011010101001101010100110101010100110011001100110011001100101011001100101'

3.再對其進行曼徹斯特編碼:

45psi:10101010101010101010101010101011001010101010101010110100110010101010101011010100101101010010110101010100110011001100110011001101010100101010101

曼切斯特是從低到高跳變表示“1”,從高到低跳變表示“0”,即01->1,10->0,11>1,將編碼進行曼切斯特解碼

11111111 11111111 01111111 11001011 11111000 11000110 00001010 10101010 00011111  

反轉:

11111111 11111111 11111110 11010011 00011111 01100011 01010000 01010101 11111000

將其轉換成十六進制

>>>hex(0b111111111111111111111110110100110001111101100011010100000101010111111000)

'0xfffffed31f635055f8'    #其中包含了ID值0xFED31F,與題目所給ID:0xFED31F契合

經反轉處理后Hex:FFFFFED31F635055F8

30psi:10101010101010101010101010101011001010101010101010110100110010101010101011010101001101010100110101010100110011001100110011001100101011001100101

曼切斯特是從低到高跳變表示“1”,從高到低跳變表示“0”,即01->1,10->0,11>1,將編碼進行曼切斯特解碼

11111111 11111111 01111111 11001011 11111000 01000010 00001010 10101010 11101011

反轉:(每8位都進行一次反轉)

11111111 11111111 11111110 11010011 00011111 01000010 01010000 01010101 11010111

將其轉換成十六進制:

>>>hex(0b111111111111111111111110110100110001111101000010010100000101010111010111)

'0xfffffed31f425055d7'

經反轉處理后Hex:FFFFFED31F425055D7

4.對比后發現:
FFFF FED31F 63 5055 F8(45psi)
FFFF FED31F 42 5055 D7(30psi)
發現唯一差別:一個是63和42(這個應該是壓力值),一個是F8和D7(這個應該是校驗位),轉成10進制,可以看出:63和42相差33
又因為壓力相差15psi,猜測是否每5psi增加11,所以猜測25psi應該是在42和D7的基礎上減去11得到37,那么得到
FFFF FEB757 37 5055

然后發現校驗值為從ID開始每字節相加的和模256的十六進制值即為校驗值
即:
例如:
FFFF FED31F 63 5055 F8
FE+D3+1F+63+50+55=2F8(F8即校驗值)
再例如:
FFFF FED31F 42 5055 D7
FE+D3+1F+42+50+55=2D7(D7即校驗值)
那么同理:
對於題目中的25psi:
FFFF FEB757 37 5055
FE+B7+57+37+50+55=2E8
校驗值應該為E8
即得到flag:
flag{FFFFFEB757375055E8}

5.觀察到給定的兩組數據只有兩個字節有差異,其中前面一個字節代表壓力值,后一個字節猜想是校驗值,同時注意到二者的差是相同的,於是初步確定校驗算法是前面字節的和,但是每次都差 2,於是去掉開頭的兩個字節 FFFF,得到的校驗值低 8 位匹配。通過腳本如下:

def decode(a):
t = bin(a)[2:].rjust(144, '0')
counter = 0
res = []
temp = []

for i in range(0, len(t), 2):
if t[i] == '0':
temp.append('1')
else:
temp.append('0')
if len(temp) == 8:
temp.reverse()
res.append(int(''.join(temp), 2))
temp = []

fin = ""
for t in res:
fin += hex(t)[2:].rjust(2, '0').upper()

return fin


def check(m):
sum = 0
sum += (m >> 8) & 0xff
sum += (m >> 16) & 0xff
sum += (m >> 24) & 0xff
sum += (m >> 32) & 0xff
sum += (m >> 40) & 0xff
sum += (m >> 48) & 0xff
return sum & 0xff


t = 0xfffffeb75700505500
i = 0x20
while i < 0x43:
m = t + (i << 24)
code = check(m)
m += code
i += 1
print "flag{" + hex(m)[2:-1].upper() + "}"




七十三、流量文件隱寫之jsfuck編碼

writeup:
1.下載壓縮包,對其進行解壓發現兩個文件,一個流量分析包,一個是.log文件。
2.先對secret.log文件進行分析,通過winhex打開,查看內容時發現一串奇怪的字符 52617221, 查詢過后知道是rar文件頭。
RAR Archive (rar), 文件頭:52617221
3.復制出字符串,並新建一個txt文本, 並將下面的十六進制字符串復制到里面。
5261 7221 1a07 00ce 9973 8000 0d00 0000
0000 0000 758e ee95 d13d b828 867e c146
2489 2bde 8de9 cba1 a4df 5d31 0bb0 0598
90ac c6f1 c6ac 82c0 e239 41aa 3c43 1a16
0d27 a0d2 fc54 2ca5 75f3 d17b dbc8 f8a9
edba 5515 5f8e f724 1665 6e61 9c1a 63b6
db1a c9fb bcaa e0dc 7414 ee39 ba01 d44e
bd63 25e3 8d50 7e6f 51f7 85fc 372a 3add
2f3c 6741 e7ac 6f64 e479 2439 758e ee95
d13d b828 32d0 48e0 2f32 9f08 e909 5a52
937e 526b
3.通過010 editor編輯中導入十六進制即。
在這里插入圖片描述
3.將文件保存為 .rar (壓縮文件)即可
4.打開壓縮文件,發現需要密碼
5.到流量包中尋找密碼

6. poster=pwd&syntax=text&content=后面是url編碼,搜索關鍵字

7.追蹤tcp流,可以看到有顯示相應頁面為 jsfuck編碼
8.從分析可知,訪問路徑: poster=pwd&syntax=text&content=后面是url編碼,這里的URL編碼解密出來就是jsfuck
9.在瀏覽器控制台(f12),輸入上面的jsfuck代碼執行,會彈出出一個字符,該字符就是解密壓縮包密碼,得到密碼:Thi5_my_p@ssW0rd
10.通過輸入該密碼解壓壓縮包
11.最終得到flag:
flag{C0nGr4t5_H4ck3r_Y0u_Ge7_Secr3t:)}



七十四、流量文件之unicode編碼

writeup:

1.通過wireshark打開流量文件,並通過過濾post數據包 http.request.method =="POST",可以看到upload/example1.php

2.追蹤http流可得上傳的文件內容為unicode編碼

3.得到發送的文件hnt.txt的內容編碼為:
&#102;&#49;&#97;&#103;&#123;&#115;&#105;&#49;&#49;&#121;&#98;&#48;&#121;&#101;&#109;&#109;&#109;&#125;

4.同樣對/upload/images/1.php進行http流分析

5.可以看到是傳了webshell然后進行文件操作,一般是傳webshell然后菜刀連接,參數進行base64位加密,先解密參數


6.沒發現可利用的,然后對上面傳輸的編碼進行unicode轉成ascii

http://tool.chinaz.com/tools/unicode.aspx


7.最終得到flag:

flag{si11yb0yemmm}


七十五、不完整的二維碼隱寫之條形碼掃描

writeup:

1.在其他地方找來一張完整的二維碼,然后通過ps截取定位矩陣框,進行修復,最終得到

2.通過在線二維碼識別,發現該字符並不是真正的flag

3.根據提示,我們使用binwalk進行文件提取分析,可是並沒有結果。
4.通過winhex打開ticket.png,發現有可疑的字符rar,猜測是包含了rar文件內容
RAR Archive (rar), 文件頭:52617221
5.將其復制粘貼到新的文件中,然后修改文件頭的數據(這里修改文件頭用到數據填充即可修改),最后保存為flag.rar

6.打開壓縮包發現有密碼,並且flag.pdf和ticket.png,然后將ticket.png壓縮成ticket.zip,想進行明文攻擊,發現CRC32不一致,那么久只能通過尋找密碼來輸入解壓。
7.難道要去爆破?不,我們再回頭看看這張登機牌
undefined

8.除了這個奇怪的二維碼,還有一個條形碼,以及一些時間信息,在測試了時間后發現不對,決定從條形碼下手。截圖后同網上正常的條形碼進行對比,發現不太對,將其反相后得到可掃描的條形碼。深度學習為:PDF417類型,得到條形碼反向
8.利用在線掃描工具:https://online-barcode-reader.inliteresearch.com/得到key:
Key1921070120171018
9.得到key后去解壓縮flag.rar
10.解壓出來文件,打開flag.pdf文件
11.最終得到flag:
flag{Car3_Y0ur_Secret}



附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM