布布轉PC端逆向啦。加油加油!!!
今天在看滴水三期的x86匯編課程和吾愛ximo的脫殼教程。現在是邊學變做題。。有着arm的基礎。x86的匯編很容易接受,懂了點基礎指令。開始嘗試解題。今天做的題碰到的也是upx的殼。打開kali直接upx -d 就脫掉了。沒啥意思,期待后面吧。
第一次用ida遠程調試Linux 系統下的文件,剛開始遇到了坑,最后還是解決了。留個記號吧。
第一次學用gdb來調試程序。基本上對着教程來操作的。總之也留個記號吧。
相關教程:https://blog.csdn.net/horotororensu/article/details/82256832
熱愛可抵歲月漫長
使用ida & gdb 調試 程序。
案例:攻防世界- RE - 新手入門 no-strings-attached
ida & gdb 調試
-
打開查殼軟件Exeinfo
發現沒有加殼。同時為ELF格式文件且為32位。
打開32位的ida將文件拖進去F5查看主函數
都是函數。分析可知,在authenticate()中出現了我們想要的flag痕跡。
跟進去查看偽代碼.
發現有個加密函數decrypt(看名字看出來的)
估計是對傳進來的函數進行了加密操作然后賦值給s2.
而下面就是對有關s2和輸入對比的if判斷。所以,s2就是我們想要得到的flag。而我們如何獲得呢?我們可以進行動態調試獲得。
ida調試 -
開啟在Linux開啟ida的調試服務。
將ida目錄下dbgsrv文件夾里面的
移入Linux的目錄中。打開一個來啟動調試服務。
打開ida
選擇
出現如圖所示
然后
Application 選擇linux系統中,你所要調試的文件的路徑,
Directory 現在linux系統中,你所要調試的文件所在的目錄路徑
parameters 不用填,留空
Hostname 選擇你linux的IP(下文給出怎么找到ip地址)
password 你linux的密碼。
獲取IP:打開linux終端。輸入 ifconfig -a
填好上方后,如圖。
點擊OK
成功進入。
另外打開一個IDA直接加載該文件。來查看authenticate函數的位置。
重新切換回我們的動態調試的ida。按G 搜索0x08048708並跳轉。設下斷點。開始運行。
一直F8調試到08048725
一定要經過decrypt這個加密函數。然后起字符串都保存在了eax這個寄存器中。我們在HEX 中查看eax保存過的值。
這里就可能有人說上面不是還有一個1嗎?應該是從1開始的,我們直接進eax跳轉的地址看。
發現是從9開始。故。我們的flag為
9447{you_are_an_international_mystery}
成功用ida動態調試的方法解出。
gdb動態調試
我們現在來講講用gdb來動態調試。
打開kali,用gdb加載程序。
既然是動態調試,gdb也跟ida一樣,也要下一個斷點來進行調試。從上文IDA靜態分析可知,經過decrypt加密后即為我們要的flag。故我們在decrypt這函數下斷點 b為下斷點
輸入 r 開始運行程序,會運行到我們下斷點的地方
然后n為單步步過,p為單步步入。
此處我們需要n。直接步過該函數,讓函數直接執行完。
我們直接看保存在eax中的值。使用x命令(格式如下)
輸入 x/200xw $eax (200是要查看的內存單元個數為200個,x是輸出整數的格式為十六進制。w是4字節輸出。)
在C語言中。0x00000000 為字符串結束符‘\0’。那么前面即為我們需要的flag的十六進制了。扣出來,寫個腳本跑一下,或者直接復制到十六進制轉文本的在線轉換網頁轉換即可得到flag。