這是我今天要解的題目
一樣我們先確認檔案型態
file ret
ret: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6c43c1779ecbf9a8df
簡單來說,file ret告訴我們這個檔案是個64位元的Linux執行檔,重點只有兩件事:一、它是位置會被隨機搬動的PIE,也就是系統會把程式載到不同記憶體位置,讓你不能直接用固定位址去跳;二、它會載入系統的函式庫像 libc,也就是程式本身沒把所有東西都打包好,執行時還要去找系統的共用程式庫。對做逆向或攻擊的實際影響就是不能直接用硬編地址,要先找到程式或函式庫的實際位置。
但這邊我在顯示檔案時就直接找到了答案
strings其實是最快的偵查方式,會把二進位中看得出來的文字抓出來;如果flag是放在字串常數(也就是程式碼裡常見的printf("picoctf{...}") 類型),strings幾乎都能抓到。有些題目會把flag不直接用可見字串存放會在做編碼、壓縮或在執行時組合,那時才要用逆向或偵錯去拆。
這題本來是一個逆向題,給了一個可執行檔,程式執行時會要求密碼,flag需要你找出這個密碼或繞過檢查。重點不是網頁或資料檔,而是看這個程式 裡面怎麼比對密碼。那有時用strings或cat顯示內容是最直觀有效的方式,接找到答案的同時也讓我了解到逆向工程的概念。