工具:
DIE:下載:https://download.csdn.net/download/m0_73981089/89334360
IDA:下載:https://hex-rays.com/ida-free/
新手小白勇闖逆向區!!!
[reverse]easyre
首先查殼,用DIE看程序信息,看到無殼且是64位的程序,用其相應的IDA打開
用IDAx64打開,查看源碼,點開主函數(main)
?發現界面是直接由flag字眼,直接點開
?便得到flag
?
?
[reverse]reverse1
拿到文件,先查殼,用DIE根據下圖,可以判斷該程序無殼,且程序也是64位
?將其用IDA64位打開進行反匯編
看主函數(main)這里是main 0,打開便看到匯編碼顯眼的flag字眼
還看到這個{}非常像flag
?但是不是
回滾到看到顯眼flag字眼:
我是小白😳,看的有點困難😅,直接再此界面看偽代碼(按F5鍵)
?有點編程小基礎應該能猜到紅色框是輸出printf(print),黃色框框應該是輸入scanf
而Str1是我們所需要輸入的內容,點開Str2,發現是?{hello_world}字符串
再分析上端代碼
大概意思是:
用for循環來遍歷Str2這個字符串,如果超過Str2長度則跳出循環,如果再Str2能找到ASCII碼為“111”,則把其替換為ASCII碼為“48”的字符
?如果不記得ASCII碼可以選中ASCII碼鍵盤按“R”鍵,會顯示ASCII對應的字符,如圖
?那這樣就大概知道了,只需要把Str2“?{hello_world}”的o替換為數字0,則是本題的flag
提交成功啦!!!?
[reverse]reverse2
剛開始我將文件用010 editor打開,發現了一串很像flag的字符串
輸進去,我以為我以為意外解,哇趣,不對,騙人!?
仔細想想,這是一道逆向題,不用任何相關文件就能解出flag概率還是很小的?😳
回歸正題:
老規矩,先查殼,用DIE工具,沒有殼,程序為64位
?還是用IDAx64位打開,進行反匯編
還是先查看主函數的匯編代碼,大致看了一下,也看到flag的字眼?
(看不懂匯編代碼的可以跟我操作哦)所以我們先查看偽碼(按F5),慢慢分析
s2是我們需要輸入的但是flag我們不知道,點擊flag進行查看:
看來flag是{hacking_for_fun},等等先別急,我們代碼還沒有分析呢
輸入輸出由一些些C語言基礎或者C++基礎應該是可以看懂的,這里就不過多解釋啦
直接看條件
大概意思是:
如果pid不為空,則會執行waitpid這個函數(此不是我們需要重點抓住的),看后邊,如果pid為空則for循環遍歷flag這個字符串,如果flag上的字符加上從0到其長度的等于ASCII碼為105或者114,則改為ASCII碼為49
(是不是上一題很像啊,嘻嘻~)
如果不知道ASCII碼是不是可以選其ASCII碼然后按(R)鍵
更加一目了然啦!!!?
所以最終的flag是將原本的flag“{hacking_for_fun}”所含有“i”?和 “r”字符替換為數字“1”,這樣就可以拿到本題的flag啦!!!