安卓逆向入门笔记——动态调试以及安卓逆向的那些常规手段

动态调试以及安卓逆向的那些常规手段

动态调试

ADB简介

在讲动态调试之前,我们需要知道一些简单的Android 调试桥 (ADB)命令,以及对ADB有一点了解:

ADB可以让你的电脑和你的模拟器或者手机设备进行通信,adb 命令可用于执行各种设备操作,例如:安装和调试应用程序。

它是一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令。客户端在开发机器上运行。你可以通过发出 adb 命令从命令行终端调用客户端。
  • 守护程序 (adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。

当你启动adb客户端的时候,该客户端会先检查是否有 adb 服务器进程已在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb客户端发出的命令。注意所有 adb客户端均使用端口 5037 与 adb服务器通信。

服务器成功启动后会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。

每个模拟器都使用一对按顺序排列的端口:一个用于控制台连接的偶数号端口,另一个用于 adb连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推。

如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

服务器和客户端成功建立连接后,就可以使用adb命令进行操作了。

查询设备命令:adb devices -l

执行查询设备命令后,adb会针对每个设备输出以下状态信息:

  • 序列号adb 会创建一个字符串,用于通过端口号唯一标识设备。下面是一个序列号示例:emulator-5554
  • 状态

    :设备的连接状态可以是以下几项之一:

    • offline:设备未连接到 adb 或没有响应。
    • device:设备已连接到 adb 服务器。请注意,此状态并不表示 Android 系统已完全启动并可正常运行,因为在设备连接到 adb 时系统仍在启动。系统完成启动后,设备通常处于此运行状态。
    • no device:未连接任何设备。
  • 说明:如果您加入 -l 选项,devices 命令会告知您设备是什么。当您连接了多个设备时,此信息会很有用,方便您区分这些设备。

但是查询设备时有可能会查询不到,以下是导致这种情况发生的条件:

  1. adb 服务器未运行:在运行 adb devices 命令之前,请确保 adb 服务器正在计算机上运行。你可以在终端中运行 adb start-server 命令启动 adb 服务器。
  2. 模拟器端口选择:使用 emulator 命令启动模拟器时,如果你将 -port 或 -ports 选项的端口值设为 5554 到 5584 之间的奇数,并且这些端口处于空闲状态,模拟器将无法与 adb 建立连接。这是因为 adb 服务器默认使用偶数端口与模拟器通信。要避免此问题,您可以让模拟器自行选择端口,不要手动指定奇数端口。
  3. 模拟器启动顺序:如果您在启动 adb 服务器之前启动了模拟器,它可能无法正确显示在 adb devices 输出中。在启动模拟器之前,请确保 adb 服务器已经运行。
  4. 端口忙碌状态:如果指定的奇数端口处于忙碌状态,模拟器可能会自动切换到另一个符合要求的端口。在这种情况下,adb devices 输出中可能不会显示模拟器。您可以尝试选择其他空闲的端口或重新启动模拟器和 adb 服务器来解决此问题。

避免出现这种情况的一种方法是让模拟器自行选择端口,并且每次运行的模拟器数量不要超过 16 个。另一种方法是始终先启动 adb 服务器,然后再使用 emulator 命令,下面举例几个情况怎么解决:

情况一:adb devices命令启动了adb服务器,但是设备列表未显示。

解决方法:

第一步:先使用adb kill-server命令停止 adb 服务器,再切换目录到android_sdk/tools 目录下,因为emulator 命令位于 android_sdk/tools 目录下。

第二步:停止 adb 服务器后,输入命令emulator -list-avds获取 AVD 名称列表,再执行命令emulator -avd AVD名称 -port 奇数端口号,最后执行adb devices -l查询设备即可。

情况二:在下面的命令序列中,adb devices 显示了设备列表,因为先启动了 adb 服务器。

解决方法:

第一步:先停止adb服务器,再切换目录到android_sdk/tools 目录下使用命令emulator -avd AVD名称 -port 奇数端口号

第二步:在使用adb devices -l命令查询设备之前,使用adb start-server命令重新启动adb服务器。

如果有多个设备在运行,需要将命令发送至特定设备,可以按以下步骤操作:

  1. 使用 devices 命令获取目标设备的序列号。
  2. 获得目标设备的序列号后,您可以使用 -s 选项与 adb 命令一起使用,来指定目标设备。例如,要在特定设备上安装应用程序,您可以使用以下命令:
     复制代码 隐藏代码
    adb -s <serial_number> install <path_to_apk>

    将 <serial_number> 替换为目标设备的序列号,将 <path_to_apk> 替换为要安装的 APK 文件的路径。

  3. 如果有多个可用设备,但只有一个是模拟器,请使用 -e 选项将命令发送至该模拟器。如果有多个设备,但只连接了一个硬件设备,请使用 -d 选项将命令发送至该硬件设备。注意:如果您在多个设备可用时发出命令但未指定目标设备,adb 会显示错误。

设置端口转发:

设置任意端口转发的命令为forward,该命令可以将特定主机端口上的请求转发到设备上的其他端口。如下所示:

  1. 设置主机端口 6100 到设备端口 7100 的转发:
     复制代码 隐藏代码
    adb forward tcp:6100 tcp:7100

    这将在主机上创建一个监听主机端口 6100 的转发,并将请求转发到设备上的端口 7100。

  2. 设置主机端口 6100 到 local:logd 的转发:
     复制代码 隐藏代码
    adb forward tcp:6100 local:logd

    这将在主机上创建一个监听主机端口 6100 的转发,并将请求转发到设备上的 logd 进程。这样,你可以通过连接到主机端口 6100 来查看设备的日志。

这些命令对于确定发送到设备上指定端口的内容非常有用。通过将请求转发到本地进程或特定端口,就可以捕获并查看设备上的数据。虽然官方文档所给出的端口转发命令是adb forward tcp:主机端口 local:设备上的其他端口;但是动态调试时还有一种可以设置端口转发的命令,那就是adb connect命令。

发出adb命令:

可以使用 -d-e 或 -s <serial_number> 选项来指定应向其发送 adb 命令的目标设备。这些选项的含义如下:

  • -d:将命令发送到与开发机器通过 USB 连接的设备。如果只有一个设备连接到开发机器,则可以使用此选项。
  • -e:将命令发送到模拟器实例。如果只有一个模拟器正在运行,则可以使用此选项。
  • -s <serial_number>:将命令发送到具有指定序列号的设备。您可以使用 adb devices 命令查看设备的序列号。

以下是使用这些选项发送 adb 命令的示例:

  1. 发送命令到通过 USB 连接的设备:
     复制代码 隐藏代码
    adb -d <command>

    将 <command> 替换为要执行的 adb 命令。

  2. 发送命令到模拟器实例:
     复制代码 隐藏代码
    adb -e <command>

    将 <command> 替换为要执行的 adb 命令。

  3. 发送命令到具有指定序列号的设备:
     复制代码 隐藏代码
    adb -s <serial_number> <command>

    将 <serial_number> 替换为目标设备的序列号,将 <command> 替换为要执行的 adb 命令。

发出shell命令:

发出shell命令可以使用 shell 命令通过 adb 发出设备命令,也可以使用该命令启动交互式 shell。如需发出单个命令,请使用如下所示的 shell 命令:

 复制代码 隐藏代码
adb [-d |-e | -s serial_number] shell shell_command

要在设备上启动交互式 shell,请使用如下所示的 shell 命令:

 复制代码 隐藏代码
adb [-d | -e | -s serial_number] shell

如需退出交互式 shell,请按 Control+D 或输入 exit。

调用activity管理器:

在 adb shell 中,你可以使用 activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动 activity、强制停止进程、广播 intent、修改设备屏幕属性等。

在 shell 中,相应的 am 语法为:

 复制代码 隐藏代码
am <command>

您可以直接在 adb shell 中使用 am 命令,也可以通过 adb 发出 am 命令,无需进入远程 shell。例如:

 复制代码 隐藏代码
adb shell am start -a android.intent.action.VIEW

这将在设备上启动一个具有 android.intent.action.VIEW 动作的 activity。

请注意,am 命令的具体用法和参数取决于您要执行的操作。您可以参考 Android 官方文档或使用 am 命令的帮助信息来了解更多详细信息。

JEB动态调试

了解完了adb调试桥,接下来就是重头戏——动态调试,我们直接进入实战,以下是这次要解决的软件:

安卓逆向入门笔记——动态调试以及安卓逆向的那些常规手段插图

 

 

这次要做的是找到注册码或者输入任意注册码都可以通过,一般情况下,逆向软件第一步都需要查壳,这里使用ApkScan-PKID进行查壳

本站资源来自互联网收集,仅提供信息发布
一旦您浏览本站,即表示您已接受以下条约:
1.使用辅助可能会违反游戏协议,甚至违法,用户有权决定使用,并自行承担风险;
2.本站辅助严禁用于任何形式的商业用途,若被恶意贩卖,利益与本站无关;
3.本站为非营利性网站,但为了分担服务器等运营费用,收费均为赞助,没有任何利益收益。
死神科技 » 安卓逆向入门笔记——动态调试以及安卓逆向的那些常规手段

死神科技,因为专业,所以领先。

网站首页 24小时自动发卡
在线客服
24小时在线客服
阿里云自动发卡,购卡进群售后
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: