與pe程式基本類似,將elf程式拖入ida也可以快速的反彙編,主要借助hex-ray外掛程式來反編譯出可讀性較高的偽**
trickgdb是unix和unix-like下的乙個除錯工具
它沒有圖形化介面,通過簡單明瞭的命令來除錯程式
常用命令:
- r/run [args]
引導程式後使用run命令啟動程式
- b/break [address/functions]
在某個位址(記得在位址前要加*,代表這是乙個位址)或符號名
- c/continue
繼續執行
- n/ni(next)
執行一行源**/彙編**但不進入函式內部
建議費事點使用ni,可以避免在有除錯資訊的時候產生非常神奇的事情(明明只單步了一下彙編卻跳了好幾行)
- s/si(step)
執行一行源**/彙編**並進入函式內部
- x/examine
按照一定格式列印記憶體位址處的資料
- cout表示列印的數目,預設為1
- fmt表示列印格式,如x為16進製制,d為10進製,c為字元,s為字串等,預設為上次使用的fmt
- size表示列印單位,如b(byte), h(halfword), w(word), g(giant)等,預設為上次使用的size
- address表示目標位址,也可使用*來取指標值或取寄
存器的值
−set
寫記憶體/
暫存器e
g:se
t 取寄存
器的值−
set寫
記憶體/寄
存器eg
:set
rsp=0x123456
set *0x123456=0x654321
有時elf程式開啟了pie(**位址隨機化),會導致程式每次載入的位址都不同,進而在某些沒有符號的函式中難以下斷
此時可以對main/printf/gets/puts等已知符號的函式下斷,然後找到主函式呼叫的偏移,進而根據檔案中的偏移來找到載入基址。有了基址以後就好計算其他位址的虛擬位址了
遠端端的監聽程式在ida根目錄/dbgsrv/下,linux對應的就是linux_server/linux_server64,由程式版本決定使用哪個。
將其複製至遠端系統後以管理員許可權執行即可
ida選擇debugger-remote linux debugger後,在process options中設定hostname(ip),port保持預設的23946即可,password輸入該使用者的passwd
start process(f9)可以直接啟動程式,在監聽伺服器的終端中進行回顯和輸入
也可以通過attach to process來附加正在執行的程式
babyre
hint:smc
所謂花指令即是不會執行或是執行了以後沒有任何用處的彙編指令
當在靜態分析時遇到從沒見過的彙編指令、程式段中出現了bad byte、或是jmp等跳轉指令的目標是乙個彙編**的中間時,很有可能這裡出現了花指令
當在使用ida的hex-rays外掛程式時,如果遇到棧指標錯誤或是反編譯**明顯不對勁等情況時,也有可能是花指令在作祟
最簡單的確認花指令與否的手段就是動態除錯,看程式是否會執行到該處地方(建議在不可辨識的指令之前下斷)
但是未解密的smc**也有可能產生上述現象,因此需要自行甄別,通常情況下大段的**更可能是未解密**,而花指令通常僅影響數條彙編指令
花指令一般具備一些格式特徵,以便新增和跳過髒字節,例如
jmp c
–bad byte–
c: other instruction
當花指令較多時這些特徵就能幫助識別
關於去除,通常是將髒字節全部改為nop,即0x90
nop是單位元組指令,因此不會影響到其他指令的解析,同時它的作用是什麼都不做,因此也不會影響hex-rays的反編譯
手動在ida中去除花指令
實驗–easy_junk
編寫idc指令碼去除花指令
實驗–hard_junk
linux中由於與windows系統機制的一些不同,因此反除錯也有一些區別
不過由於斷點位元組同樣是0xcc,因此在檢測0xcc或者hook0xcc的反調方法中是一樣的
大部分偵錯程式、注入的基礎技術都使用的是ptrace
而乙個程序只能被乙個程序ptrace
trace_me就是乙個對自己除錯的引數
如果先執行的trace_me,那麼之後的偵錯程式就無法再附加到該程序上
如果直接由偵錯程式啟動,那麼trace_me會返回false表示ptrace失敗
從而檢測到偵錯程式的存在
反制方法
patch
ld_preload
gdb中set environment ld_preload ./ptrace.so
直接啟動時ld_preload=./ptrace.so ./traceme
可防止自校驗
除錯過程中篡改trace_me的返回值
在/proc目錄中有每個程序的狀態,通過pid可以讀到指定程序的狀態,包括程序名、state、ppid等等
其中ppid就是父程序的pid,在沒有父程序時該項為0,而被偵錯程式啟動時將會顯示偵錯程式的pid,因此可以通過ppid來檢視除錯狀態
另外tracepid會直接顯示偵錯程式的pid,當被附加時ppid將不會是偵錯程式,但tracepid會改變
反制方法
主要是hook/靜態分析open函式,因為status是乙個檔案描述符,必須通過open來讀取
因此在檢視匯入符號時如果發現open就要引起注意了,也許是乙個反除錯機制
ltrace命令可以快速地檢視庫函式的呼叫
另外要注意的是,open函式的底層實現是通過linux的syscall(__nr__open, sys_open)來實現的,有時為了規避匯入函式的問題以及避免被輕易發現, 會直接通過syscall來呼叫
alarm也稱為鬧鐘函式,它可以在程序中設定乙個定時器,當定時器指定的時間到時,它向程序傳送sigalrm訊號。可以設定忽略或者不捕獲此訊號,如果採用預設方式其動作是終止呼叫該alarm函式的程序。
在逆向題目中通常僅僅是乙個小花招,如果時間設定的較短可能導致來不及附加,或比較麻煩
反制方法
patch
指標的逆向
指標操作技巧 1 運算時一定要先把位址存入指向單位元組指標中,這樣指標運算時的 1 2要取單位元組就將位址存入指向單位元組指標中,要取四位元組就將位址存入指向四位元組的指標中,之後用指標 0 輸出即可 3 指標的感覺 一級指標 存了變數 結構體的位址 onepoint 輸出變數 結構體的位址 one...
逆向筆記3 常見的逆向除錯方式
1.nop法 nop法通過用於跳過序列號驗證機制,得到最後的成功結果,關鍵是我們要找到序列號判定的函式,如何找到這個函式,常用的方法有以下幾個 1.利用字串查詢法,右鍵,查詢,引用的字串,查詢判斷失敗或者成功彈出的字串,從而向上,找到判定函式的位置,之後再跟進除錯。2.利用呼叫模組查詢法,右鍵,檢視...
逆向查詢 EXCEL 對資料的逆向查詢
立題簡介 內容 使用excel下的 vlookup 或 match index 函式實現逆向查詢 從右至左查詢 作用 使用excel下的 vlookup 及 match index 函式實現逆向查詢 從右至左查詢 環境 excel 2013 日期 2020 04 19 分割線 立題詳解 本次討論使用...