1. 程式人生 > 實用技巧 >西湖論劍2020線上初賽re之Cellular

西湖論劍2020線上初賽re之Cellular

西湖論劍re之Cellular


前言

作為一個菜雞,從未體驗過用od和ida兩個結合在一起居然是如此的快樂,實在是太感動了(第一次用od整出了flag,快樂)


過程

首先就是檢視檔案型別
在這裡插入圖片描述
32位.exe程式,無殼,放入ida開啟,Shift+F12查詢字串
在這裡插入圖片描述
出現了這個,一看就覺得應該是個迷宮類的題目。

F5看虛擬碼
在這裡插入圖片描述
發現兩個關鍵函式,猜測第一個函式應該就是在構造地圖,第二個很明顯就是檢測輸入是否正確了。

跟進去後發現兩個函式都很複雜,我是覺得很頭大的了,然後又想起了之前在攻防世界裡的一道題:大致就是可以在記憶體裡看程式自己構造出來的地圖。

於是就打開了od

一路F8
在這裡插入圖片描述
在這兒停住之後,下個斷點,重新開始,再次跟進到這兒的時候F7,然後再次一路F8,重複一次上述過程,然後程式就執行到了主函式的位置了。

繼續F8
在這裡插入圖片描述
可以看到有一個迴圈四次的跳轉,這裡也就是主函式的這裡在這裡插入圖片描述
也就是說,這四次跳轉結束之後地圖就算是構造好了,可惜的是按照之前一道題的在棧頂地址處找的時候啥都沒找到,這條路我就沒走通了。

但是後來在埋著腦袋看CheckFlag()函式的時候發現這個程式的輸入只有“R”和“L”兩種字元,並且判斷的時候只是判斷當前字元是不是其中的一個,後續的處理又都是相差無幾的,然後就抱著試一試的態度準備試試看能不能窮舉出來
在這裡插入圖片描述
箭頭指的就是檢查函式,F7跟進去
在這裡插入圖片描述
三個箭頭分別是for迴圈裡獲取輸入長度的函式、判斷當前輸入字元是否為“L”、是否為“R”。這裡有個注意的地方,如果第一次就猜一個字元的話他不管你對不對都會進行第二次判定,而如果第一次輸入的是兩位的話,都對的話是會從第三次判斷處跳出的,有錯的話則會在第二次判斷時跳出。

成果:
在這裡插入圖片描述

然後我就是這麼一點點來的。總覺得自己走的不是正道(苦笑)。

在這裡插入圖片描述
現在看著感覺這幾個都還很有看頭,只是能力不夠看不太懂,只好劍走偏鋒了。


總結

因為第一次通過od和ida動靜結合做出來一道題目,感覺很開心,所以寫個這個紀念一下,畢竟菜雞以前只會看ida。
對了,如果有大佬的路子更具有普遍性的話,還希望能分享一下,畢竟我這個不太正規來的。