逆向 EasyBase64
首先,我們?cè)赾md中打開運(yùn)用,如下圖
然后我們可以看到然后我們可以看到輸出了一個(gè)wrong,ok,那么下一步就變成了找到wrong字符串和user這些字符串的位置?,那么我們打開ida,打開程序,看到下面的界面
?點(diǎn)擊Strings或者你直接shift f12也不是問(wèn)題,然后得到下面的界面
那么現(xiàn)在,我們點(diǎn)擊wrong username,我們來(lái)到了下面這個(gè)界面
?然后點(diǎn)擊黃色部分,跳轉(zhuǎn)到函數(shù)界面(右鍵有個(gè)new window,點(diǎn)擊那個(gè))
?如下圖
?ok,那我們第一步先解決wrong username的問(wèn)題往上回溯,可以看到避開wrong username的路徑是黃色區(qū)域
?那么我們基本就可以斷定上面的比較函數(shù)應(yīng)該就是對(duì)比user是否正確的了
通過(guò)對(duì)比,我基本判斷出了左邊的函數(shù)應(yīng)該是輸出的函數(shù),右邊的函數(shù)應(yīng)該是輸入的函數(shù)?,那么到目前為止,我們就確定了Str中存的有可能是我們的username,Str1中存儲(chǔ)的可能是我們的password
那么這個(gè)時(shí)候,我們?cè)倏催@一段,基本就可以確認(rèn),Str2中存儲(chǔ)的應(yīng)該是用戶名,現(xiàn)在我們輸入試一下?
?現(xiàn)在,我們的猜測(cè)是對(duì)的那么繼續(xù)往下,我們找到了wrong的位置以及它所屬的函數(shù),如下
?ok,那么我們現(xiàn)在的分析目標(biāo)就變成了下面這個(gè)塊了ok那么讓我們回憶一下,我們前面提到過(guò)Str1中存儲(chǔ)的是我們輸入進(jìn)去的password,,而很巧合的是這里也出現(xiàn)了一比較函數(shù),那么我們可以大膽猜測(cè)下,byte_14001E270應(yīng)該就是我們要找的password,既然如此,我們給它重名下
然后我們點(diǎn)擊Str1上方的password,我們會(huì)驚奇的發(fā)現(xiàn),這里啥都沒有.,這合理嗎?這不合理.......
難道答案是0D0h?我試過(guò),不對(duì),所以我們還要再往上找,我們會(huì)發(fā)現(xiàn),password在和Str1比較前,它的下面還有個(gè)函數(shù)????我眉頭一皺,覺得事情沒有那么簡(jiǎn)單.
那么我們現(xiàn)在重頭梳理一遍,loc_1400120D0這個(gè)函數(shù),我們通過(guò)一些思考,可以反應(yīng)過(guò)來(lái),這里Str實(shí)際上就是個(gè)定值,那么我們跳進(jìn)去看看,嗯.........發(fā)現(xiàn)了很長(zhǎng)一段........
?不過(guò)我們不用理會(huì),這里我們就要提一下了,前面lea修飾符把password的地址給了rcx,而這里又用到了rcx,所以基本可以確定,這里可能就是把password現(xiàn)場(chǎng)寫入的函數(shù)這就解釋了為什么我們當(dāng)時(shí)看password的時(shí)候,里面啥都沒有
既然如此,我們就不用和它客氣了,直接動(dòng)態(tài)調(diào)試(ps:其實(shí)我本來(lái)看到password全空我就直接動(dòng)調(diào)了,純粹是因?yàn)椴焕斫?只是在這里我想思考的全面點(diǎn),所以補(bǔ)充了合適的邏輯鏈)
好了,現(xiàn)在會(huì)重新上面的操作不過(guò)這次我們需要回到下面這個(gè)界面來(lái)設(shè)置斷點(diǎn),點(diǎn)擊
左邊的藍(lán)色小圈圈,得到下面這個(gè)界面,然后動(dòng)調(diào)?
此時(shí),我們得到下圖
可以直接可以直接盲猜它們應(yīng)該用的ascii碼,所以得到password:c2lwYw==,然后我們輸入驗(yàn)證一下
?
成功,
就此結(jié)束 (ps:如果一直打不開下斷點(diǎn)的那個(gè)界面而一直顯示函數(shù)界面,把函數(shù)界面全部關(guān)了試試)
總結(jié)
以上是生活随笔為你收集整理的逆向 EasyBase64的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有关于java的final修饰符
- 下一篇: java垃圾回收机制(简述)