bugku 逆向之consoleapplication4(遊戲過關)
阿新 • • 發佈:2019-01-31
一頓分析
對於一個逆向小白來說,在這題上著實花了點時間,特記錄下~
初看這題時,感覺就是資料題,經過一頓操作,發現1-8依次輸一邊,答案就出來了,反正每盞燈只能操作奇數次。
但是這樣的方式做一道“逆向”題,著實沒啥成就感,反正剛學習,那就從簡單題開始吧。
載入Ollydbg先看看,通過查詢參考字串找到了函式的地址00B7E940
右鍵檢視呼叫樹(或者右鍵轉到,可以看到最下方是呼叫地址),可定位到函式呼叫處
(呼叫樹)
(上一個jmp)
(關鍵判斷處)
我們找到了一個jnz和call的地方,因為不是flag的直接比較,所以想法是跳轉至成功函式輸出flag,或者直接將生成flag的函式吃透。
方法一:修改彙編程式碼完成跳轉
我們找到了一個jnz和call的地方,因為不是flag的直接比較,所以想法是跳轉至成功函式輸出flag,或者直接將生成flag的函式吃透。
(修改彙編)
(新檔案)
直接執行,即可獲得結果
方法二:瞭解flag的生成
前面在除錯時我已經大致瞭解了生成的方式(也在堆疊中看到了flag),現在我們載入IDA進行檢視,由於OLLY的地址(每次基址都變)和IDA的地址顯示有區別,這裡還不會對應找。
但是學會了搜尋關鍵字串
同時也找到了呼叫函式sub_45E940,
後來跟著動態除錯進行測試發現邏輯程式碼如下
存在兩個陣列(擷取片段示例)
先兩個陣列按位異或,再與0x13異或。
關鍵函式
python程式碼
ss4 = [0x12,0x40,0x62,0x5,0x2,0x4,0x6,0x3,0x6,0x30,0x31,0x41,0x20,0x0C,0x30,0x41,0x1F,0x4E,0x3E,0x20,0x31,0x20,0x1,0x39,0x60,0x3,0x15,0x9,0x4,0x3E,0x3,0x5,0x4,0x1,0x2,0x3,0x2C,0x41,0x4E,0x20,0x10,0x61,0x36,0x10,0x2C,0x34,0x20,0x40,0x59,0x2D,0x20,0x41,0x0F,0x22,0x12,0x10,0x0] ss8 = [0x7B,0x20,0x12,0x62,0x77,0x6C,0x41,0x29,0x7C,0x50,0x7D,0x26,0x7C,0x6F,0x4A,0x31,0x53,0x6C,0x5E,0x6C,0x54,0x6,0x60,0x53,0x2C,0x79,0x68,0x6E,0x20,0x5F,0x75,0x65,0x63,0x7B,0x7F,0x77,0x60,0x30,0x6B,0x47,0x5C,0x1D,0x51,0x6B,0x5A,0x55,0x40,0x0C,0x2B,0x4C,0x56,0x0D,0x72,0x1,0x75,0x7E,0x0] flag = "" for i in range(0,0x38): flag += chr(ss4[i]^ss8[i]^0x13) print flag
執行如下