bugku一道逆向題目分析
2022-04-27 12:09 作者:rkvir逆向工程學院 | 我要投稿
1.查看題目,得到的信息只有點擊一萬下,以及和和ce工具有關(guān),先下載下來?

2.下載下來是一個exe,先查殼看看程序信息

vb寫的無殼
3.運行一遍程序,看看流程


好家伙,要我點擊一萬次按鈕才給我flag,不可能!整活!
4.分析:作者說點擊一萬次有flag,那我們可以猜想有兩種可能,第一種:當按鈕按下時程序會檢測此時一個計數(shù)器變量的值是否大于一萬,如果大于一萬則顯示flag。第二種:當按鈕按下時程序會檢測此時一個計數(shù)器變量的值是否等于一萬,如果等于一萬則顯示flag。那我們依次驗證我們的猜想。
猜想一:當按鈕按下時程序會檢測此時一個計數(shù)器變量的值是否大于一萬,如果大于一萬則顯示flag
①看到窗中左上角的數(shù)字隨著按下按鈕次數(shù)的增加而增加,作者又提及ce,這不得不逼我想起ce工具對數(shù)值變化的敏感啊。
②那我們就打開ce進行內(nèi)存搜索變化的數(shù)值,因為我們看到窗口左上腳的數(shù)值是一個整數(shù),那我們就使用精確數(shù)字、四字節(jié)類型搜索

③好家伙,首次掃描以后就只有300多的結(jié)果,那豈不是再變化幾次數(shù)值就直接拿捏了嗎?那我們接著通過按下按鈕增加數(shù)值來繼續(xù)搜索,為了增加搜索速度我們多按幾次多增加點數(shù)值,這樣可以排除一些偶合數(shù)據(jù)

!?。?!既然數(shù)據(jù)不在了,我以為是哪里失誤了我又用同樣的方法重復(fù)了幾次,發(fā)現(xiàn)結(jié)果是一樣的(正如作者說的那句話,不好用的ce,懷疑是他寫的坑),那此時說明肯定這個數(shù)據(jù)不是四字節(jié)類型,為了提高數(shù)據(jù)查找效率,我決定換一種方法搜索.
④這次我才用未知的初始值、所有數(shù)據(jù)類型進行搜索

⑤為了再次誤入歧途,我不采用數(shù)值的增加或減少來跟蹤數(shù)據(jù),而是用變化與沒變化來進行跟蹤,經(jīng)過幾次數(shù)據(jù)的變與不變跟蹤得到了29個數(shù)據(jù),那我們先加入列表進行數(shù)值更拍篩選數(shù)值(這里我不建議二分法篩選,這樣可以降低程序的奔潰率)

⑥加入列表以后我們點擊數(shù)值字段先把數(shù)據(jù)按照數(shù)值大小進行排序,通常這種4.5555.....E帶e的數(shù)值我們可以先不用考慮,因為這大小就和我們尋找的很離譜

那我們就先找一些看起來是整數(shù)的數(shù)值進行篩選,運氣比較好,第一個數(shù)值就篩選到了窗口左上角的變量

⑦通過看這個數(shù)值,發(fā)現(xiàn)這個數(shù)值的單位1并不是窗口左上角顯示的數(shù)值的單位一,那我們先不管,先隨便改個大的數(shù)值去讓窗口的數(shù)值超過一萬就可以驗證我們的猜想一了

改了一個500800單位發(fā)現(xiàn)窗口的值變?yōu)榱?5004了,但是沒有跳出flag的提示,我按下按鈕多次也沒有,那我們的猜想一驗證失敗了,我們驗證猜想二。
猜想二:當按鈕按下時程序會檢測此時一個計數(shù)器變量的值是否等于一萬,如果等于一萬則顯示flag。
⑧又猜想一的最后一步我們可以算出內(nèi)存中的數(shù)值的多少單位等于窗口數(shù)值的多少單位,說干就干

經(jīng)過簡單一算得到內(nèi)存中的數(shù)值200單位等于窗口數(shù)值的1單位
⑨那我們改個窗口數(shù)值的9999個單位,也就是更改內(nèi)存的數(shù)值等于200x9999
好家伙,一改完按下按鈕還就彈出來了,同時也驗證了我們的猜想二對了

⑩F5這個數(shù)值(找出是什么訪問了這個地址)


?
點開以后顯示空白的,因為此時這個數(shù)據(jù)沒有改變所以也不會有訪問和改寫的記錄,我們再按下幾次按鈕就一定有了


?
十一.我們選擇第二個(fstp和pop指令功能一樣),點擊顯示反匯編程序


?
此時我們上下瀏覽便可以找到信息框的提示,我把這個flag提交以后發(fā)現(xiàn)不對,仔細一看我覺得這個更像是base64加密的字符串,于是我再進行了base64解密,發(fā)現(xiàn)也不對,我又試了很多常見的加密方式解密,但是都不對,無奈之下我點開了writeup才知道居然是base58加密,表示以前沒接觸過,但是通過base58解密以后便得到了flag,提交顯示正確

十二.? 再附上一個base58的介紹以及與base64的區(qū)別,也算是學習到了新的一種加密方式
標簽: