天天看點

攻防世界 re catch-me

得到一個可能是elf檔案

攻防世界 re catch-me

折騰一會發現是個壓縮包,加上字尾後打開

攻防世界 re catch-me

又是一個沒有字尾的壓縮包

再次修改後打開得到檔案Catch_me

攻防世界 re catch-me

ida打開

攻防世界 re catch-me
攻防世界 re catch-me

先跑一下看下結果

攻防世界 re catch-me

得到一個提示假的flag

開始看ida

攻防世界 re catch-me

前半部分v3通過個挺複雜的函數得到值,然後v3與一些數 and 後存儲着

接下來重要的是 getenv 這個函數,函數主要作用就是擷取名為 ASIS 和 CTF 的環境變量

然後兩個的與運算後 xor v3 結果符合的話将6012ac的位置存儲 ASIS 的環境變量

再就是一個while循環

while内haystack實際上在後面存儲着正确flag

攻防世界 re catch-me

最後将haystack内的值全部替換成 bad_

看到這裡大概有一個通過動态截取flag的思路

然後先通過動态調試得到 v3 = 0xb11924e1

實際上在動态中需要通過第一部分的if才能繼續下面的讀寫flag

ida動态就不清楚怎麼跳轉不了

就參考 https://blog.csdn.net/nocbtm/article/details/98037862 内的思路和做法

一個關鍵就是wp内 0x601280是haystack數組的位址

最後也得到了結果

攻防世界 re catch-me