p1s1lver 发表于 2023-3-27 15:51

apk 中静态 Android Deep Linking 对应规则提取

本帖最后由 p1s1lver 于 2023-4-13 20:57 编辑

在 Android 设备自动化的过程中,有时候会需要提取 deep linking 直接跳转而不是做过多的 UI 操作,这里进行了脚本的封装,可以直接定位代码中的包名,从而找到对应的解析逻辑,编写 deeplink

- Android Deep Linking 是一种允许应用程序通过链接打开特定页面的技术,用于提高用户体验。
- Android Deep Linking 工作原理:通过在 `AndroidManifest.xml` 中注册 URI 模式来实现的。当用户点击一个链接时,Android 系统会检查链接是否与已注册的 URI 模式匹配,匹配成功自动打开。

AndroidManifest.xml 文件中的 URI 模式定义:`AndroidManifest.xml` 中根据如下规则设定,定义 app 可以处理的 URI 格式的字符串
1. activity 标签中添加 `intent-filter` 标签,并在其中添加 `action`、`category` 和 `data` 标签
2. action 标签的值必须为 `android.intent.action.VIEW`
3. category 标签的值必须包含 `android.intent.category.DEFAULT` 和 `android.intent.category.BROWSABLE`
4. data 标签的值必须包含 `android:scheme`、`android:host` 和 `android:pathPrefix`

<activity android:name=".MainActivity">
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http"
            android:host="example.com"
            android:pathPrefix="/product" />
    </intent-filter>
</activity>

这里对该逻辑进行了封装。
项目地址:https://github.com/p1s1lver/AndroidReverseScripts/tree/master/deeplink_extractor



但是其实很多时候,App 使用的是 Intent-Filter 机制动态注册的,这篇帖子也只是个笔记帖

p1s1lver 发表于 2023-3-27 15:55

这里的 AndroidManifest.xml 文件是 apktool 反编译出来的,不能用 aapt 命令解析出的文件,因为那个是简化版本的,
好处就是可以快速知道 deeplink 开头是什么,然后对应代码的位置是什么,快速写出 start activity 命令

一般是自动化程序使用,逆向的话,可以减少一点调试的时间

p1s1lver 发表于 2023-3-27 17:42

本帖最后由 p1s1lver 于 2023-3-27 17:44 编辑

也可以使用命令行直接进行调用,这个还是非常方便的,推荐!

Xieweiping 发表于 2023-3-27 17:25

感谢分享占楼

Avicii111 发表于 2023-3-27 18:37

感谢分享!感谢大佬!

wanghaoxu 发表于 2023-3-27 18:39

感谢分享!

zhnlwwdzz 发表于 2023-3-27 18:45

原来是这么弄的,谢谢大佬分享。

exiaowe 发表于 2023-3-27 19:12

感谢分享

weiyanli 发表于 2023-3-27 19:27

感谢分享

Saniq 发表于 2023-3-27 20:37

学习大佬
页: [1] 2 3
查看完整版本: apk 中静态 Android Deep Linking 对应规则提取