无源码情况下如何检测已安装Android应用的Deep Links?已知其一能否辅助
无源码时提取应用Deep Links的方法
用ADB命令直接解析应用信息
先通过adb shell pm list packages找到目标应用的包名,接着执行adb shell dumpsys package <目标包名>,在输出结果里找包含android.intent.action.VIEW和android.intent.category.BROWSABLE的<intent-filter>块,里面的<data>标签就定义了Deep Links的规则,比如scheme、host、path等。嫌输出太杂的话,可以用过滤命令缩小范围:adb shell pm dump <目标包名> | grep -A 10 -B 2 "android.intent.action.VIEW"。导出APK后反编译查看清单
先用adb shell pm path <目标包名>获取应用APK的存储路径,再用adb pull <APK路径> ./把APK导出到电脑。之后用apktool工具反编译APK:apktool d <导出的APK文件名>,打开反编译后的AndroidManifest.xml,直接搜索所有带有BROWSABLEcategory的intent-filter,从中提取所有Deep Links规则。借助第三方调试工具扫描
安装一些Android调试类应用(比如App Inspector),打开后选择目标应用,这类工具会自动解析应用的清单文件,直接展示所有已注册的Deep Links,操作起来比命令行更直观。
已知一个Deep Link的辅助检测方法
反向推导规则模式
先验证已知Deep Link是否能唤起目标应用:adb shell am start -W -a android.intent.action.VIEW -d "<已知Deep Link>",输出里能看到对应的应用包名和Activity信息。接着基于这个Link的scheme、host格式,去搜索应用清单里同scheme或同host的其他规则——比如已知myapp://profile/123,就可以在dumpsys输出里找scheme="myapp"的所有<data>项,大概率能发现同scheme下的其他Deep Links。构造相似规则测试
参照已知Link的结构,构造类似的链接进行测试。比如已知myapp://home,可以尝试myapp://settings、myapp://message等,用adb shell am start -d "<构造的链接>"测试是否能唤起对应页面,这种方法能快速发现一些结构相似的Deep Links。
内容的提问来源于stack exchange,提问作者Beltenebros

