摘要:花了一個小時的時間,終于全部解密。第四關光棍節程序員闖關秀第關這一關讓我們觀察我們密碼的規律。然而我這里主要要表達的是一種分析思路。哈哈,到時符合主題雙十一。
注意
由于此處文章有長度限制,本文是刪減版,如需查閱完整版,請訪問如下地址:
鏡像一
或者
鏡像二
今天上班百無聊賴的在群里發現一個有趣的鏈接光棍節程序員闖關秀,點開之后渾身顫抖如獲至寶啊。
我最喜歡這種挑戰了。
花了一個小時的時間,終于全部解密。下面奉上思路和分析以及代碼。由于sf良好的前端氛圍,這里全部用JavaScript作為工具語言。
喜歡python的朋友可以參見我另一篇用python作為示例語言的解密一個有意思的解密
話不多說,時間寶貴,我們立馬開始解密之旅吧:)
光棍節程序員闖關秀第1關
作為一個web入門的學員,我們自然而然的直接右鍵查看源文件:
光棍節程序員闖關秀第1關(總共10關) 光棍節程序員闖關秀第1關(總共10關)
提示: 從所有信息中找到進入下一關的方法
而實際上,我們不查看源文件也是可以的,直接在頁面上ctrl+a,就可以讓進入下一關的鏈接變藍,直接點擊即可。
第二關光棍節程序員闖關秀第2關
這一關同上,我們也是先直接右鍵查看源文件,幸運的是,它寫在了注釋里。
光棍節程序員闖關秀第2關(總共10關) 光棍節程序員闖關秀第2關(總共10關)
密碼在哪呢?
我們復制出密碼,然后填在上面網址的k=后面,k參數應該是代表key,也就是密碼的意思。在以后的幾關里我們都是用這種方法來完成跳轉。
第三關光棍節程序員闖關秀第3關
頁面上說,這關就沒有那么簡單了。顯而易見的,我們還是查看源代碼,然而他們這次沒有給我們任何提示,一無所獲。
這一關才開始登堂入室了,我們開動大腦想一想,這個密碼會藏在哪里呢?
開動腦洞分析吧:
cookies
Storage
css
http頭
console
...
我們一項一項,最終在http頭里找到了疑似密碼的字段:
Content-Encoding:gzip Content-Type:text/html; charset=UTF-8 Date:Fri, 11 Nov 2016 05:23:01 GMT The-Key-Is:a87ff679a2f3e71d9181a67b7542122c Transfer-Encoding:chunked X-Hit:sf-web1
圖中部分即時我們要的key。
輸入網址中,我們即可來到第四關。
光棍節程序員闖關秀第4關
這一關讓我們觀察我們密碼的規律。
實際上不用他說我們已經發現,這些密碼都是32位的,非常像一個md5有木有?
那么規律到底是什么呢?我記得上小學的時候就經常有這種找規律的題,我們先推斷一下,規律可能是:
當前的md5是上一個md5的結果
md5是某個有規律的數的結果
我們分別測試最后我們發現
md5("4");//a87ff679a2f3e71d9181a67b7542122c
那顯然易見的是,下一關5是
md5("5");//e4da3b7fbbce2345d7772b0674a318d5
其實如果各種嘗試都無法猜到規律的話,還有一個撞運氣的做法,就是我們去md5解密的網站上試一下,a87ff679a2f3e71d9181a67b7542122c
的結果為4。也可以得到相同的結論。
但是這種方法只是一種碰運氣無奈之舉,因為md5是一種校驗算法,已經破壞了數據的原始結構,再不可能還原成原來的結果。
所謂"解密"就是窮舉法,自己用md5分別加密常見的字符串再將結果以key=value的字典方式保存到數據里,然后等用的時候再從這里面查找,
看是否有已經碰撞出結果。具有很大的偶然性。
光棍節程序員闖關秀第5關
這一關開始,就變得比較難了起來。
首先看到一個二維碼,我相信大多數人都和我一樣,先掃為快。但是手機掃描二維碼非常耽誤我們時間,而且不好分析。
我們百度搜索在線二維碼解析,然后傳上去這個圖片,結果竟然是:...
http://sf.gg/你被耍了什么都沒有
我了個去,我還不信邪,分別測試了
md5("http://sf.gg/你被耍了什么都沒有") md5("你被耍了什么都沒有")
然后又按照第三關的步驟檢查了一遍還是一無所獲。
看來玄機確實就在這個圖片本身上,我們下載這個圖片,然后右鍵,詳情,看看密碼會不會在這些字段里。
尷尬的是里面竟然什么都沒有...
等等,什么都沒有?說明這個頭片顯然是以一種非正常方式生成的。我們用十六進制的方式打開它。
此類工具有很多,此處我使用的是WinHex,發現里面有個字符串:
KEY:bdbf46a337ac08e6b4677c2826519542
它是ANSII編碼的,所以能被直觀的看到。也就是說,其實我們用系統自帶的記事本可以看到這個字符串的。
根本不需要WinHex之類的工具。然而我這里主要要表達的是一種分析思路。如果它這里是用的unicode編碼,或者含有中文時用的utf8編碼,
用記事本就不一定有效了。
還是建議大家掌握更多的訣竅和思路,結果并不重要。通關也不是目的,而是在這個過程中學到了什么東西。
光棍節程序員闖關秀第6關
f4de502e58723e6252e8856d4dc8fc3b, 只能告訴你這么多
我們同樣的用第三關的步驟檢查一遍,結果并沒有得到有用的信息。
看來玄機就在這個字符串上了。。我們還是老樣子,去解密下這個md5,然而這次就沒有那么幸運了。沒有能找到對應的明文。
實在沒辦法了,我們只能利用強大的搜索引擎了。。。。
坑爹的是我們竟然找到了這個,第一條:
看來是他防水給我們通過了,好吧,雖然我到現在都沒弄明白這個key是怎么算出來的。。。
第七關光棍節程序員闖關秀第7關
有問題就Google是個好習慣! 再試試 ba9b101dd284c566b78042d278e422bd
好吧,看來上題本意就是讓我們谷歌啊。好吧,我們就按照他說的,繼續谷歌ba9b101dd284c566b78042d278e422bd。
然而時間過的很快夜幕就要降臨,我們還是沒有找到有用的信息。
好吧,我們注意下,再試試后面有個空格,有沒有可能不是讓我們試后面的關鍵詞的呢,那后面的關鍵詞又是什么?
光棍節程序員闖關秀第8關
上一關讓我們學習到了聽話并不是一個好習慣。舉一反三,桀驁不馴多么重要,當年孫悟空要是沒明白那三下,說不定我們現在還是唐朝。。
這一關他說
有時候事情就是這么簡單
鑰匙就在手里, 門卻不知所蹤
我放佛看到了他嘴角嘲弄的笑。嗯,忍了。
我們同樣查看源文件,
光棍節程序員闖關秀第8關(總共10關) 光棍節程序員闖關秀第8關(總共10關)
有時候事情就是這么簡單
鑰匙就在手里, 門卻不知所蹤
一看我們就笑了。
那么大的GET,你當我傻啊。我們把這個GET改成POST,回車一下,輕松過關。
光棍節程序員闖關秀第9關
嚯,這一關厲害了。目測大多數人要栽了。這一關也是最難的一關,也是我要寫本文的目的。
對于一個普通的web前端來說可能是有些難了,因為這里面牽涉到很多其它的知識。幸而我不是一個前端。
然而我已經看穿了一切!
首先 0 1 0 1 這種的明顯是組二進制,下面有缺失的部分,我們先不管,我們先看看前面幾個,打開計算器,把這些二進制轉幾個到十進制看看。
發現它們全是位于ascii表的可見字符范圍。
32-126(共95個)是字符(32是空格),其中48-57為0到9十個阿拉伯數字。
65-90為26個大寫英文字母,97-122號為26個小寫英文字母,其余為一些標點符號、運算符號等。
大學c語言入門課程,大家要記牢,以后用的地方很多。
我們試著譯出前面不缺失的這部分,結果為
q6GDLaJ4yq9A7xFAnxyvsc/AT
我去,這什么鬼,這么長的部分明顯不是key,那是什么呢?而且亂七八糟的像個密文。假使它是個密文,它又是什么加密的?
我們注意到中間有個/,我們所知的BASE64碼中間可以出現`,并且根據base64`的原理,它最后加密結果一定能被4整除。
我們看了下,共有8112組2進制數據,是個能被4整除的數。同樣的,據其原理,如果原字符串的長度不足,可能要在最后補一到兩個等號。
有了以上這些線索,我們直接去最后一個二進制看看是不是等號。
然而最后一個卻是00____01,很明顯是需要我們補齊中間四位的。看來這就是算____所代表數的契機啊。看來我們的路子走對了!!
下面我們在console上執行:
let code ="=".charCodeAt(); console.log(code);//61 console.log(code.toString(2)); VM335:2 61 VM335:3 111101
由此可知____代表的應該是1111。哈哈,到時符合主題:雙十一。
由此,我們已經嗅到了勝利的氣息,想必馬上可以到最后一關了。
我們把上面的二進制列表復制下來,用替換,來編輯成一個數組:
接下來我們百度一個在線base64解密工具。
等等,解密出來是一串亂碼?
對嘛,這么長的一個base64顯然里面不是只有一個key啊。可能需要經過我們再次加工,那么既然它不是一個字符串,很有可能是個文件。
于是我們選擇
解密為16進制顯示,然后我們注意下結果里面的1f 8b 08,所有二進制文件的頭部的幾個字節都是文件頭,一般作為識別文件用。
我們百度文件頭大全,然后發現1f 8b 08代表它是一個gz文件。
那接下來我們單純使用控制臺是不行了,我們用node環境來把這個buff輸出到一個文件中去。
var b = new Buffer(str, "base64"); var fs= require("fs"); fs.writeFileSync("test.gz", b);
然后用一個解壓縮工具解壓后,即可得到一個圖片:
為啥這個女的有點眼熟呢?好啦不管了,反正它上面的就是密碼,我們敲下來完成這一關。
恭喜, 你已經通過了所有關卡
然而第十關竟然是個廣告。。好吧!
結語寫這篇文章用了我好幾個小時的時間,鍵盤都敲碎了,大哥們還不支持下?嘿嘿嘿。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80853.html
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
閱讀 2109·2021-11-23 09:51
閱讀 2847·2021-11-22 15:35
閱讀 2947·2019-08-30 15:53
閱讀 1047·2019-08-30 14:04
閱讀 3285·2019-08-29 12:39
閱讀 1817·2019-08-28 17:57
閱讀 1104·2019-08-26 13:39
閱讀 560·2019-08-26 13:34