一個CTF的題目,拿來學習學習
玩了好久,再加上學校一堆破事,最近又開始瞎弄了,找了幾個CTF的題目,和別人寫的一些內容,也當是學習,也當是看完之后的小結。順便也說一下如果自己拿到這題目會從哪做起。
這個,由於之前IDA學的等於沒學,一些神操作比如F5大法什么的,只是知道,具體也沒怎么用,還需多實踐啊!
廢話不多說,開搞
瞎比看
拿到了先運行下,這個,畫風一如既往有點low逼,隨便輸入肯定不對,稍微記一下輸出內容吧,畢竟字符串還是有用的。猜一下估計就知道如果對的話,應該就是所謂的好啊正確啊什么玩意的。
拖到IDA中,圖啊啥的就不貼了,看看函數吧,有個main,所以習慣性的瞅一眼吧
看看代碼,哦,應該就是跟一下call sub_4011E0
大致看一下吧,應該就是這堆邏輯內容吧啊,一般需要注意一下這個輸入的內容的判斷,就是看看是不是字母啊數字啊大小寫轉化啊等等,還有就是長度什么的限制吧,同樣這里也有
這里我們還可以看到var_88是輸入字符串的內容吧,再結合一下下面的比較語句應該這個var_10對應的就是與輸入比較的東西吧
沒錯就這樣
瞎比搗
拖到od看看吧,簡單的F7+F8走啊走啊就到了人生的十字路口了
按照原來的分析的話,他繼續走下去了,走的話得去模塊分析,然后繼續走,然后找啊找找到所謂的算法。腦洞好大。。。。。。我就不走了,反正我是不走了。
但是,但是,機智的我看到了一個東西00401000,這還走個啥,直接過去不就得了改個代碼走過去
這里你就看到了你想看到一堆字符串吧,開心了吧,保存一下吧。
再來吧,拖到IDA看看,然后和之前的一樣走一下,就會來到這個地方,哎喲喲喲喲,好黑啊,這。。
接下來就是F5大法了,呵呵呵,算了自行解決吧,我還是用OD看吧。
首先我們看一下這幾個報錯的地方,看看吧
第一個,看看上下文,應該是算長度的,然后比較長度和0x19也就是25比較一下,不是就出錯,也就是輸入時25個字符吧。
然后下面就是定義的一個******的字符串吧,鬼知道是啥,不管它
接着走接着看,做了幾個比較,對al中的數據和6A/68/6B/6C作比較,不是的話就報錯,al應該比較的是ascll碼吧,對應的就是J/H/K/L,也就是說輸入的25個字符必須是這4個之一
這樣吧,我們試試輸入25個h看看,嘛情況?一路F8,果然走到h對應的case
縱觀這幾個case,都有個共同點,和00409030的數據作比較,我們走去看看這到底是個啥?
哦,好像迷宮啊,別問我咋知道的,多看看帖子就曉得。把它拉下來吧,那個記事本,然而這屌迷宮走不通。。。。。。。數數個數,調整調整,正好搞成8*8的,哎喲,還真能走通
走迷宮嘛,習慣性想到上下左右,再看看剛才說的hjkl,應該就是對應的上下左右吧,具體看一下代碼。case6B也就是對應的k,我們看下能看見對應的是004010C3 . 83EE 08 sub esi,0x8
由於做的事一個8*8的迷宮,所以這個減8對應的就是迷宮中的向上,同樣我們可以找到對應關系
K--上
J--下
h--左
l--右
這里l對應代碼沒有寫是右,但是由於之前排除掉其他字母的對應關系,然后這里只有l能對應右,所以那就右吧。。。。。
然后還能看到表示的就是所謂的牆吧,因為移動之后做了下比較,是就報錯。
繼續往下看,看到了good,這里看到了一個比較,0x23,對應的就是#也就是我們迷宮中終點吧,完美!
來吧走迷宮吧,對應結果khkhhhjhjjjjjljlllklkkhhh,試試吧,沒問題
瞎比想
1、呵呵呵,好像有啥問題沒搞明白,起點為啥是那?回來看看代碼。哦,沒問題啊,眼瞎了。
2、好吧,弄完了感覺好麻煩,總覺得不爆一下不爽。呵呵呵,就這吧
讓你瞎判斷,改了你,直接jmp到good的位置
保存,運行,隨便輸入點東西試試,搞定!
小結一下:這題很好玩,嘿嘿嘿。
附上原分析帖子鏈接:http://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=15539&highlight=ctf