教程长篇分享

安卓逆向:动态调试指南

学习吾爱破解论坛正己的《安卓逆向这档事》的笔记,视频和配套工具可以去课程主页获取:https://www.52pojie.cn/thread-1714727-1-1.html

工具

  1. 雷电模拟器
  2. 教程Demo
  3. MT管理器/NP管理器
  4. jeb
  5. XappDebug

动态调试环境配置

安装 jeb

配置 Java 环境

  1. 下载 jdk 并安装
  2. 配置环境变量

这里我之前装过,而且网上教程很多,就不演示了。

正己给的 Java 环境是 11 的,需要比这个版本高的,正好我之前装的是 19。

在命令行输入 java --version 测试一下:

image-20230331183818980

安装

解压了就行了,注册啥的正己都弄好了。

动态调试

获取 debug 权限

法一:修改 AndroidManifest.xml

在 AndroidManifest.xml 的 application 标签里添加:

android:debuggable="true"

修改androidmanifest

法二:XAppDebug 模块 hook 对应的 app

XAppDebug 项目地址:https://github.com/Palatis/XAppDebug

启用模块之后勾选系统框架(需要重启)和要进行 debug 的 app 即可。

XAppDebug

法三:Magisk 命令(重启会失效)

通过 adb 进入命令行或者用 MT 管理器的终端模拟器都可以。

  • adb 进入命令行(在你电脑终端里输):
adb shell
  • MT 管理器的终端模拟器:

mt shell

然后依次输入下面的命令就行了:

# 切换至超级用户
su
# 启用 debug
magisk resetprop ro.debuggable 1
# 一定要通过该方式重启
stop;start;

法四:刷入 MagiskHide Props Config 模块(永久有效)

下载 MagiskHide Props Config:https://github.com/Magisk-Modules-Repo/MagiskHidePropsConf/releases

在 Magisk 里找到模块,点击盒子按钮选择刚刚下载的 zip 文件即可开始刷入。

modules

出现 Done 说明刷入成功,重启设备。

done

进入终端,输入 props 命令,会出现一个菜单,选择Edit MagiskHide props (active),也就是输入 4

props menu

进入新菜单,找到 ro.debuggable 选项,并选择(我这里显示 enabled,表示已经是 1 了,就不用改了,否则需要改),将 ro.debuggable 的值设为 1

set debuggable prop

修改完后重启设备,然后使用以下命令验证 ro.debuggable 是否已经改为 1

getprop ro.debuggable

getprop ro.debuggable

端口转发以及开启 adb 调试权限

端口转发

雷电模拟器默认开启端口转发,其他模拟器需要用 adb 连一下,类似下面的命令:

adb connect 127.0.0.1:<port>

这个端口号不同模拟器不同,具体可以去查一下。

开启 adb 调试权限

进入开发者模式

按”设置->关于本机->版本号“顺序找到”版本号“,点击 7 次进入开发者模式。

version

开启 USB 调试

按”设置->系统->高级->开发者选项“顺序进入”开发者选项“,找到”USB 调试“选项并开启:

usb-debug

下断点

在对应 smali 代码处 Ctrl-B 下断点

debug 模式启动

命令行输入以下命令:

adb shell am start -D -n <package_name>/<activity_name>
  • adb:Android Debug Bridge 的缩写,它是一个用于在开发者计算机和 Android 设备之间建立通信的工具。
  • shell:指示 adb 命令将要在设备的命令行 shell 中运行。
  • am:代表活动管理器(Activity Manager),它是一个在 Android 设备上跟踪和管理应用程序活动的系统服务。
  • start:指示活动管理器启动一个新的应用程序或活动。
  • -D:指示在启动应用程序时要清除先前的任务和栈,以便该应用程序成为新任务的开始。
  • -n /:指示要启动的应用程序和特定的 activity。
    • `` 是应用程序的包名。
    • `` 是要启动的 activity 的名称。

比如这里要启动的名为 "com.zj.wuaipojie" 的应用程序中的 ".ui.MainActivity" 活动,命令将如下所示:

adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity

adb

这里不知道是我看视频看漏了还是怎么的,我的环境里好像没有adb,所以这里我去另外安装了一下。

然后模拟器会打开对应应用并等待调试器启动:

waiting for debugger

Jeb附加调试进程

在工具栏找到“调试器”一栏的”开始“并点击,或者通过菜单栏的”调试器->开始“,唤出“附加调试”菜单,然后找到对应的进程选择”附上“即可开始调试。

image-20230402015542027

接着在 app 中触发刚刚下断点处的逻辑,可以看到代码停在断点处了。此时就可以查看各种调试信息了,这里主要关注局部变量的信息:

breakpoint

快捷键:

  • Ctrl-F6:进入方法
  • F6:跳过方法
  • F7:跳出方法
  • Ctrl-R:运行到光标位置

这里在最后相等比较前的函数看到一个 base64 的值,复制下来放到 flag{} 之间就是密钥了。

key

我的密钥正确了:

success

这里调试的时候发现 v0 的值(也就是最后函数返回值赋给的变量)没有出现在局部变量里,正己说是因为模拟器的问题,真机就会有这部分值。


本文链接:https://linuxstory.org/android-reverse-dynamic-debugging-guide/
原文链接:https://www.52pojie.cn/thread-1714727-1-1.html

Linux Story 整理,对原文有删节、补充;转载请注明,否则将追究相关责任!

对这篇文章感觉如何?

太棒了
1
不错
0
爱死了
0
不太好
0
感觉很糟
0

You may also like

5 Comments

  1. nordvpn special coupon code 2025 350fairfax

    Hello Dear, are you truly visiting this website regularly, if so afterward you will definitely take good know-how.

  2. Thank you for the good writeup. It in fact was a amusement account it.
    Look advanced to more added agreeable from you!

    However, how can we communicate?

    Also visit my homepage; nordvpn coupons inspiresensation (wall.sh)

  3. Wow, fantastic blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your web site is great, as well as the content!

    Stop by my webpage … nordvpn coupons inspiresensation

  4. I am in fact grateful to the owner of this site who has
    shared this enormous post at at this place.

    Here is my blog: nordvpn coupons inspiresensation – https://t.co/5gaT0Nh9CJ,

  5. My family every time say that I am killing my time here at net, however I
    know I am getting knowledge daily by reading such nice posts.

    my web-site :: Nordvpn coupons Inspiresensation

Leave a reply

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

More in:教程

教程

PuTTY 使用综合指南:SSH 连接 Linux

无论您是经验丰富的开发人员还是初学者,想在您的计算机和远程 Linux 服务器之间建立安全连接,PuTTY 是一个值得信赖的工具。让我们深入了解如何在 Windows 操作系统上利用 PuTTY 进行 […]
教程

在 Ubuntu 像22.04 LTS Linux 安装 JUnit 5

JUnit 不仅简单而且是一种有效的方法来编写和执行 Java 应用程序的单元测试,因此它是开源类别中使用最广泛的测试框架。 JUnit的最新版本5发布时带来了许多改进。 所以,如果你使用Ubuntu […]
教程

同时运行多个 Linux 命令

了解如何在 Linux 中同时执行多个命令可以显著提高您的效率和生产力。本文将指导您通过各种方式在单行中运行多个 Linux 命令,甚至如何自动化重复的任务。 理解基础知识 在深入了解高级技巧之前,您 […]