先查看机器之间是否可以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文件(整合他人博客)相关推荐

  1. linux elf命令,实战:Linux上修改ELF文件的方法

    7zip/bin/7za x -y -bd "-o/temp/94ac6fe8-1a16-43d8-8fa9-c4e2f2bd0445" "/downloadedPack ...

  2. ida调试linux程序,[原创]IDA动态调试ELF

    0x00:环境 待调试ELF文件 IDA 7.0 主机:Windows 虚拟机:Linux 达成效果:在Window上利用IDA远程动态调试linux里的ELF文件 0x01:Unbuntu里运行ID ...

  3. 【reverse】buu-[Zer0pts2020]easy_strcmp——main函数的启动过程+IDA动态调试ELF

    文章目录 依赖 思路 代码 CPP实现 Python+libnum库 IDA动态调试 参考资料 依赖 IDA7.7 Ubuntu20.04 作者:hans774882968以及hans77488296 ...

  4. android ida多线程调试,C/C++知识点之ida动态调试.so 动态加载(必须真机)

    本文主要向大家介绍了C/C++知识点之ida动态调试.so 动态加载(必须真机),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 第一步连接安卓手机 查看设备 localhost: ...

  5. Android IDA 动态调试最完善攻略,跨过各种坑

    From:https://www.pianshen.com/article/3409449384/ IDA 静态分析 与 动态分析:https://zhuanlan.zhihu.com/p/38983 ...

  6. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  7. ida 动态调试so库 (连接夜神模拟器)

    本文参考: 夜神模拟器 结合IDA 动态调试SO文件 打开夜神模拟器,然后进入夜神模拟器安装目录下(有nox.exe那个文件夹) 输入命令 nox_adb.exe connect 127.0.0.1: ...

  8. 安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)

    1. 安卓程序动态调试条件 安卓程序动态调试条件 ( 2个满足1个即可 ): 1. 在 AndroidMainfest.xml ---> application 标签下,设置或者添加属性 and ...

  9. Android逆向之旅---Android中分析抖音和火山小视频的数据请求加密协议(IDA动态调试SO)

    一.前言 最近萌发了一个做app的念头,大致什么样的app先暂时不说,后面会详细介绍这个app的开发流程和架构,不过先要解决一些技术前提问题,技术问题就是需要分析解密当前短视频四小龙:抖音,火山,秒拍 ...

最新文章

  1. ajax 返回数组某个属性值,js中sort方法根据数组中对象的某一个属性值进行排序...
  2. JS事件:target与currentTarget区别
  3. 企业巧妙运用飞秋提高工作效率
  4. mysql 双主 脑裂_MySQL 高可用性keepalived+mysql双主
  5. 厉害!不到30行代码,自制成语接龙小游戏
  6. 从源码分析Android的Glide库的图片加载流程及特点
  7. 稍加改进的Switch/Case扩展方法
  8. JSP图书借阅管理系统
  9. 用python 打开一个excel文件
  10. Linux 文件属性与权限
  11. 如何让一台连接wifi上网的电脑通过网线让另一台电脑上网?
  12. 【linux】linux终端命令总结
  13. python切换路径到当前目录
  14. vga分屏2个显示器_VGA多分屏聚合器和有趣的问题
  15. 互联网程序员和外包公司的程序员有什么区别?
  16. 报名投票链接怎么做做一个投票的链接怎么做微信投票链接怎么做
  17. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表
  18. 2022年电工(初级)考试试题模拟考试平台操作
  19. 深度学习-目标检测评估指标P-R曲线、AP、mAP
  20. app.publish_获取eZ Publish 5.x以便在Homestead上工作的13个步骤

热门文章

  1. CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset
  2. Bootstrap学习笔记01
  3. 前端为什么非要动静分离 说一下CDN托管的意义
  4. CSS中的三种样式来源:创作人员、读者和用户代理
  5. 跳槽上班第一天的感受
  6. scala akka通信机制
  7. java只使用try和finally不使用catch的原因和场景
  8. Standard C++ Episode 7
  9. 基于HtmlParser的网络爬虫
  10. java thread isalive_Java线程编程中isAlive()和join()的使用详解