依舊不會做,在開頭被卡住了,最後看了師傅們的題解跟著復現了下,
考點比較基礎,但不得不說這題實在坑,套了好幾層編碼。
題目給了個27m的無副檔名檔案,推測是程式,然鵝並不是,用010開啟可以看到一些明文,
猜測是磁碟檔案之類的, 用file
檢視了後發現是磁碟映象檔案.
然後有三種辦法:
使用r-studio開啟, 然後點驅動器
-掃瞄
, 勾上搜尋已知檔案型別
, 待掃瞄完成, 接著點開原始檔案
-文件
-text文件
, 就會看到兩個文字, 而04.txt
就是flag資料, 但是按照其他師傅以及復現結果來看, 提取到的flag資料是殘缺的, 大概差了100多位元組, 導致解不出來. 或者把misc.mp4
恢復出來, 手動提取flag資料.
使用diskgenius開啟映象檔案, 把misc.mp4
提取出來:
嗯… 那就先不管這麼多好了, 用010看看檔案內容,
(其實這邊應該也要去推測下有沒有音訊隱寫的行為, 但是因為看了wp, 就繞過了)
根據外掛程式的解析結果, 發現有兩個未知型別的資料段, 可以直接顯示成文字, 那這邊就把它先提取出來, 儲存為flag.hex
.
因為資料段可以顯示成明文, 所以猜測是做了hex(base16)處理, 於是做一次解碼.
因為已經解過一次了, 所以不想再手解一次, 轉為輕鬆一點的寫個指令碼處理. (python3)
import binascii
import base64
defget_continuous_asciis
(ranges:
list):
""" 取連續的ascii文字
:param ranges: 範圍陣列, 例[['a', 'b']]
:return:
"""return
''.join([''
.join(
map(
chr,
range
(ord
(r[0])
,ord
(r[1])
+1))
)for r in ranges]
)with
open
('flag.hex'
)as f:
enc = f.read(
)while
true
: b16 = b32 = b64 =
false
ifall
([i.upper()in
'0123456789abcdef'
for i in enc]):
b16 =
true
elif
all(
[i.upper()in
'abcdefghijklmnopqrstuvwxyz2345678='
for i in enc]):
b32 =
true
elif
all(
[i.upper(
)in get_continuous_asciis([[
'a',
'z'],[
'a',
'z'],[
'0',
'9']])
+'+/='
for i in enc]):
b64 =
true
else
:print
('end'
)break
if b16:
print
('base16'
) enc = binascii.a2b_hex(enc)
.decode(
'utf-8'
)elif b32:
print
('base32'
) enc = base64.b32decode(enc)
.decode(
'utf-8'
)elif b64:
print
('base64'
) enc = base64.b64decode(enc)
.decode(
'utf-8'
)print
('-'*30
)print
(enc)
print
('-'*30
)
效果如下(因為部分文字過長, 做了擷取):
第二屆i春秋挖洞大賽的一些感想
挖洞比賽嘛,根據規則就是乙個問題,如何在短時間內挖到更多 等級更高的漏洞?先分析這個問題,需求是什麼?更多?等級更高?短時間內?首先要解決的是時間的問題 時間有限,所以你必須要快。如何快?把整個挖洞的流程走一遍,用最少的時間。其次是更多的問題 漏洞是存在有等級的,有低有高。常見的漏洞型別並不一定是廠...
山東第二屆acm省賽總結
n堆石子每次最多取3堆 解題報告 the android university acm team selection contest 模擬 解題報告 identifiers 模擬 解題報告 binomial coeffcients 遞推 解題報告 crack mathmen 打表模擬 解題報告 ma...
第二屆藍橋杯 歌賽新規則
題目 歌賽新規則 歌手大賽的評分規則一般是去掉乙個最高分,去掉乙個最低分,剩下的分數求平均。當評委較少的時候,如果我們只允許去掉乙個分數,該如何設計規則呢?有人提出 應該去掉與其餘的分數平均值相差最遠的那個分數。即 最離群 的分數。以下的程式用於實現這個功能。其中x存放所有評分,n表示陣列中元素的個...