談談Wechall幾道題

2021-09-28 19:13:43 字數 2940 閱讀 7317

wechall是國外乙個著名的解題**,不說它是ctf是因為wechall社群更願意把解題的過程看作乙個充滿樂趣的挑戰,而不只是機械地獲取一道flag。

wechall社群給人的感覺是青春、自由和勇敢,正如其名字所代表的含義:we challenge it!

博主近來在wechall上刷了一些題,本著技術分享和加深理解的想法,把其中一些認為有教育意義的題拿出來談談。

當然,博主現在還是個菜雞,所以有不對之處請大佬批評指正。

為什麼首先要拿這道題出來說呢?因為我在這裡徘徊了很久,最後發現了問題所在:思維慣式

我們看看這道題的要求:

給出以正方形為底、各邊長為a的三角錐體積的計算公式,要求用少於10個字元表示。 題目給出了公式例子並提示了一些符號。

乍一看,這是一道挺簡單的數學題啊,我們很容易得出其體積計算公式為v[a

]=2∗

a36v[a]=\frac*a^3}6

v[a]=6

2​∗a

3​,換成題目要求的形式就是sqrt(2)*a^3/6

此時真正的問題悄然而至:我們化出的公式有13個字元,而題目卻要求用9個甚至更少的字元來表示,然而光乙個"sqrt()"就花了6個字元,也就是說我們剩下只有三個字元可用了,然而這三個字元該如何完成公式中剩下的部分呢?你仔細想想。

想好了沒有?enough!enough!這個問題你想破腦袋都想不出的,因為從一開始我們設想的方向就是錯誤的:題目中給的提示"sqrt()"是乙個誤導,這道題借用了思維慣式的力量來打擊challenger。

話只能說到這裡,剩下的你再想想,說不定會發生意想不到的作用。

題目要求:

交代的很清楚,這就是一道******隱寫術。

首先二話不說,先把它拖進隱寫解密工具stegsolve看看,介面是下面這樣的:

這個工具的功能集中在analyse,包含的功能有分析檔案格式、提取通道資料、影象資料偏移、分幀和組合影象。我們一般用到的功能是提取通道資料,在這裡可以根據需要對rgba模式的四個通道進行資料提取並判斷。然而對於這個題,我們使用軟體作者提供的快速查詢功能就足夠了,即下方的翻頁鍵。

我們翻到red plane 1得到flag:

然而我在這裡也有點困惑,即red plane 1代表什麼東西?是按順序將紅色通道上位1所有值組合在一起構成一張?希望以後的學習過程能把這個問題解決,我這裡就暫且只知其然了。

一直覺得編指令碼很難,也一直沒有入手這個技能,但通過這個問題的解決我意識到:編指令碼就是普通的程式設計,不過是實戰而已。

看看題目要求:

要求我們在進入頁面受到message後1.337秒之內再次發起乙個http請求,並附帶我們收到的message。很明顯,這道題靠手速是完不成的,而且既然題目名稱也暗示了「程式設計」,那我們就編個小指令碼吧。

廢話不多說,直接上指令碼(我寫了注釋的哦):

import urllib.request   #python內建的urllib庫,用於http通訊

url1=

''#存放訊息的第乙個url

url2=

''#我們要在1.337秒內發起請求的url

#第一次請求

request1=urllib.request.request(url1)

request1.add_header(

'cookie'

,'wc=12161905-47396-jrae31pohprfchb8'

)#別忘了帶上你的cookie

data1=urllib.request.urlopen(request1)

.read(

).decode(

'utf-8'

)#解碼資料:通過測試驗證,url1返回的資料只包含message,省事了

print

("the message is %s"

%data1)

#第二次請求

url2=url2+data1#拼湊到url2上

request2=urllib.request.request(url2)

request2.add_header(

'cookie'

,'wc=12161905-47396-jrae31pohprfchb8'

)data2=urllib.request.urlopen(request2)

.read(

).decode(

'utf-8'

)#一樣的過程。

print

("send the message %s again!"

%data1)

print

("the new data is a html file,show you below!"

)print

(data2)

然後咱看看效果:

幾道趣味題

1.有乙個隨機數發生器,可以產生1到5的隨機數,利用這個隨機發生器,怎樣產生1到7的隨機數 最直接的想法是拿隨機數乘以7然後除以5,但這樣產生的結果並不是等概率的,7 rand 5中產生不了3和6,因而不可行 正確的做法是5 rand rand 然後捨棄最後4個數,剩餘21個數字。每三個數分為一組,...

幾道演算法題

1 n階乘之和 public class test1 sum kk system.out.println sum 2.獲取二維陣列每列最小的值 public class test2 system.out.println sum public long jiecheng int x return su...

幾道java程式設計題

列印1 19個數中,所有和等於20的可能性 test public void calctwenty system.out.println 總共 total public void calctwenty string prefix,int count,int n else system.out.pri...