android so 调试

2023-11-18

安卓调试

环境&tool

  • JDK 8X(之前用15版本的,monitor一直无法启动): 链接:https://pan.baidu.com/s/12LUwB7ZOVEcblAzkO8hxyA
    提取码:5lw0
  • monitor.bat

流程

开启调试功能

  • 启动调试功能
magisk resetprop ro.debuggable 1
stop;start; //一定要通过该方式重启
  • 查看下是否启用了调试
getprop ro.debuggable

启动目标应用

  • adb shell am start -D -n 包名/activity名
adb shell am start -D -n  cn.beacon.chat/cn.beacon.chat.app.main.SplashActivity
  • 这时目标应用会暂停,显示 Waiting for Debugger。 等待调试器连接。

IDA附加

  • 把 ida 对应的 server 上传到手机后启动(-p 修改默认端口):
chiron:/data/local/tmp # ./idaser75_64 -p 6666
IDA Android 64-bit remote debug server(ST) v7.5.26. Hex-Rays (c) 2004-2020
Listening on 0.0.0.0:23946...
  • 然后转发手机的端口:
adb forward tcp:23946 tcp:23946
  • IDA 选择远程调试器,设置IP和端口后附加。

继续运行APP - 1

  • 启动 monitor.bat,选择调试应用,可以看到两个调试端口,一个是按顺序从 8600 开始生成的,另一个是鼠标选中后,默认的 8700 调试端口。
  • 继续运行:
"C:\Program Files\Android\Android Studio\jre\bin\jdb.exe" -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

jdb 连接器列表
  • com.sun.jdi.SocketAttach 是 socket 连接器,通过套接字附加到其他 VM
"C:\Program Files\Android\Android Studio\jre\bin\jdb.exe" -listconnectors

继续运行APP - 2

  • 没法用

  • 根据进程号进行端口转发。

com.baidu.baidulocationdemochiron:/ # ps -ef |grep beac
u0_a256      23061 26049 1 09:07:10 ?     00:00:00 cn.beacon.chat
  • adb 转发
adb forward tcp:12345 jdwp:23061
  • jdb 附加
"C:\Program Files\Android\Android Studio\jre\bin\jdb.exe" -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=12345

问题

monitor报错

  • 启动 monitor.bat ,弹出错误窗口,查看 .log文件:
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
解决
  • 一个问题是没有设置 JAVA_HOME 环境变量;
  • 另一个问题是 JDK 版本过高,使用8X版本才可以启动……浪费好多时间。

jdb 连接后崩溃

  • jdb connect 目标VM后, 直接退出,IDA也直接报错。
java.io.IOException
        at jdk.jdi/com.sun.tools.jdi.VirtualMachineManagerImpl.createVirtualMachine(VirtualMachineManagerImpl.java:238)
        at jdk.jdi/com.sun.tools.jdi.VirtualMachineManagerImpl.createVirtualMachine(VirtualMachineManagerImpl.java:245)
        at jdk.jdi/com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:120)
        at jdk.jdi/com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:83)
        at jdk.jdi/com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
        at jdk.jdi/com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
        at jdk.jdi/com.sun.tools.example.debug.tty.Env.init(Env.java:63)
        at jdk.jdi/com.sun.tools.example.debug.tty.TTY.main(TTY.java:1095)

致命错误:
无法附加到目标 VM。
  • 看雪上也有相关文章,说android10的一些变化,导致了这个问题。
    • https://bbs.pediy.com/thread-266922.htm
    • 解决方法是 patch: linker、linker64,搜索__dl_notify_gdb_of_load 函数,nop掉两个对 rtld_db_dlactivity(); 函数的调用。
  • 最后想到,如果是这样,用 gdb 是不是就可以了, 尝试后果然可以,只是没有 ida 那么方便罢了。

只有一个线程

export IDA_LIBC_PATH=/apex/com.android.runtime/lib/bionic/libc.so

export IDA_LIBC_PATH=/apex/com.android.runtime/lib64/bionic/libc.so

jdb命令

  • threads
    • 获取所有线程信息
  • classes
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android so 调试 的相关文章

随机推荐

  • Unity核心5——Tilemap

    Tilemap 一般称之为瓦片地图或者平铺地图 是 Unity2017 中新增的功能 主要用于快速编辑 2D 游戏中的场景 通过复用资源的形式提升地图多样性 工作原理就是用一张张的小图排列组合为一张大地图 它和 SpriteShape 的异
  • android Scrollview里的内容不停留在顶部的问题

    先说明一下 任何一个页面都应该按照布局的先后顺序来显示 我这出现的问题就是 Scrollview里面嵌套Listview的头布局一进来看不见了 直接被Listview把焦点给抢了 最先显示的是Listview的item部分 直接上图 解决代
  • React中的“计算属性”

    React中的 计算属性 相信许多学习过vue的小伙伴对计算属性都不陌生吧 计算属性能帮我们数据进行一些计算操作 计算属性是依赖于data里面的数据的 在vue中只要计算属性依赖的data值发生改变 则计算属性就会调用 那React中也有计
  • gsaop 有头文件生成wsdl文件

    gsoap ns service name name area gsoap ns service style rpc gsoap ns service encoding encoded gsoap ns service namespace
  • SSM框架之MyBatis(二)--多表查询及查询结果映射

    使用MyBatis这一强大的框架可以解决很多赋值的问题 其中对于子配置文件中的小细节有很多需要注意的地方 使用这个框架后主要就是对于配置文件的编写和配置 今天我写了一个多表查询 表的基本结构如下 用户表t user 用户编号uid 账号ac
  • CNN中特征融合的一些策略

    Introduction 特征融合的方法很多 如果数学化地表示 大体可以分为以下几种 X Y textbf X textbf Y X Y X
  • 12. Xaml Calendar控价 时间控件-->像挂历

    1 运行图片 2 运行源码 a xaml 源码
  • 通信原理复习(四)——基带数字信号的表示和传输

    数字信号传输的标志 1 除去直流分量和频率很低的分量 2 在接收端得到的每个码元的起止时刻信息 3 使信号的频谱和信道的传输特性相匹配 波形 1 单极性波形 只适合用导线连接的各点之间做近距离传输 0和 V V 2 双极性波形 取 V和 V
  • AD导入3D模型

    我之前写过一篇文章也是说AD的3D模型的 http blog csdn net tq384998430 article details 78614014 介绍的是使用AD自带的功能绘制3D模型 但是这样绘制出来的形状并不是很好看 如果导入元
  • el-table的无限滚动(效果比虚拟滚动更优)

    步骤 1 前端安装 save el table infinite scrol npm install save el table infinite scroll 2 全局引用 在main js中引用 import Vue from vue
  • C语言实现八进制转十进制

    八进制转十进制 include
  • java类的生命周期

    如图 1 加载 我们编写一个java的源文件 经过编译后生成一个后缀名为 class的文件 这结合四字节码文件 java虚拟机就识别这种文件 java的生命周期就是class文件从加载到消亡的过程 关于加载 其实 就是将源文件的class文
  • 关键元器件选型设计指引--通用逻辑器件(逻辑IC)

    1 物料分类 标准逻辑器件 标准数字逻辑IC集成电路可以从工艺 功能和电平三个方面划分 列表所示 注 常见的逻辑电路有54军用系列和74商用系列 两者电路功能一致 本文仅讨论74系列 按照制造工艺特点分类 工艺 逻辑器件产品族 优点 不足
  • sublime-text3-自定义代码补全

    自定义代码补全 打开sublime text3 选择菜单栏 工具 gt 新代码段 按以下模板填充 content 在CDATA中填补全内容 tabTrigger 触发代码 scope 文件类型 description 描述信息 下例为 输入
  • Kafka一致性

    一 存在的一致性问题 1 生产者和Kafka存储一致性的问题 即生产了多少条消息 就要成功保存多少条消息 不能丢失 不能重复 更重要的是不丢失 其实就是要确保消息写入成功 这可以通过acks 1来保证 保证所有ISR的副本都是一致的 即一条
  • CSP 202212-1 现值计算

    答题 主要就是 include
  • “无法从静态上下文中引用非静态变量,非静态方法”原因及解决

    1 原因 1 用static修饰的方法为静态方法 修饰变量则为静态变量 又分别叫做类方法或者类变量 这些从属于类 是类本身具备的 没有实例也会存在 2 而非静态方法和变量的存在依赖于对象 是对象的属性 需要先创建实例对象 然后通过对象调用
  • ★SQL注入漏洞(7)SQL注入高级篇

    分析目标防火墙并且跳过 1 直接拉黑ip类防火墙 2 过滤删除相应字符的防火墙 1 waf注释符号过滤 例题 Sqli labs T23 特点 注释符 被过滤掉了 绕过方法 逻辑上补全闭合即可 多加一次url编码只是更安全的绕过 selec
  • Redis系列1——数据类型和常用数据操作

    一 redis基础知识 客户端和服务器命令 默认端口号6379 服务器命令 redis server redis windows conf 设置服务一直开启 首先进入redis安装目录 然后执行 redis server service i
  • android so 调试

    安卓调试 环境 tool JDK 8X 之前用15版本的 monitor一直无法启动 链接 https pan baidu com s 12LUwB7ZOVEcblAzkO8hxyA 提取码 5lw0 monitor bat 流程 开启调试