★ 搜索带换行的形式★ 过滤相同的 actionupdated on 2022.05.30★ 搜索在同一行的形式: 赞 踩 updated on 2022.05.30 要搜索的形式: 正则表达式: 多了一个参数 或者, 将获取到的 action 保存到文件: 可能需要在多个目录中执行上面的命令,所以采用 actions.txt 中的内容为: 执行 如果一行中没有双引号,这一行会原封不动的显示到结果中。需要之后再处理一下,删掉这些信息。 我做了一个 app,可以搜索 Android 系统中某个 action 是否是受保护的,即是否是 2021 年 5 月 6 日 Blackhat 上报告过 protected broadcast 的问题: Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。
搜索 AndroidManifest.xml 中的 action_android ${actionname}
★ 搜索在同一行的形式:<action android:name=“action_name”/>
find . -name AndroidManifest.xml | xargs grep -E -soh "<action {1,}android:name=\"[0-9a-zA-Z\._-]*\""
<action android:name="android.intent.action.MAIN"
<action android:name="android.intent.action.PACKAGE_ADDED"
<action android:name="android.intent.action.PACKAGE_CHANGED"
<action android:name="android.intent.action.PACKAGE_REMOVED"
<action android:name="android.intent.action.MAIN"
<action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"
<action android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"
<action android:name="android.intent.action.PACKAGE_ADDED"
find . -name AndroidManifest.xml
: 搜索当前目录下的 AndroidManifest.xml
文件| xargs grep
: 将文件内容传给 grep
命令grep -E -soh
: -E
采用正则表达式匹配;-soh
, -s
忽略错误的输出,-o
只保留匹配的字符串,不是匹配的字符串所在的行;-h
不显示文件名。"<action {1,}android:name=\"[0-9a-zA-Z\._-]*\""
: 要搜索的字符串,以 <action
开头(这个 action 不用在一行的开头),可以有 1 个或多个空格( {1,}
这里有空格),然后是 android:name="
。[0-9a-zA-Z\._-]*
是要匹配的 action 的名字,action 名字可以由大小写字母、数字、下划线、横线和点组成。
\"
以双引号结尾。★ 搜索带换行的形式
<action
android:name="android.intent.action.SEND_XXXXXXXXXXXXXXXXXX"/>
$ find . -name AndroidManifest.xml | xargs grep -E -z -sho "<action\s{3,}android:name=\"[0-9a-zA-Z\._-]*\""
<action
android:name="android.intent.action.SEND_XXXXXXXXXXXXXXXXXX"/>
-z
,-z
表示一行的结尾是 0 时,才认为是是一行结束了。这样换行符是一行中的一个空白字符。$ find . -name AndroidManifest.xml | xargs grep -E -sh "<action\s+$" -A 1
<action
android:name="android.intent.action.SEND_XXXXXXXXXXXXXXXXXX"/>
<action\s+$
搜索一行中满足这样形式的:
<action
字符串,后面跟 1 个或多个空白字符(包括空格、tab,不包括换行),然后是一行结束,这里是换行符结束;-A 1
是 grep 的参数,是说把 搜到的当前行的下一行 也算在内,显示到结果中。A 表示的是 after,A 1 是之后的 1 行。★ 过滤相同的 action
find . -name AndroidManifest.xml | xargs grep -E -soh "<action {1,}android:name=\"[0-9a-zA-Z\._-]*\"" >> actions.txt
find . -name AndroidManifest.xml | xargs grep -E -sh "<action\s+$" -A 1 >> actions.txt
>>
追加的方式,追加到 actions.txt 文件中。
只获取 action 的名字,排序,去除重复:cat actions.txt | cut -d "\"" -f 2 | sort | uniq
cut -d "\"" -f 2
: 是以双引号 "
为分隔符,切割 actions.txt 中每一行的字符串;
-f 2
表示需要每一行中的第 2 个字段,例如: <action
android:name="android.intent.action.SEND_XXXXXXXXXXXXXXXXXX"/>
<action android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"
$ cat test.txt | cut -d "\"" -f 2
的结果是: <action
android.intent.action.SEND_XXXXXXXXXXXXXXXXXX
android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE
| sort | uniq
: sort
对上面的结果进行排序,按照字典序。这样相同的 action 会排在一起,即多行显示相同的 action。
uniq
:将多行显示相同的 action 剔除,只保留唯一的一行(unique line)。★ 找到 action 有什么用?
protected-broadcast
,方便确认某个 app 声明的 action 是否真正受到了保护。例如,可以尽快找到类似下面的安全问题。
Android 8.0 , 9.0 上 system/app 目录中的系统 app,声明的 protected-broadcast
失效了。只有 system/priv-app
目录中的系统 app 声明的 protected-broadcast
有效。