Buuoj reverse1
逆向題目
題目在這https://buuoj.cn/challenges#reverse1
1. ?首先,就是直接調出字符串界面,然后找到里面含flag的任意字符串點擊就完事了,就下面這樣!
?
2. 然后因為我當時直接開了偽代碼做的,所以……我就按我的理解解釋下為什么偽代碼是這樣的把
3. 點完任意一個帶flag的字符串以后再點擊會跳轉到這個界面
?
4. 順帶認識一下吧,第一個a的就是上面這個界面,中間那個是偽代碼,最后一個b的就是你們的字符串界面
?
5. 然后我縮放了下窗口,就右鍵fit window,可以看到這段代碼是嵌了個循環,不過我們現在還不太清楚這里這個循環是干啥的,所以先找
?
6. 然后我最初是直接把hello_world當flag輸入了,然后顯示錯了…………所以考慮加密的問題,然后看下有關于str2有關的語句
?
7. 通過對上圖的分析我們知道了str2的首地址被賦到了rcx里,然后那個movsx指令是用來將str2字符串里的數據和o作比較的,然后盲猜這里應該是循環比對,因為我們可以搜搜我劃了黃色的區域看看!
?
8. 那么我們繼續分析下來
?
9. 因為[rbp+130h+var_12C]的初始值是0,指的是這個地址上的值為0,那么下面就可以翻譯成找一個將字符串第一個字符放入到eax里(不要急,后面會證明這個表示的將第n個字符放入eax里,只是現在沒有那么多資料)
?
10. 然后就是分析上面那個下來以后的值了,那么這一段我們可以可以看出應該是一個if判斷了表示的意思應該是存儲在eax里的字符是否是’o’,這里其實沒必要想寄存器的變化然后想是正確跳轉哪個指令,我覺得那樣會把問題復雜化,我們只需要知道這些判斷完會導致下面的兩種情況,然后我們看看和str2相關的指令
?
?
11. 然后我們可以看到上面的操作,mov指令把0放入了一個數組里………….我不知道這里會不會有人直接懵逼,其實沒必要緊張,即便你不記得rcx和rax表示的什么也沒關系,我們可以簡單判斷一下,rcx和rax兩個必然是地址,在哪先沒必要管,我們先判斷下,只要找到rcx和rax最近賦值的地方,我們必然可以理解這個mov在干啥,所以直接點擊rcx和rax看看他們被賦了什么
?
? ? 然后就可以得到左邊玩意,得到了就好辦了,根據我們前面的分析可以得出這里rax應該是0,rcx是str2的地址,所以這里的意思就是修改str2第一個字符為0
?
12. 綜上這些表示匯編語言表示的就是str2第一個字符是否是o如果是o,則將其改成0
13. 然后我們接著看,看最后一個字符框
?
14. 然后我們分析下這個通過簡單的分析,我們可以知道這里的語句可以翻譯成將[rbp+130h+var_12C]上的值加上1(因為這真的很好看,沒啥好解釋的),那么我們所有的線索就都串在了一起,也就是[rbp+130h+var_12C]可以表示為n,,然后你就可以順著我前面的分析,只要把第一個字符換成第n個字符就完事了,我就不贅述了
?
15. 最后回到可以看出這實際上就是說的檢驗下[rbp+130h+var_12C]有沒有超過字符串的長度了,自此,基本一整個程序加密的邏輯都盤清楚了
當然還有最近的輸入的問題,不過這道題輸出真沒啥好說的,不會分析的話可以看我前面寫的,
?
總結
以上是生活随笔為你收集整理的Buuoj reverse1的全部內容,希望文章能夠幫你解決所遇到的問題。