Slimu 发表于 2023-12-3 20:10

使用脚本来简化ida附加app的操作

本帖最后由 Slimu 于 2023-12-3 20:10 编辑

>

# 自动化脚本
``` zsh
#!/bin/zsh

# 启动AndroidServer
function startAndroidServer() {
    local port=$1
    echo "启动 AndroidServer, 端口: $port"
    adb shell /data/local/tmp/android_server64 -p$port &
}

# 启动Jdb
function startJdb() {
    local port=$1
    echo "启动Jdb, 端口: $port"
    #jdb -connect com.sun.jdi.SocketAttach:127.0.0.1,port=$port
    #不要使用上面的命令, 会出现错误: java.lang.IllegalArgumentException: 非法连接器参数: 127.0.0.1,port
    #卡我半天, 我还以为是版本的问题
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=$port
}

# 转发IDA端口
function forwardIDAPort() {
    local port=$1
    echo "转发 IDA 端口, 端口: $port"
    adb forward tcp:$port tcp:$port &
}

# 转发Jdb端口
function forwardJdbPort() {
    local port=$1
    local pid=$2
    echo "转发 Jdb 端口, 端口: $port, PID: $pid"
    adb forward tcp:$port jdwp:$pid &
}

# 一键启动IDA调试
function idaAttach() {
    # 判断是否传入包名
    if [ -z "$1" ]; then
      echo "请提供目标应用的包名"
      return 1
    fi

    # 目标应用包名
    local package_name=$1
    # 目标应用pid
    local pid=$(adb shell pidof -s "$package_name")
    # ida端口
    local idaPort=2345
    # Jdb端口
    local jdbPort=6789

    # 使用"&"使任务在后台运行

    # 启动AndroidServer, 默认x64
    startAndroidServer $idaPort
    # 等待一会确保 AndroidServer 已经启动
    sleep 2
    # ida端口转发
    forwardIDAPort $idaPort
    # 延时一会等待IDA附加
    echo "等待IDA附加"
    sleep 30
    # 需要注意的是, 只有当点击IDA的运行的时候才会运行jdb
    # jdb端口转发
    forwardJdbPort $jdbPort $pid
    # 启动jdb
    startJdb $jdbPort
}
```
# 使用方法
将上面的内容放置到`~/.zshrc`中即可
执行命令:`idaAttach 包名`
当出现**等待IDA附加**的时候可以打开IDA选择目标应用了

> 需要注意的是, 只有当点击IDA的运行的时候才会运行jdb

## 错误修复1
执行命令:`jdb -connect com.sun.jdi.SocketAttach:127.0.0.1,port=1234`
提示错误:
```
内部异常错误:
java.lang.IllegalArgumentException: 非法连接器参数: 127.0.0.1,port=1234,
      at com.sun.tools.example.debug.tty.VMConnection.parseConnectorArgs(VMConnection.java:107)
      at com.sun.tools.example.debug.tty.VMConnection.<init>(VMConnection.java:320)
      at com.sun.tools.example.debug.tty.Env.init(Env.java:61)
      at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1083)
```
这是因为少了`hostname=`,网上的大部分文章都少了这个,导致我一直卡在这里
解决办法:`jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=$port`
## 错误修复2
```
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210<span><span>)
at java.net.SocketInputStream.read(SocketInputStream.java:141<span>)
at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:130<span>)
at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232<span>)
at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116<span>)
at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90<span>)
at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519<span>)
at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328<span>)
at com.sun.tools.example.debug.tty.Env.init(Env.java:63<span>)
at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1082)
```
这是AndroidStudio占用了jdb,解决办法:**关闭Android Studio**

dhh051230 发表于 2023-12-3 20:51

来看看呢。。

wasm2023 发表于 2023-12-3 21:04

感谢楼主分享

leijun666 发表于 2023-12-3 21:34

有windows的吗

isolands 发表于 2023-12-3 22:22

感谢分享

Tcming 发表于 2023-12-3 22:39

lhfcsm 发表于 2023-12-3 22:47

呵呵,正在学习中

s1332177151 发表于 2023-12-4 09:47

感谢楼主分享

cajs0001 发表于 2023-12-4 09:56

感谢分享!学习一下~~

ms520 发表于 2023-12-4 10:33

牛,学习了
页: [1] 2 3
查看完整版本: 使用脚本来简化ida附加app的操作