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            

             IDA——动态调试Linux上的ELF文件(整合他人博客)_第1张图片

             IDA——动态调试Linux上的ELF文件(整合他人博客)_第2张图片

  • 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]

        IDA——动态调试Linux上的ELF文件(整合他人博客)_第3张图片

 

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

        IDA——动态调试Linux上的ELF文件(整合他人博客)_第4张图片

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 
 

你可能感兴趣的:(linux,逆向)