日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

IDA——动态调试Linux上的ELF文件(整合他人博客)

發布時間:2023/11/30 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件(整合他人博客)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。