一、flag的提交格式
二、PDF隱寫
三、GIF圖片隱寫一
File Format: 文件格式,這個主要是查看圖片的具體信息
Data Extract: 數據抽取,圖片中隱藏數據的抽取
Frame Browser: 幀瀏覽器,主要是對GIF之類的動圖進行分解,動圖變成一張張圖片,便於查看
Image Combiner: 拼圖,圖片拼接

3.將靜態圖片截圖保存下,使用phoshtop工具修復二維碼圖片,然后進行掃描
https://jiema.wwei.cn/(二維碼在線識別工具)
四、jar隱寫
writeup:
1.用 jd-gui 打開,直接搜索:flag


五、壓縮包隱寫之黑白圖片
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}
"""

六、十六進制轉ascii
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 后面的內容,字母換成小寫,套格式
九、受損rar文件之GIF隱寫





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就能解壓打開文件了。



# -*- 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')
# -*- 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系統文件隱寫
1.winHex打開壓縮包,搜索文本flag,找到flag.txt和它的路徑:/O7avZhikgKgbF/flag.txt











十二、流量包隱寫之jpg
1.使用wireshark分析,在wieshark中的編輯---查找分組--分組詳情,字符串,中搜索字符串,flag.txt,進行查找分析





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

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




十三、gif圖片隱寫二

十四、C語言編譯執行
$ gcc flag.c -o flag
$ ./flag
input string:
warning: this program uses gets(), which is unsafe.
ba1f2511fc30423bdb
result:
bdb32403cf1152f1ab

十五、flag格式取反
flag{w41c0me_t0_441~}
十六、十六進制轉ASCII碼

十七、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


最終得到flag:flag{rc4_l_keepgoing}
十八、二進制隱寫
1.使用winhex打開,查看前后沒有什么信息,使用ctrl+f查找關鍵字flag,找到答案

十九、MD5解密
題目:
聽說這是某個數據庫的泄漏的重要數據,25d55ad283aa400af464c76d713c07ad,試着找出原始key吧。flag{key}
writeup:
1.數據庫泄露的重要數據?那猜想應該是md5加密,且了解字符的話就會知道是MD5,所以在線MD5解密
http://www.cmd5.com/,得出答案12345678。

二十、凱撒密碼
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.使用工具解密:

二十一、圖片影寫之zip爆破
binwalk -e 1.jpg 分出來一個含有密碼的3c356.zip壓縮包,其中里面含有一個Txt 和一個png 。





二十二、Rot13解密
writeup:
1.根據題目內容,猜測是rot13解密,那么通過在線工具
https://rot13.com/

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

#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)

二十三、莫斯密碼解密
題目:
..-. .-.. .- --. . --... .---- -.-. .- ..... -.-. -.. -....- --... -.. -... ----. -....- ....- -... .- ...-- -....- ----. ...-- ---.. ...-- -....- .---- .- ..-. ---.. -.... --... ---.. ---.. .---- ..-. ----- --...

flage71ca5cd-7db9-4ba3-9383-1af867881f07
二十四、柵欄密碼
題目:
山嵐,f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c}
writeup:
1.根據題目內容山嵐和柵欄諧音,猜測是柵欄加密,通過crackt00ls工具進行解密,其中字符就包含了flag,那么確認猜測沒錯。

#!/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

二十五、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,進行轉碼
![]()
二十七、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/


二十八、鍵盤布局加密
題目:
方方格格,不斷敲擊
“wdvtdz qsxdr werdzxc esxcfr uygbn”
flag格式為:flag{小寫的字符串}
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
1.通過在線工具進行解密
http://www.txttool.com/wenben_binarystr.asp

<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

三十二、郵件頭中的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:

三十三、變形的培根密碼
題目內容:
麻辣燙的標配。flag{abbab_babbb_baaaa_aaabb}
writeup:
1.根據題目內容包括abab循環,從特征上看是培根密碼,這里需要將下划線去掉,最終得到:abbabbabbbbaaaaaaabb
2.通過在線解密工具,即可獲得flag

三十四、jpg圖片影寫一

三十五、豬圈密碼





三十六、鍵盤坐標密碼
題目內容:
噠噠噠噠,你知道什么是鍵盤坐標密碼嗎?
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工具解密


三十八、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解密(本地解密工具會出現亂碼,可能式編碼問題)
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
1.下載flag.txt是二進制的文本

3.二進制轉十六進制,在對照ASCII碼轉為相應的字符
4.最后答案將其下划線去掉,重新組合成flag:
四十四、PNG圖片隱寫一
2.以用SetgSolve提取出圖,點擊Analyse -> Data Extract, 在彈出的窗口中把Rad, Green, Blue都勾上, 然后點擊Preview

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



四十六、jpg圖片隱寫二


四十七、流量包隱寫
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多,肯能會有點卡。

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

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

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

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

四十九、Bubble Babble Binary Data Encoding 編碼

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))
flag{Ev3ry7hing_i5_bubb13s}
五十、lzip文件隱寫
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
五十一、mid音樂文件隱寫
1.附件下載,然后使用winhex查看文件信息,發現文件頭是mid格式


五十二、十六進制轉二維碼
題目內容:
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文件



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

五十四、apk文件隱寫

五十五、zip明文攻擊與盲水印
writeup:
1.解壓出來是這樣的
2.warmup里是這樣的
:
3.用winrar軟件對圖片raopen_forum.png壓縮成open_forum.zip文件
4.比較兩個文件的是否為同一文件,這里比較CRC32的值


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



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
1.先下載壓縮文件,然后解壓文件,得到一個wireshark的數據包文件,用wireshark打開。並且題目提示ping,那么ping屬於icmp協議,過濾icmp協議
按照時間順序排序,發現包的長度有規律,並且都是request和reply一對應答和響應包


五十七、音頻的隱寫



五十八、zip的明文攻擊



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








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

f = open('Py.py','wb')
with open('PyHaHa.pyc','rb') as g:
f.write(g.read()[::-1])
f.close()












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




15.然后另存為flag.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做異或得到原始二進制數據)



六十一、虛擬vmem磁盤文件隱寫
1.使用volatility imageinfo -f mem.vmem查看內存映像
python vol.py imageinfo -f mem.vmem











六十二、維吉尼亞密碼
提交: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
- 維吉尼亞密碼只對字母進行加密,不區分大小寫,若文本中出現非字母字符會原樣保留。
- 如果輸入多行文本,每行是單獨加密的。


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

由密文-->明文:(列為明文,行為密鑰,交叉點為密文)
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}的明文:

flag{I_Kn0w_n0thing}
六十三、二維碼修復
1.看到二維碼,第一件事就是先掃一下。發現掃不了,那么就肯定是碼有問題了。
左下角的小狗擋住了呢,通過ps修復工具對其進行修復。(修復了定位點)
2.然后保存,通過現在QR識別工具即可識別出二維碼
http://cdn.malu.me/qrdecode/

六十四、word隱寫之pgp解密





5.使用第二個密鑰tcCISCNCTF2016重新掛載,發現了PGP的私鑰:







六十五、PNG圖片隱寫二




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





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








六十七、曼徹斯特編碼
題目內容:
5555555595555A65556AA696AA6666666955,提示:曼聯
基礎知識:
在最初信號的時候,即第一個信號時:如果中間位電平從低到高,則表示0;如果中間位電平從高到低,則表示1。
后面的信號(從第二個開始)就看每個信號位開始時有沒有跳變來決定:在信號位開始時改變信號極性,表示邏輯"0";在信號位開始時不改變信號極性,表示輯"1"。
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()

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

#! /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打開流量包后,按照協議進行分類,發現了存在以下幾種協議類型:
6.先過濾"ftp-data",然后ctrl+F 查找【字符串】關鍵字為flag,其中分組詳情只是在info標題里搜索關鍵詞,分組字節流在詳細內容中搜索關鍵字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
![]()
![]()
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=185783328357334813222812664416930395483n=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%mp=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.通過在線二維碼掃描,掃描獲得flaghttp://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)![]()
# -*- 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)


七十二、壓力傳感器報文之曼徹斯特編碼
現有某ID為0xFED31F的壓力傳感器,已知測得壓力為45psi時的未解碼報文為:
5555555595555A65556A5A96AA666666A955
壓力為30psi時的未解碼報文為:
5555555595555A65556A9AA6AA6666665665
請給出ID為0xFEB757的傳感器在壓力為25psi時的解碼后報文,提交hex。
注:其他測量讀數與上一個傳感器一致。
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

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編碼



3.將文件保存為 .rar (壓縮文件)即可








七十四、流量文件之unicode編碼
writeup:
1.通過wireshark打開流量文件,並通過過濾post數據包 http.request.method =="POST",可以看到upload/example1.php

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

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截取定位矩陣框,進行修復,最終得到









Key1921070120171018



附件列表