逆向AIS3的奧秘 pre-exam reverse 1

[撰文 Leaf]

感謝ISDA協會裡的樂大,除了AIS3課程教導的解題辦法之外,我們討論出了另外一種解法,藉此機會來跟大家介紹逆向工程實際操作。

題目

題目是這樣的,一打開是這樣一個視窗,開啟的過程中做了什麼事我不曉得,在畫面上點一下,跑出了Please don’t click me!,如果之後再點一下整個視窗就會關閉。

看到I’ve printed out the flag這段,我有幾個想法:

1.是在開玩笑嗎?看不到半點東西!

2.可能是字串print出來了,只是被顏色擋住了。

 

想法就是分析的開始,如果是這種可能,那搜尋binary的字串應該就有解了,當然事實上沒這麼簡單,在字串堆中找不到半點可能性。

那接下來要做什麼事呢?如果只是單看執行畫面,是一輩子也看不出來的,那只能透過反組譯來分析程式的執行流程及可疑的地方,這也是逆向的目標所在。

發現一個可疑的東西:_print_flag的函式,點擊IDA-View中左邊函式視窗中的_print_flag。

如果看不懂組語沒關係,轉成C語言來看吧。

當然這功能也不是神器,逆向分析可不是只是看個C語言就能解出東西來的,要能分析出有用的東西,都是憑著經驗與技術得來的。(這部分可能就要請教樂大或是其他高手了xD)

那看來這段程式碼就是關鍵所在了,上面有AIS3沒錯,的確是我要找的flag的開頭,不過flag的內容在哪裡啊?

觀察程式碼中,發現一個奇怪的東西strtof,它的作用是將字串轉換為浮點數,那我要的東西會不會就在那個浮點數當中呢?

找尋浮點數中,發現有個字元陣列在這裡,裡頭當然是存放著字串啦!看來離成功不遠了。

進去那個變數後,就能看到我的目標了,不過它是不是我要找的flag就難說了,畢竟在打Wargame的過程中,這種事情經常發生,常常找到了可疑之處,結果反而是一場空。

那接下來就是解碼的動作。

我的作法是直接將上面反編譯後的C語言寫成一隻小程式,然後去執行它,看它跑出來的結果是怎樣,唯一要做的就是把那堆浮點數丟到上面宣告的字元陣列內,而str1是陣列的變數名稱。

執行完就是結果了。

 

最後我要說的是,逆向分析會是一個枯燥的過程,學習逆向更是個漫長的距離,最近聽幾位大大分享到,真正會逆向的人都只是把逆向當作工具。

小編目前也沒聽懂,不過就…大家一起努力吧!

 


 

我們是ISDA(台灣資訊安全聯合發展協會)。

為了要讓更多人了解資訊安全,除了基礎資訊安全教育訓練以外,偶而也會有一些資安技術的解說。

歡迎認同我們的朋友給我們一點鼓勵,到我們的FB粉絲頁按個讚加分享。
https://www.facebook.com/ISDA.tw/

有任何活動相關訊息,我們也會第一時間張貼在ISDA粉絲團喔!