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

先查看机器之间是否可以ping通

 

0x00:环境

待调试ELF文件
IDA 7.0
主机:Windows
虚拟机:Linux

 

达成效果:在Window上利用IDA远程动态调试linux里的ELF文件

0x01:Unbuntu里运行IDA的服务器组件

IDA附带以下组件:
IDA_dbgsrv
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

    run_server

0x02:Windows下配置IDA debug

菜单栏处:Debugger -> Run -> Remote Linux debugger
ida1

 

ida2

  • Application:你要调试的应用程序的二进制文件的完整路径,包括程序。对于远程调试会话,该路径为调试服务器上的路径。如果选择不使用完整路径,远程服务器将搜索它的当前工作目录。
  • Directory:对于远程调试,此字段表示远程目录。
  • Parameters:用于指定在进程启动时传递给它的任何命令行参数。对于远程调试会话,进程输出将在用于启动调试服务器的控制台中显示。
  • Hostname:远程调试服务器主机或IP地址。
  • Port:远程调试服务器监听的TCP端口号。
  • Password:远程调试服务器所需的密码。

1)Application
在Ubuntu中查看存放待调试ELF文件的路径
ida3
注意: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
ida4
将这个IP填入Hostname中

192.168.254.131

 

端口是默认就是23946的,从第二张图就可以看出来

 

5)Password

填写Linux密码

 

6)综上
ida6
填好后按OK,IDA就会载入远程程序,就可以进行调试了。
ida5

0x03:

参考:IDA Pro权威指南
idaelf

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux获得命令帮助

一、获得命令帮助 1.1、内部命令与外部命令 简单来说,在linux系统中有存储位置的命令为外部命令; 没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到。 type来判断到底为内部命令还是内部命令 [ro…

2019输入序列号闪退_正式告别60秒长语音 讯飞输入法新版评测:能动口我绝不动手...

一、前言:60秒长语音有希望消灭了从2010年,讯飞推出业界首个中文语音输入法,将语音输入带到大众面前直到今天,语音输入早就不再是当初功能机时代“语音王”的土味儿模样。如今,语音输入已经逐渐超过手写,成…

c#扩展方法奇思妙用性能篇一:扩展方法性能初测

最近写了几篇《c#扩展方法奇思妙用》的文章,一直只是讨论如何扩展、如何使用的问题,几乎没有涉及效率方面。而大家的回复好多都在问效率如何、性能怎样,也引起了我对效率的关注,今天将初步测试的结果发出来,大家一起探…

IDA

国庆礼物最强反编译工具 ida pro 7.0 破解补丁7.0sdk all sdk_utils 国内某团购群最新泄露的的版本 x86 arm x64 f5插件为最新版本 正版价值人民币3-5万 资源包含 ida pro 7.0 for mac ida pro 7.0 for windows IDA_Pro_7.0去局域网检测和兼容老版本idb补丁 2017/09/21 21…

AjaxToolKit学习笔记 之 ModalPopupExtender

1.控件功能描述 以模式窗口的方式弹出客户或服务器控件,以突出显示! 弹出的一般是DIV或PANEL. 2.控件属性描述 TargetControlID : 控制是否弹出的控件的ID. PopupDragHandleControlID : 允许拖拽的控件的ID. PopupControlID: 指定要弹出的控件的ID. BackgroundCssClass: 指定弹…

单片机涡轮流量传感器_关于涡轮流量计传感器的维护保养

涡轮流量计是一种精密流量测量仪表,与相应的流量积算仪表配套可用于测量液体的流量和总量。广泛用于石油、化工、冶金、科研等领域的计量、控制系统。配备有卫生接头的涡轮流量计传感器可以应用于制药、食品等行业。 涡轮流量计传感器部分的维护保养要注意以下几点&…

孩子在华艺舞校的画画投稿-天女之梦

转载于:https://www.cnblogs.com/speeding/archive/2010/05/24/2623966.html

controller控制器怎么写_I2C控制器编程_框架

来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)作者:韦东山本文字数:3776,阅读时长:5分钟我们现在来讲I2C控制器怎么写,它是I2C程序中最核心的地方,我们要先构造几个结构…

dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?...

本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等函数在计算机语言的使用中贯穿始终,在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作,比如求某列数据的平均值,或者求字符串的长…

centos7 docker删除端口映射_容器Docker详解

概述基本概念Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制&a…

深入解析结构化异常处理(SEH) - by Matt Pietrek

尽管以前写过一篇SEH相关的文章《关于SEH的简单总结》, 但那真的只是皮毛,一直对Windows异常处理的原理似懂非懂, 看了下面的文章 ,一切都豁然开朗. 1997年文章,Windows技术的根一直没变:http://www.micr…

@requestbody 接受int参数_C++之指针作为函数参数

C 允许您传递指针给函数&#xff0c;只需要简单地声明函数参数为指针类型即可。下面的实例中&#xff0c;我们传递一个无符号的 long 型指针给函数&#xff0c;并在函数内改变这个值&#xff1a;#include <iostream> #include <ctime>using namespace std; void ge…

c++怎么将文件中的数据读出并赋值给字符串_web前端开发过程中如何写JavaScript程序?...

script标签使用< script >< /script >src : 外联script 标签(立即调用,不能在该标签内写代码)< script >// 在标签内书写内容< /script >< script srcjavascript.js >// 这里面不能写任何内容< /script >一切准备就绪&#xff0c;让我们从…

简美电子相册

下载地址&#xff1a;微客互联 转载于:https://www.cnblogs.com/Witkey/archive/2010/06/10/1755755.html

3说明书_知行翻译:做化妆品说明书翻译时,这3点需要谨记

经过20多年的迅猛发展&#xff0c;被称为“美丽经济”的中国化妆品产业已经取得非常大的成就&#xff0c;在这20多年里&#xff0c;中国化妆品产业从小到大&#xff0c;从弱到强&#xff0c;从简单粗放到科技领先&#xff0c;已经逐步成为全世界最大的新兴市场&#xff0c;很多…

拉拢中小网站 淘宝百度暗战升级...

拉拢中小网站 淘宝百度暗战升级... 重庆晚报 讯 近日&#xff0c;大量淘宝联盟站长反映其网站在百度搜索结果大幅缩水&#xff0c;疑遭集体封杀。百度的理由是“清扫垃圾页面”。迟迟未表态的淘宝近日对前者进行了公开回应。至此&#xff0c;淘宝跟百度之间为拉拢中小网站的暗战…

.Net Remoting(基本操作) - Part.2 (转)

Remoting 构架 1.客户端(客户应用程序) 客户端的处理包含三个基本的组成部分&#xff0c;代理(Proxy)、格式器(Formatter) 和 通道(Channel)。 2.服务端(宿主应用程序) 服务端主要由 通道(Channel)、格式器(Formatter)、Stack Builder组成。 在服务端&#xff0c;宿主程序保持着…

转载——CVE-2019-0807

译文声明 本文是翻译文章&#xff0c;文章原作者mcafee&#xff0c;文章来源&#xff1a;securingtomorrow.mcafee.com 原文地址&#xff1a;https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-v…

angular移除事件绑定事件绑定_Vue.js子组件利用事件向父组件传输数据,以及sync修饰符和双向绑定...

在Vue.js的组件中&#xff0c;prop是“单向绑定”的&#xff0c;数据只能从父组件传输到子组件。Vue文档中的说了这样做的原因&#xff1a;所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定&#xff1a;父级 prop 的更新会向下流动到子组件中&#xff0c;但是反过来则…

1!+2!+3!+…+10!的和

1!2!3!…10!的和 代码 public class Test {public static void main(String[] args) {/*输出1&#xff01;2&#xff01;***10&#xff01;的和*/int sum0;int n1;for (int i 1; i <10 ; i) {for (int j1;j<i;j){nn*j;}sumn;n1;}System.out.println("sum"su…