IDA——动态调试Linux上的ELF文件(整合他人博客)
先查看機器之間是否可以ping通
?
0x00:環境
待調試ELF文件
IDA 7.0
主機:Windows
虛擬機:Linux
?
達成效果:在Window上利用IDA遠程動態調試linux里的ELF文件
0x01:Unbuntu里運行IDA的服務器組件
IDA附帶以下組件:
linux_server:在Linux計算機上執行的、用于調試32位Linux應用程序的服務器組件。
linux_server64:在64位Linux計算機上執行的、用于調試64位Linux應用程序的服務器組件。
這里也要注意一下如果你選擇的是linux_server,則應該對應開啟32位的IDA
同理開啟64位IDA
?
1)將Windows下的IDA里的dbgsrv文件夾下對應的組件復制到Linux中去,并運行這個組件。
注意:被調試文件如果是32位的,復制linux_server,被調試文件如果是64位的,復制linux_server64。
?
2)復制過去之后,打開終端,運行該組件:
- 若待調試是64位文件
1
2
chmod?+x linux_server64
./linux_server64
- 若待調試是32位文件
1
2
chmod?+x linux_server
./linux_server
0x02:Windows下配置IDA debug
菜單欄處:Debugger -> Run -> Remote Linux debugger
?
- Application:你要調試的應用程序的二進制文件的完整路徑,包括程序。對于遠程調試會話,該路徑為調試服務器上的路徑。如果選擇不使用完整路徑,遠程服務器將搜索它的當前工作目錄。
- Directory:對于遠程調試,此字段表示遠程目錄。
- Parameters:用于指定在進程啟動時傳遞給它的任何命令行參數。對于遠程調試會話,進程輸出將在用于啟動調試服務器的控制臺中顯示。
- Hostname:遠程調試服務器主機或IP地址。
- Port:遠程調試服務器監聽的TCP端口號。
- Password:遠程調試服務器所需的密碼。
1)Application
在Ubuntu中查看存放待調試ELF文件的路徑
注意:Application是要調試的應用程序的二進制文件的完整路徑,所以填的的時候要加上這個待調試ELF的文件名。
所以填入Application里的應該是:(hideandseek是我的待調試文件)
/home/user/workspace/IDA_ELF/hideandseek
?
2)Directory
輸入存放待調試ELF文件的路徑,不需要加上ELF文件了
/home/user/workspace/IDA_ELF
?
3)Parameters
不填
?
4)Hostname
Linux下打開終端,輸ifconfig,查看IP
將這個IP填入Hostname中
192.168.254.131
?
端口是默認就是23946的,從第二張圖就可以看出來
?
5)Password
填寫Linux密碼
?
6)綜上
填好后按OK,IDA就會載入遠程程序,就可以進行調試了。
0x03:
參考:IDA Pro權威指南
------------------------https://bbs.pediy.com/thread-247830-1.htm
?
?
設置好后,點擊【OK】就啟動了調試,看下調試界面:?
布局和Ollydbg基本上是一樣的,我們很容易找到熟悉的四個窗口。
調試指令
介紹一下常用的調試指令:
調試指令?? ?說明
單步步入(F7)?? ?執行下一條指令,若遇到函數,將進入函數代碼內部,停在函數的第一條指令.
單步步過(F8)?? ?執行下一條指令,若遇到函數,僅執行函數自身,不進入函數內部.
終止(CTRL-F2)?? ?終止一個正在運行的調試進程.
繼續(F9)?? ?繼續執行一個暫停的進程。執行將繼續直到遇到一個斷點、用戶暫停或終止執行或該進程自行終止.
暫停( )?? ?暫停一個正在調試的進程.
運行至返回(CTRL-F7)?? ?一直在函數代碼內部運行,直到遇到RETN(或斷點)時才停止.
斷點
和Ollydbg一樣,可以在選中的指令內存位置通過F2快捷鍵,設置軟件斷點。設置成功后,會以紅色凸顯(藍色凸顯的是將要執行的下一條指令)。可以通過【Debugger】-【Breakpoints】-【Breakpoint list】查看程序中當前已經設置的所有斷點:
我們可以編輯我們設置的斷點,在【Breakpoint list】中選中要編輯的斷點,右鍵菜單選擇【Edit…】即可打開編輯窗口:?
在這個窗口中我們看以看到,通過【Condition】欄可以為斷點設置條件,這樣斷點就轉化成“條件斷點”。在【Settings】中勾選【Hardware】后軟件斷點轉化成“硬件斷點”,這是【Hardware breakpoint mode】選項將會被激活,來設置硬件斷點必須指定行為。
原文:https://blog.csdn.net/txx_683/article/details/53454139?
?
IDA 動態調試 ELF 文件
01 ?IDA 遠程調試配置
- Windows 下的 IDA ? ??
- 在 IDA 的安裝目錄/dbgsrc/找到 linux_server 和 linux_serverx64 拷貝到 linux 虛擬機中
- 在 linux 中運行 linux_server 并在 linux 中運行要調試的 demo ?
- Debugger -- Attach -- Remote Linux debbuger? ? ? ? ? ??
? ? ? ? ? ? ?
? ? ? ? ? ? ?
- Linux 下的 IDA ?
? ? ? ? 配置方法和 Windows 相同
#!/bin/bash cd /home/ubuntu/IDA/dbgsrv/ && ./linux_server & cd /home/ubuntu/re_tools/IDA/ && ./idaq? ? ? ? 運行 ./demo
? ? ? ? [Debugger] -> [Attach] -> [Remote Linux debugger]
? ? ? ??
?
02 ?IDA 動態調試
- 調試指令
| 單步步入(F7) | 遇到函數,將進入函數代碼內部 |
| 單步步過(F8) | 執行下一條指令 |
| 運行到光標處(F4) | ? |
| 斷點(F2) | 可以通過 [Debugger]-[Breakpoints]-[Breakpoint list] 查看斷點,右鍵 [Edit] 可以設置斷點 |
| 繼續運行(F9) | ? |
| 終止(CTRL-F2) | 終止一個正在運行的調試進程 |
| 運行至返回(CTRL-F7) | 一直在函數代碼內部運行,直到遇到RETN(或斷點)時才停止. |
?
- 添加寄存器監視
? ? ? ??[Debugger] -> [Debugger windows] ?-> [Watch view]
? ? ? ??
? ? ? ? 可以添加的類型有? ? ??
? ? ? ? (Object*)v0
? ? ? ? (String)v0
? ? ? ? (char*)v0
? ? ? ? (int)v0
? ? ? ??
03 ?參考鏈接
http://blog.csdn.net/txx_683/article/details/53454139
http://www.freebuf.com/articles/system/67927.html
?
?
可能遇到的問題:
連接不上有一種原因是Linux防火墻開啟:
centos從7開始默認用的是firewalld,這個是基于iptables的,雖然有iptables的核心,但是iptables的服務是沒安裝的。所以你只要停止firewalld服務即可:?
sudo systemctl stop firewalld.service && sudo systemctl disable firewalld.service
如果你要改用iptables的話,需要安裝iptables服務:?
sudo yum install iptables-services?
sudo systemctl enable iptables && sudo systemctl enable ip6tables?
sudo systemctl start iptables && sudo systemctl start ip6tables
【問題】
Incompatible debugging server:
address size is 4 bytes, expected 4
【解決】
你的android_server 是32位的?
而你啟動的 ida 是64位的?
換成32位的ida 就OK
=====================================
【問題】
adb shell ls /data/data/ 命令權限被拒絕
opendir failed, Permission denied
【解決】
adb不是最高權限啟動的
先adb kill-server,然后 adb start-server
或者執行 adb root , adb remount
再測試,問題解決
=====================================
?【問題】
The connection has been gracefully closed by peer.
Check that IDA is the only debugger for the target.
【解決】
除了IDA 還開啟了其他的調試工具或開發工具比如 Android Studio 或 Eclipse,關閉其他即可。
=====================================
【問題】
adb shell am start -D -n (包名)/ (包名+類名)
......
adb forward tcp:17178?jdwp:16406
jdb -connect com.sun.jdi.SocketAttach:port=17178,hostname=localhost
當使用 jdb 調試時出現以下錯誤:
……
致命錯誤:
無法附加到目標 VM。
【解決】
有可能是因為 apk 忘記了修改 AndroidManifest.xml 里的 manifest ->?application ->>?android:debuggable="true"??導致的。
=====================================
【問題】
IDA 調試so 時遇到了
got SIGCHLD signal (Child status has changed) (exc.code 11, tid 3756)
等消息提示
【解決】
直接 pass to apptication... 就可以了 = =
=====================================
Warning
---------------------------
Timed out while waiting for a JWDP reply
---------------------------
OK ??
---------------------------
---------------------------
Warning
---------------------------
The debugger could not attach to the selected process.
This can perhaps indicate the process was just terminated, or that you don't have the necessary privileges.
---------------------------
OK ??
---------------------------
出現這種提示,說明你導入的Dex文件可能太大了,IDA解析不過來,用BackSmali把Dex導出,把無關的代碼刪除,再用 smali 重新打包成小的Dex文件,再進行調試就可以了
也有可能 是接線出現了問題,手機拔了重插。
=====================================
The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.
創建函數失敗,用選擇代碼的方法,再按P,具體參看下面地址
http://bbs.pediy.com/archive/index.php?t-158896.html
=====================================
【問題】
The debugger could not attach to the selected process.
This can perhaps indicate the process was just terminated, or that you don't have the necessary privileges.
【解決】
1.不要用模擬器,用真機
2.換系統 ro.debugger = 1
3.換手機?
原文:https://blog.csdn.net/deathmemory/article/details/51480799?
?
總結
以上是生活随笔為你收集整理的IDA——动态调试Linux上的ELF文件(整合他人博客)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 可执行文件 ELF结构 及程
- 下一篇: Linux获得命令帮助