使用IDA Pro动态调试SO文件

(1)在IDA的安装路径中找到android_server文件。


(2)将android_server拷贝到手机的/data/local/tmp目录下面。


(3) 将手机插上电脑,打开命令提示符, 
先输入”adb shell”,然后输入”su root”获取root权限。
接着输入” chmod 777 /data/local/tmp/android_server” 给android_server加上相应的权限。 
接着输入” /data/local/tmp/android_server”启动android_server。


(4)重新打开一个命令提示符,
输入”adb forward tcp:23946 tcp:23946”进行tcp端口转发


(5)adb root模式下执行” am start -D -n com.example.testjniso/com.example.testjniso.MainActivity”命令,启动所要调试的Activity。注意这里选择的Activity名的获取有个技巧可获得,先打开DDMS或者Monitor,下面的窗口日志。然后手动打开APP,在前面会提示启动的Activity名,如下图:

输入调试运行的APP后, app会弹出”Waitting for debugger”对话框,如下图所示:

               


(6)启动ida pro,点击”Debugger - > Attach -> Remote ArmLinux/Android debugger”,会看到以下对话框:


点击”Debug options”按钮,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等选项的前面打上勾,如下图所示:


点击”ok”后会在以下对话框的hostname中填上”localhost”


在弹出的”Choose process to attach to”窗口中找到”com.example.testjniso”进程,选中该进程,然后点击”ok”按钮。



(7)打开eclipse ddms在Devices窗口中可以看到以下内容:


其中可以看到com.example.testjniso进程的端口为8700。


(8)打开命令提示符,输入以下命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
   如下图所示:



(9)点击ida中的继续执行按钮,下图中的绿色三角形按钮(或者按F9)。


在ida弹出的”Add map”窗口中,一律点击”Cancle”按钮。



(10)点击app中的”点击加载so文件”按钮,确保so文件已经加载到了手机内存中。点击ida中的”Debugger -> Debugger windows -> Module list ”。在”Modules”窗口中找到libTestJni.so


点击ida中的暂停调试按钮,暂停当前的调试,如下图所示:


右击libTestJniSo.so文件,在弹出的框中点击”Jump to module base”,跳转到libTestJniSo.so文件的起始地址。

按下Alt+T,弹出查找对话框中输入” Java_com_example_testjniso_MainActivity_helloFromJni” 如下图所示:


点击”ok”按钮后,即可跳转到 Java_com_example_testjniso_MainActivity_helloFromJni 函数所在的起始地址。

然后在地址处下断点:


再按F9重新开始调试,点击app中的”点击加载so文件”按钮重新加载libTestJniSo.so,即可看到程序成功地停在了断点处:


到此处就可以正常地调试so文件了。


原文参照:http://blog.csdn.net/pengyan0812/article/details/43990791

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

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

相关文章

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作(大数据处理)主要是.split和re.findall和glob.glob运用。 读取文件的路径(为了获得文件内容)和提取文件路径中感兴趣的东西(标签) 1,“glob.glob”用于读取文件路径 2,“.…

Android系统架构图

一、Aplications(应用层) 应用是用Java语言编写的云新在虚拟机上的程序。 二、Application Framework(应用框架层) 这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。 V…

AES算法重点详解和实现

可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长度等于16*(n1)。在不足16的整数倍的情况下,假如原始数据长度等于16*nm[其中m小于16]…

勒索病毒傀儡进程脱壳

样本是:wallet勒索病毒 环境:虚拟机VMWARE win7 32位 工具:OD,winhex 初次拿到样本,先用火绒剑工具监控下病毒样本的流程,可以看到有一个自创建进程的行为。 我们等找到OEP后,在CreateProcessA下…

arm32和arm64常用指令B BL BLX机器码计算

现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thumb指令集状态的切换了。在调用函数时,会有常用的调用方式:BL和B&#x…

openssl c++实现bouncycastle中AES加解密

0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提供对对称、不对称、块和流密码的加密…

win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试

0 背景在S3C2400开发板裸板调试程序中,常用调试手段有三种:点灯法,串口打印,OpenOCD。OpenOCD又分命令行和图形界面(Eclipse)。点灯发和串口打印调试效率都很低,若能掌握第三种调试方法,会让开发过程变得高…

无源码情况下动态调试混淆的java程序

逆向工程JAVA通常是非常简单的,因为优秀的JAVA二进制反编译器已经存在多年。类似于jd-gui工具和恢复java二进制文件源代码功能也做的非常出色的。在这种情况下我们需要动态调试java反编译java程序的情况下,可以从反编译导出然后导入java IDE如Eclipse作为…

OpenJTAG调试S3C2440裸板程序

0x00 懵逼当你写好的初始化代码head.S和链接脚本uart.lds共同编译出来的*.bin,烧录到NandFlash中的时候,发现串口输出一片空白,这时你的想法是什么,砸电脑还是干点其他有用的事?还是老实的搭建调试环境吧,上…

APK逆向之静态分析篇

0x00 APK包结构0x01 APK反编译-apktool啰嗦一句,反编译之前配置好java环境,具体JDK安装过程,请参照之前的文章。下载最新版本的apktool.jar,并在当前目录下编辑脚本apktool.bat,内容如下: echo off set PAT…

S3C2440 lds链接脚本解析

1. SECTIONS到底意味着什么在一个裸版程序里面含有*.lds文件,而lds文件意味着如果你的程序烧录在nandflash,那在nandflash的内存将根据lds文件指定偏移来分布,下面从不同场景来解释SECTIONS的内容。2. 小于4K程序若程序小于4K,那…

安装qt5.9.5 windows环境

下载:用国外链接下载慢,还是乖乖用国内链接地址吧,我这里5.9.5http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/5.9.5/qt-opensource-windows-x86-5.9.5.exe。安装: 在安装的时候需要创建qt账号,然后根据你的vis…

qt在visual studio 2015下的使用

创建工程: 打开visual studio,按上一篇文章的方式创建新工程QtGuiApplication1,默认我们可以看到里面会出现QtGuiApplication1这个类是继承于QMainWindow这个类的。在创建过程中注意下图选项:有三个对象分别是QMainwindow&#xf…

qt 收缩窗体

效果图:功能拆分图:代码: QtStubOption.cpp QtSubOption::QtSubOption(QWidget *parent): QLabel(parent) {ui.setupUi(this);m_GuiShow SHOWGUI;setMouseTracking(true);m_PicStatus[SHOWGUI] ":/QtGuiApplication3/tile";m_Pic…

Android的ELF文件重定位详解,包括64位

0x01 引言 ELF文件格式,主要基于两种,一种是基于链接视图,链接视图即是基于节(Section)来进行解析,一种是基于执行视图,执行视图即是基于段(Segment)来进行解析。前一种是用于静态分析的时候,譬如IDA载入。…

IBinder获取手机服务信息异常

小米8 利用IBinder transact获取服务的接口名字,结果出现以下异常: W/System.err: java.lang.SecurityException W/System.err: at android.os.BinderProxy.transactNative(Native Method) W/System.err: at android.os.BinderProxy.transact(B…

初学C遇到的一些知识点汇总

<span style"font-family: arial, courier new, courier, 宋体, monospace; white-space: pre-wrap;">本人是以C#为入门语言&#xff0c;现在开始学习数字图像处理&#xff0c;正在学习c语言&#xff0c;在这方面还是小白&#xff0c;所以打算把遇到的问题进行…

利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)

一、前言 由于还处于学习阶段&#xff0c;大多数内容都是从网上学习借鉴的&#xff0c;重复的内容就不多赘述&#xff0c;只是将自己的经验和想法分享出来。感觉不错的学习资源如下 http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html http://www.cnblog…

Haar特征原理与icvCreateIntHaarFeatures方法的具体实现附详细注释—— 人脸识别的尝试系列(二)

带着强烈的兴趣&#xff0c;上周开始人脸识别的尝试与学习&#xff0c;并且将具体的操作过程记录了下来 链接如下&#xff1a;http://blog.csdn.net/u011583927/article/details/44627493 这周开始了对于算法的深入学习&#xff0c;下面进入正题。 Haar特征的原理是什么&…

createsamples.cpp中生成vec文件的实现及详细注释、图解——人脸识别的尝试系列(三)

在我们开始训练我们的Haar分类器之前&#xff0c;首先要对样本进行处理。 人脸识别的尝试系列&#xff08;一&#xff09;中&#xff1a;http://blog.csdn.net/u011583927/article/details/44627493 我们已经提到了如何准备我们的样本&#xff0c;在如下图准备好样本之后 需…