安卓逆向:动态调试指南

您所在的位置:网站首页 mt管理器终端模拟怎么用的 安卓逆向:动态调试指南

安卓逆向:动态调试指南

2024-06-06 09:14| 来源: 网络整理| 查看: 265

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

工具 雷电模拟器 教程Demo MT管理器/NP管理器 jeb XappDebug 动态调试环境配置 安装 jeb 配置 Java 环境 下载 jdk 并安装 配置环境变量

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

正己给的 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:

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

开启 adb 调试权限 进入开发者模式

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

version

开启 USB 调试

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

usb-debug

下断点

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

debug 模式启动

命令行输入以下命令:

adb shell am start -D -n / 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 整理,对原文有删节、补充;转载请注明,否则将追究相关责任!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3