玩了很久,再加上學校一堆破事,最近又開始瞎弄了,找了幾個CTF的題目,和別人寫的一些內容,也當是學習,也當是看完以後的小結。順便也說一下若是本身拿到這題目會從哪作起。php
這個,因爲以前IDA學的等於沒學,一些神操做好比F5大法什麼的,只是知道,具體也沒怎麼用,還需多實踐啊!算法
廢話很少說,開搞函數
拿到了先運行下,這個,畫風一如既往有點low逼,隨便輸入確定不對,稍微記一下輸出內容吧,畢竟字符串仍是有用的。猜一下估計就知道若是對的話,應該就是所謂的好啊正確啊什麼玩意的。學習
拖到IDA中,圖啊啥的就不貼了,看看函數吧,有個main,因此習慣性的瞅一眼吧3d
看看代碼,哦,應該就是跟一下call sub_4011E0blog
大體看一下吧,應該就是這堆邏輯內容吧啊,通常須要注意一下這個輸入的內容的判斷,就是看看是否是字母啊數字啊大小寫轉化啊等等,還有就是長度什麼的限制吧,一樣這裏也有字符串
這裏咱們還能夠看到var_88是輸入字符串的內容吧,再結合一下下面的比較語句應該這個var_10對應的就是與輸入比較的東西吧get
沒錯就這樣class
拖到od看看吧,簡單的F7+F8走啊走啊就到了人生的十字路口了thread
按照原來的分析的話,他繼續走下去了,走的話得去模塊分析,而後繼續走,而後找啊找找到所謂的算法。腦洞好大。。。。。。我就不走了,反正我是不走了。
可是,可是,機智的我看到了一個東西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,試試吧,沒問題
一、呵呵呵,好像有啥問題沒搞明白,起點爲啥是那?回來看看代碼。哦,沒問題啊,眼瞎了。
二、好吧,弄完了感受好麻煩,總以爲不爆一下不爽。呵呵呵,就這吧
讓你瞎判斷,改了你,直接jmp到good的位置
保存,運行,隨便輸入點東西試試,搞定!
小結一下:這題很好玩,嘿嘿嘿。
附上原分析帖子連接:http://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=15539&highlight=ctf