這道題目是tjctf的一道題目,當時我是不知道怎麼做的,畫堆疊圖老是對不上號,不會動態就很麻煩了,題目我後面補上,
題目看上去不難,都告訴你flag了,然而ida的解析是不能完全說明問題的,你把那串flag複製上去,發覺是錯的,為什麼?你看他中間還有一堆資料處理,這是白幹的嗎?不可能的,看彙編**
從0804858f開始便是那堆資料處理,學過棧的人可以很清楚知道,那便是區域性變數存放的地方,也就是flag的地方,你可以對比下上面的賦值位址
發覺地點是一樣的,也就是說,他修改了flag的某些值,那如何獲得正確的flag呢,有兩種辦法,一種比較傻的辦法就是畫棧區圖,對比著那些個位址,把資料帶入,最後肯定能得到正確的flag(ps:我太菜了,不知道**出錯,畫了好久沒得到正確的結果)重點來講講第二種方法,也就是我的標題,用gdb動態獲取,因為執行的時候flag必然會載入到記憶體之中,我們只需要在正確的地方斷下,檢視flag就可以了,好了開始工具的使用吧。
首先先安裝peda,這是gdb除錯神器啊,以前我特不習慣用gdb就是因為他沒有暫存器,堆疊這類視窗,peda彌補了一點點
開啟終端,alt+ctrl+t,或者右鍵開啟
輸入命令
git clone ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
安裝好後,開始進行除錯,gdb 除錯檔名(記得帶上字尾,我的檔案為2.elf,就gdb 2.elf),
你會看到最下面那個沒截圖完整的紅色字,那裡輸入start
便出現了這個視窗,這道題補充幾個gdb命令學習
檢視ida後,發覺需要的字串在
s2和s1處,左邊是位址,也就是080485b6和080485ba兩個地方,下斷可以用b *0x080485b6這樣下,除錯過後,可以得到第一次的字串為
eax的值tjctf
第二次的為tjctf
哪個是真的flag自己去試,不要以為很簡單,這些個操作,就不去嘗試,我挖了個坑給你們,你不試過是會出錯的,在這篇文章裡的知識,只是我沒點出來,到此,這篇文章也結束了,祝愉快!
Linux基礎入門 1 Linux系統簡介
1.1 linux為何物?linux 就是乙個作業系統,就像你多少已經了解的 windows xp,7,8,10 和 mac os 這裡簡單介紹一下作業系統在整個計算機系統中的角色。我們的應用體系主要由四層構成,分別為 硬體 最大層 核心 系統呼叫和應用程式,我們的 linux 也就是系統呼叫和核心...
nginx入門1 linux上安裝nginx
先yum y install gcc gcc c autoconf pcre pcre devel make automake進nginx官網找到相應的系統,按照提示操作 以centos為例,在 etc yum.repos.d目錄下 新建檔案nginx.repo,寫入以下內容,然後yum insta...
redis 系列1 linux下安裝說明
原文 redis 系列1 linux下安裝說明 一.安裝環境 作業系統 centos 7 redis版本4.06,客戶端windows 7 vs2015。1.1 安裝前的條件 yum y install gcc c 判斷是否安裝了gcc c 指令碼如下 安裝後的bin目錄檔案如下 在安裝時,如果沒有...