安卓逆向_17 --- IDA 动态调试【 环境搭建、so库调试【动态普通、动态debug模式】、JNI_OnLoad调试分析、java_ 开头函数分析】

 

哔哩哔哩视频:https://www.bilibili.com/video/BV1UE411A7rW?p=54

IDA Pro调试so,附加完毕,跳到目标so基址,但是内容都是DCB伪指令?:https://bbs.pediy.com/thread-222646.htm

Android 中 adb shell ps 查看手机中进程信息:https://blog.csdn.net/qq_15212357/article/details/81063622

ida pro 动态调试步骤:https://www.jianshu.com/p/d2d28920940c

 

 

1. 创建虚拟机

 

通过 Android Studio 的 AVD Manager 新建一个虚拟机

点击 AVD Manager 新建一个虚拟机

 

 

2. 设置 IDA Pro 的远程调试

 

将 IDA Pro 中 android_server 这个文件传到 虚拟机中

使用IDA 进行远程调试( 原理 ):https://blog.csdn.net/eqera/article/details/8239622

ARM Linux下搭建IDA Pro远程调试环境https://bbs.pediy.com/thread-224337.htm

这里以 雷电模拟器 为例,首先确定 雷电模拟器安卓版本,安装 device info hw.apk ( https://www.cr173.com/soft/845060.html ),打开 app 即可查看 安卓平台类型

所以选择 andriod_x86_server 文件,使用 adb push 传文件到 模拟器,并添加 可执行 权限,然后运行

adb push 源文件 目的地址

这里是导入 源文件 到  /data/local/tmp 目录下。

然后加上可执行权限 chmod a+x andriod_server  ( 或者 chmod 777 andriod_server )

 

 

3. 启动 android_server  执行 端口转发

 

执行 android_server

在打开一个 cmd 窗口,执行 端口转发:adb forward tcp:23946 tcp:23946

如果有多个设备时,可以使用 -s 参数连接指定的设备

 

adb forward 简单使用

adb forward 的功能是建立一个转发示例:( 将PC端的11111端口收到的数据,转发到手机中22222端口。 )adb forward tcp:11111 tcp:22222但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:1. 在手机端,建立一个端口为 22222 的 server,并打开 server 到监听状态。2. 在PC端,建立一个 socket client 端,连接到端口为 11111 的 server 上。这两个步骤有先后顺序,步骤1 要先执行。步骤2 即 adb forward tcp:11111 tcp:22222 后执行adb forward 的一些基本操作 ( adb forward 命令的一些帮助信息,可以直接执行 adb 看到。 )配好 adb 的环境,连上手机,执行 adb forward tcp:11111 tcp:22222如果执行成功的话,没有任何输出。此时,通过运行 adb forward --list 查看刚才的执行结果:$ adb forward --list4391b53a tcp:11111 tcp:22222可以通过 adb forward --remove tcp:11111 删除建立的转发。PC端:端口为 11111 的 server执行 adb forward tcp:11111 tcp:22222 之后,通过 netstat -a 可以看到下面的信息:TCP    127.0.0.1:11111        LAPTOP-B0112F9S:0      LISTENING在PC端,adb forward 创建了一个监听本机11111端口的server。通过adb 转发的数据,需要先发到11111端口(在本例中如此)。这个11111端口是约定好的,你也可以改成其他端口。PC端的应用通过socket连接到11111端口,以准备发送数据。但是连接到11111端口之前,还需要在手机端启动端口为22222的server。手机端:端口为 22222 的 server    在PC端的应用开始连接之前,手机端要启动端口为 22222 的 server(socket server)。手机中adb 的 daemon进程将连接到22222端口,这样PC端应用就可以连接PC端的11111端口了,连接上之后就可以从PC端的应用发送数据给手机端的应用,手机端的应用也可以发送数据给PC端的应用。

 

 

4. IDA Pro 的 Debugger 设置

 

( 动态调试的时候不需要再使用 IDA 打开 so 文件了,但是需要 IDA 附加到对应进程。 )

打开 IDA Pro ,选择 go,即 直接进入IDA,不打开任何文件

然后 Debugger ---> Attach ---> Remote ARM Linux/Android debugger,填写ip地址、端口 ( 这个端口就是上面命令转发的端口 )

如果是 arm linux 虚拟机和真机,选择 Remote ARM Linux/Android debugger ,如果是 x86 的虚拟机,则选择 Remote Linux Debugger

点击 OK ,就会连接到虚拟机,如果连接成功,会弹出一个窗口,上面显示了虚拟机中运行的进程,

选择要进行附加的进程,点击 ok,载入成功后,如图所示,程序断到了 libc.so 的位置。     9' 50''

( *************** 雷电模拟器4下完断点,无法断到 libc.so, 雷电模拟器3 可以在 libc.so 断下 *************** )

因为要调试的 so 是  javandk1,所以可以在 modules 里面直接搜索 javandk1,双击对应模块进入模块。

( 也可以 ctrl + s 找到要调试的so文件 选择用X字样(可执行的))

IDA Pro 的 Modules这个子窗口功能是 "列出加载的所有 so",所以可以在 Modules 里面搜索 要调试的so库 javandk1

双击搜索结果,跳转到对应so库里面,然后可以查看 so 库里面的方法

查看 so 库里面的方法,如图所示:

跳转到 so库中函数对应位置,这里以 getText 函数为例进行跳转,并 下断点

触发断点( 雷电模拟器下完断点,无法断到 libc.so  )

调试 so

小技巧:按下ESC 或者 直接点击PC寄存器 ( 右边寄存器列表可以找到PC寄存器 ) 或者 右键--->jump,即可以直接返回上一步操作所在位置。。。

 

 

5. 动态 普通调试 的 调试步骤

 

https://www.bilibili.com/video/BV1UE411A7rW?p=55

上面的 "IDA Pro 的 Debugger 设置" 就是 动态 普通调试。

动态 普通调试 步骤总结:


##################################################################################普通调试模式 ( 界面出现后,可以手动操作界面 )1. 将 IDA Pro 中 dbgsrv 目录下的 android_server 文件导入到手机端adb push D:\Software\IDA_Pro_v7.2\dbgsrv\android_server /data/local/tmp2. 查看是否导入成功,并添加可执行权限,然后运行adb devices        # 列出设备adb shell          # 连接手机,进入 shell su                 # 切换 rootcd /data/local/tmp   # 切换到导入的目录ls -al               # 列出所有文件chmod a+x android_server  # 添加可执行权限./android_server     # 执行程序,(端口号默认是:23946)3. 执行 端口转发adb forward tcp:23946 tcp:23946

远程调试分为主动连接调试,和被动连接调试

  • 主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。
  • 被动连接调试:本地IDE监听某端口,等待远程连接本地端口。一般用于远程服务启动不了,启动时连接到本地调试分析。

程序挂起后, Debugger ---> Debugger option ,勾选 3 个复选框

就可以断点到 so 载入和卸载,如果想在自己打断点的位置断下,则去掉三项,然后运行即可断下。。。

 

 

6. 动态 debug模式 的 调试步骤

 

https://www.bilibili.com/video/BV1UE411A7rW?p=56

然后执行 jdb  命令,即可开始进行 so 库 的 调试。使用JDB进行调试:https://www.jianshu.com/p/5a64ed722b91

am 这个指令是 activity manager 的缩写。这个命令可以启动 Activity、打开或关闭进程、发送广播等操作。
根据 Intent 启动 Activity。am 命令格式:adb shell am <command>
options 参数如下:( -D  开启 debug 模式 )

-D:   开启debug模式
-W:   等待启动完成
--start-profiler<FILE>:  将profiler中的结果输出到指定文件中
-P:                和 --start-profiler 一样,区别在于,在app进入idle状态时profiler结束
-R <Count>:        重复启动Activity,但每次重复启动都会关闭掉最上面的Activity
-S:                关闭Activity所属的App进程后再启动Activity
--opengl-trace:    开启OpenGL tracing
--user <USER_ID>:  使用指定的用户来启动activity,如果不输入,则使用当前用户执行

第八步所使用的端口就是 8602

动态 调试模式 的 调试步骤:( 动态调试步骤:ida动态调试:https://www.cnblogs.com/LuLuLuHao/p/12866289.html

##################################################################################debug 调试模式 ( 如果一些执行比较早的函数,也就是在界面出现之前,就只有使用 debug 调试模式 )1. 将 IDA Pro 中 dbgsrv 目录下的 android_server 文件导入到手机端 adb push 文件名 /data/local/tmp/as
2. 查看是否导入成功,并添加可执行权限,然后运行打开一个cmd窗口:运行 android_server。步骤:1) adb shell 连接手机2)给一个最高权限:su3)来到 /data/local/tmp 目录,cd /data/local/tmp4) 给 androi_server 最高的权限:chomd 777 android_server5) 查看 android_server 是否拥有权限:ls -l6) 运行 andorid_server。命令: ./android_server(端口号默认是:23946)补充:运行 andorid_server 并且修改端口号: ./android_server -p 端口号
3. 执行 端口转发adb forward tcp:23946 tcp:23946
4. 打开 ddms 或者 monitor,后面会用到
5. 获取要调试的app的 包名 和 入口页面。(可以使用 AndroidKiller 找到 AndroidManifest.xml)package="com.example.calc"<activity android:name="com.example.calc.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity>
6. 挂起程序:adb shell am start -D -n 包名/类名例子:  adb shell am start -D -n com.example.javandk1/.MainActivity           执行完 adb shell am start -D -n 包名/类名 后,真机或者模拟器上会显示 Waiting For Debuger补充:此时观察 DDMS,被调试的程序前面有一个 红色 的虫子;
7. 打开 IDA,然后在 IDA 里面勾选三项。1)打开ida ---> 工具栏的debugger ---> Attach ---> Remote ARMlinux(第四项)2)添加 hostname 和 portt:hostname:主机号(默认127.0.0.1)port:端口号(之前android_server运行时的端口号或者端口转发的端口号)3)出来进程列表:选择要调试的程序( 可以 ctrl+f,搜索包名)4)进来后,勾选三项:Suspend on process entry point   程序入口点 断下Suspend on thread start/exit     线程的退出或启动 断下Suspend on library load/unload   库的加载和卸载 断下    
8. 挂载、(主动连接调试)。jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号端口号是在 ddms 或者 monitor 里面看到的补充:此时观察 DDMS,被调试的程序前面有一个 绿色 的虫子;
9.   点击IDA上面的 运行(即绿色三角符号),运行程序,会在勾选的三项的位置断下来,查看 IDA 下面的 log 输出,看要调试的so是否加载,如果没有加载,则再次点击 运行 (每点击一次,加载一个so)( 或者 ctrl + s ,ctrl + f ,搜索 对应的so,看有没有加载 )如果加载,就可以在so中函数下断点,然后取消三项,点击运行,就可以在断点处断下。
10.  然后就可以在 JNI_Onload 下断点了。

通过 AndroidManifest.xml 找到 " 包名 ",

然后以 debug 模式启动,如图所示

命令:adb shell am start -D -n com.example.javandk1/.MainActivity

下边的步骤就和上面 普通模式 的一样了,打开 IDA Pro,附加到进程,如图所示:

这时在 Modules 里面搜索 要调试的so库 javandk1,发现搜索不到

勾选三项,在 进程入口点线程开始和退出so加载和卸载 的时候 断下来

 

*****************************************************************************************

IDA Pro 报 FFFFFFFF: got SIGILL signal (Illegal instruction) (exc.code 4, tid 2536) 这个警告,

百度了下这个警告,看雪论坛( https://bbs.pediy.com/thread-206348-1.htm ) 说是使用root真机不会出现这个警告,

还有说是 拟器为x86架构,而so程序是ARM架构的原因(https://blog.csdn.net/whklhhhh/article/details/78352083)

猜测上面不能断点调试也是这原因,有时间搞真机试试。。。

*****************************************************************************************

 

 

7. JNI_OnLoad 调试分析( ARM 汇编 和 寄存器 分析 )

 

https://www.bilibili.com/video/BV1UE411A7rW?p=57

10' 16''    14'05'' ( 按 C 键,识别为 code )

 

 

8. Java_  开头 的 方法 的 调试

 

https://www.bilibili.com/video/BV1UE411A7rW?p=58

打开 ddms 或者 monitor ,如果可以看到进程列表,说明系统的调试开关是开启的。。。

 

java_ 开头函数分析  9' 40''

 

 

9. 动态 内存数据修改

 

游戏辅助原理

https://www.bilibili.com/video/BV1UE411A7rW?p=59

 

同步 PC 寄存器

修改内存数据,然后提交修改    3' 25''

 

 

 

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

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

相关文章

2018全球科技创新报告

来源&#xff1a;199IT互联网数据中心摘要&#xff1a;毕马威报告显示&#xff0c;我们如今正处在一个科技创新爆发的时代&#xff0c;对于科技企业来说&#xff0c;现在不是害怕失败或是裹足不前的时候。毕马威报告显示&#xff0c;我们如今正处在一个科技创新爆发的时代&…

安卓逆向_18 --- APK保护策略【Java代码混淆、资源混淆、签名校验】

Java 代码混淆介绍&#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p60 Android 反编译利器 jadx&#xff1a;GitHub上直接下载&#xff1a;https://github.com/skylot/jadx Jeb 软件是一款专业实用且为安全专业人士设计的 Android 应用程序的反编绎工具&#xff0…

谷歌的「未来城市」

来源&#xff1a;爱范儿摘要&#xff1a;自 2015 年以来&#xff0c;谷歌一直在进行一个神秘的项目。自 2015 年以来&#xff0c;谷歌一直在进行一个神秘的项目。它就是由谷歌主导的「高科技未来城市项目」。那这个高科技未来城市是个什么样的城市&#xff0c;让玩物君来告诉你…

安卓逆向_19( 一 ) --- APK保护策略【APP打开就崩溃 之 霸哥apk过签名校验】

From&#xff1a;霸哥磁力搜索apk 过签名校验&#xff1a;https://www.cnblogs.com/LuLuLuHao/p/12863978.html 霸哥磁力搜索app回编签名&#xff1a;https://www.ssfiction.com/archives/2293 https://www.cnblogs.com/LuLuLuHao 哔哩哔哩&#xff08; IDA 分析 so &…

OpenAI NLP最新进展:通过无监督学习提升语言理解

编译 | reason_W编辑 | 明 明出品 | AI科技大本营摘要&#xff1a;近日&#xff0c;OpenAI 在其官方博客发文介绍了他们最新的自然语言处理&#xff08;NLP&#xff09;系统。这个系统是可扩展的、与任务无关的&#xff0c;并且在一系列不同的 NLP 任务中都取得了亮眼的成绩。但…

安卓逆向_19( 二 ) --- APK保护策略【重新签名后安装打开失败 --- 书旗小说.apk、浦发银行.apk的过签名校验【so 文件修改保存】】

From&#xff08; 书旗小说过签名校验 【 使用 DDMS 分析方法调用流程 】 &#xff09;&#xff1a;https://www.cnblogs.com/LuLuLuHao/p/12874468.html 签名校验一般步骤&#xff1a; 1. 先查有没有加壳&#xff0c;如果有壳&#xff0c;先脱壳2. 如果没加壳&#xff0c;则 …

GPU、FPGA芯片成为增强机器学习能力的“左膀右臂”

选自&#xff1a;forbes 编译&#xff1a;网易智能 参与&#xff1a;nariiy在商业软件中&#xff0c;电脑芯片已被遗忘。对于商业应用程序来说&#xff0c;这是一种商品。由于机器人技术与个人硬件设备联系更为紧密&#xff0c;因而制造应用程序仍然更侧重于硬件部分。自20世纪…

增强现实技术的9个最新应用趋势

来源&#xff1a;资本实验室摘要&#xff1a;随着AR技术的成熟&#xff0c;AR与行业的融合越来越深入。从设计到营销&#xff0c;从教育到医疗&#xff0c;从出行到文化&#xff0c;AR正在重新定义各产业的思维方式和运行方式。1.教育AR应用程序正在以更具互动性的方式改变教学…

安卓系统内 的 安卓虚拟机

转载&#xff1a;虚拟大师&#xff0c;让你的系统再安装一个系统&#xff0c;实现Xposed自由&#xff0c;支持摄像头调用http://xposed.appkg.com/2971.html 虚拟大师 VMOS 虚拟大师简介 虚拟大师是 Android 系统上的 Vmvare&#xff0c;完整的且自带 Root 系统能够让你实现无限…

未来一年最有可能成为独角兽的29家美国初创公司

来源&#xff1a; 资本实验室摘要&#xff1a;近期&#xff0c;研究机构PitchBook梳理出了在未来一年最有可能成为独角兽的29家美国初创公司。资本实验室今日投资关注聚焦前沿科技创新与传统产业升级“小兄弟&#xff0c;老夫看你骨骼清奇&#xff0c;天赋异禀&#xff0c;定是…

StreamWriter类的一般使用方法

理解StreamWriter可以对照StreamReader类来进行&#xff0c;因为他们只是读写的方式不同&#xff0c;一个是读&#xff0c;一个是写&#xff0c;其他的差别不是特别大。 StreamWriter继承于抽象类TextWriter&#xff0c;是用来进行文本文件字符流写的类。 它是按照一种特定的编…

Firefox、Chrome 盘助手

From&#xff1a;https://www.runningcheese.com/baiduyun IDM 下载地址&#xff1a;http://www.ucbug.com/soft/26392.html 定制 Firefox、Chrome 下载地址&#xff1a;https://www.runningcheese.com/ 由网友 "哩呵" 制作的 网盘助手 脚本&#xff0c;需要通过拓…

复杂性理论:科学方法的第三个梯级

来源&#xff1a;人机与认知实验室摘要&#xff1a;莫兰认为系统论超越了还原论&#xff0c;复杂性理论又超越了系统论&#xff0c;它们代表着科学方法论依次达到的三个梯级。复杂性研究从20世纪末叶兴起&#xff0c;目前在国内外已成为许多学科领域内研究的前沿和热点。它涉及…

Notepad++ 简单使用

github 下载地址&#xff1a;https://github.com/notepad-plus-plus 简介 Notepad 是 Windows 下的一款免费开源代码编辑器&#xff0c;它使用较少的CPU功率&#xff0c;降低电脑系统能源消耗&#xff0c;但轻巧且执行效率高&#xff0c;使得 Notepad 可完美地取代微软视窗的记…

MIT:机器学习预测2018世界杯冠军

来源 &#xff1a;199IT互联网数据中心摘要&#xff1a;麻省理工学院报道&#xff0c;他们的研究人员开发了一种新型人工智能&#xff0c;用以预测世界杯走势。麻省理工学院报道&#xff0c;他们的研究人员开发了一种新型人工智能&#xff0c;用以预测世界杯走势。研究人员声称…

安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断

From&#xff08; 模拟器检测实战分析 &#xff09;&#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p65 怎样过 app 的模拟器检测&#xff1a;https://bbs.pediy.com/thread-249759.htm Android 模拟器如何不被检测思路&#xff1a;https://bbs.pediy.com/thread…

2017-2018中国机器人创新Top100榜单深度分析

来源&#xff1a;产业创新创投数据平台Innov100摘要&#xff1a;人类和机器人由相互隔离、保持距离发展到充分的人机交互&#xff0c;融合共生。一、2017-2018年中国机器人创新Top100榜单二、中国机器人创新Top100数据分析&#xff08;一&#xff09;机器人创新Top100产业生态分…

揭秘:机器究竟是怎么学习的?

来源&#xff1a;雪球摘要&#xff1a;从算法的角度看&#xff0c;机器学习有很多种算法&#xff0c;例如回归算法、基于实例的算法、正则化算法、决策树算法、贝叶斯算法、聚合算法、关联规则学习算法和人工神经网络算法。从算法的角度看&#xff0c;机器学习有很多种算法&…

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

1. 安卓程序动态调试条件 安卓程序动态调试条件 ( 2个满足1个即可 )&#xff1a; 1. 在 AndroidMainfest.xml ---> application 标签下&#xff0c;设置或者添加属性 android:debuggable"true" 2. 系统默认模式&#xff0c;在 build.prop(boot.img)&#xff0c;…

一文读懂:深扒人脸识别60年技术发展史

来源&#xff1a;与非网摘要&#xff1a; “他来听我的演唱会&#xff0c;门票换了手铐一对”。最近歌神张学友变阿SIR&#xff0c;演唱会上频频抓到罪犯&#xff0c;将人脸识别技术又一次推到了大众的视线中。“他来听我的演唱会&#xff0c;门票换了手铐一对”。最近歌神张学…