#写在前面的话
这是一篇有毒博客,我觉得,读者慎入.

我想说,那个最底下的广告怎么去,辣眼睛… T -T

当然,你也可以帮我点下我的,在这里跪谢大家
https://www.captainbed.net/chichoxian

小指动一动好么,宝贝们~


#PScout玩一下

PScout 是一个开源的项目,这个项目的主要工作就是提取出Android当中的API(document API 和undocument API)
和对应的权限的关系.当然这个工作还做了content provider 和intent 调用时候的权限申请的映射关系.这个项目是基于soot完成的.

再次强调一下,PScout就是找出APIs和权限(permission)之间的对应关系


现在可供分析的版本到Android 系统5.1.1

之前分析的是4.1.1
由于4.1.1之前的API和权限Permission之间的对应关系如下图所示:

Permission:android.permission.CHANGE_WIFI_STATE
472 Callers:
<com.android.server.WifiService: void enforceChangePermission()> (20)
<com.android.server.WifiService: android.os.Messenger getWifiServiceMessenger()> (2)
<com.android.server.WifiService: android.os.Messenger getWifiStateMachineMessenger()> (2)
<com.android.server.WifiService: boolean saveConfiguration()> (2)
<com.android.server.WifiService: boolean setWifiEnabled(boolean)> (3)
<com.android.server.WifiService: int addOrUpdateNetwork(android.net.wifi.WifiConfiguration)> (2)
<com.android.server.WifiService: void addToBlacklist(java.lang.String)> (2)
<com.android.server.WifiService: void clearBlacklist()> (2)
<com.android.server.WifiService: void disconnect()> (2)
<com.android.server.WifiService: void reassociate()> (2)
<com.android.server.WifiService: void reconnect()> (2)Permission:android.permission.ACCESS_WIFI_STATE
473 Callers:
<com.android.server.WifiService: void enforceAccessPermission()> (13)
<com.android.server.WifiService: android.net.DhcpInfo getDhcpInfo()> (2)
<com.android.server.WifiService: android.net.wifi.WifiConfiguration getWifiApConfiguration()> (2)
<com.android.server.WifiService: android.net.wifi.WifiInfo getConnectionInfo()> (2)
<com.android.server.WifiService: android.os.Messenger getWifiServiceMessenger()> (2)
<com.android.server.WifiService: android.os.Messenger getWifiStateMachineMessenger()> (2)
<com.android.server.WifiService: boolean isMulticastEnabled()> (2)
<com.android.server.WifiService: boolean pingSupplicant()> (2)
<com.android.server.WifiService: int getFrequencyBand()> (2)

由于后面的括号里面的数字会影响我们的分析,和文本的提取我们需要对它们处理一下.把它先弄弄清爽.

#!/usr/bin/env python
# coding=utf-8#需要处理的文本
path = "~/Psout/jellybean_allmappings"#保存处理后的文本
dest_path = "~/Psout/allmappings.txt"f=open(path)outf=open(dest_path,"w+")for line in f.readlines():if line.startswith("<") or line.startswith("("):messageList = line.split()del messageList[len(messageList)-1]messageInfo = " ".join(messageList)outf.write(messageInfo + "\n")else:outf.write(line)f.close()
outf.close()

处理好之后我们就可以构建一个字典数据结构用来保存我们权限和API和我们的permission之间的相互关系,我们的数据结构如下所示:

{permission1:[API1,API2...],permission2:[API1,API2,...]}

就是这个样子的,至于有啥用,哈哈哈,自己看吧.[我是一个猥琐的美少女,哈哈哈]

哦哦对了,运行这个文件你需要去PScout的网站上把它的那个allapimapping这个对应API和权限的关系的文本下载下来,然后解析出来.

后面出的版本都已经更新成CSV的格式了,所以很好解析.

下面就是构建我们的数据结构了:


#解析过的allmappings文件
dest_path = "/home/chicho/Psout/allmappings.txt"#***************************************
#  we distill the relationship
#  between the api and permission
#***************************************#构建字典数据结构,创建权限和API之间的对应关系,因为是权限对应多个api
apiPerMappingDict = {}  # {'permission1':[m1,m2,m3]}fmap = open(dest_path) # allmappings.txtlineList = fmap.readlines()lineList.reverse() # 重点,技术都在这里了,将读取出的每一行逆序排列methodList = [] # 存储API的listfor line in lineList:if line.startswith("(") or line.startswith("<"):methodList.append(line)continue if line.startswith("Permission"):permission = line.split(":")[1].split("\n")[0]countMethod = len(methodList)apiPerMappingDict[permission]=methodListmethodList = []



#写在后面的话

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。https://www.captainbed.net/chichoxian

哈哈哈,是的,我最近失恋了,只是爱上了不值得爱的人,心情有点遭,但是感觉人生有开始开挂了.

有句话想跟所有的妹子说:
一切不以恋爱为目的的撩妹,他么全部都是犯!罪!
见到这种男生,你要有心思,可以慢慢 玩! 死! 他!
但是千万 不!要!犯!贱!

我写的啥.哈哈哈,我也不知道,这是一篇有毒的博客.大家加油吧,我回去变美,变聪明,变智慧,变的更加性感去了.

最后诅咒所有玩弄女性的男生,你们都不怕得病么?好勇敢哟~~~
红红火火恍恍惚惚嘻嘻哈哈吼吼嘿嘿…

滚去写论文咯,happy~
天道好轮回,苍天绕过谁,mua

Android中所有API和对应权限的数据结构构建相关推荐

  1. 我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...

    Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...

  2. android targetapi版本低,我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...

    Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...

  3. Android中List、Set、Map数据结构详解

    Android中一般使用的数据结构有java中的基础数据结构List,Set,Map.还有一些Android中特有的几个,SparseArray(使用Map时Key是int类型的时候可以用这个代替)等 ...

  4. Android中调用API实现查询身份证信息

    要实现这个功能,首先就要知道如何通过Http协议访问网络,向网络发送请求,其次了解如何解析JSON或者XML文件. 1.我的身份证查询接口是在聚合数据申请的,完成认证后,你会得到一个KEY,这在之后会 ...

  5. Android系统篇之—-Android中的run-as命令引出升降权限的安全问题(Linux中的setuid和setgid)

    一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...

  6. Android中的run-as命令引出升降权限的安全问题

    转载自:http://blog.csdn.net/jiangwei0910410003/article/details/51405631 一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天 ...

  7. Android系统篇之----Android中的run-as命令引出升降权限的安全问题 Linux中的setuid和se

    一.前言 最近一周比较忙,没时间写东西了,今天继续开始我们今天的话题:run-as命令,在上周的开发中,遇到一个问题,就是在使用run-as命令的时候出现了一个错误,不过当时因为工作进度的问题,这问题 ...

  8. Android中应用到的设计模式

    其实一般程序员写业务代码,用不了多少设计模式.写出易于理解.维护的代码,相对更重要. 一.引言 那设计模式是什么? 很多人,包括我,都曾迷陷于 23 种设计模式之中,初识设计模式,赞叹于其精妙,就像个 ...

  9. Android开发之那些好用的数据结构与API(二)

    在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都知道的东东 -- 1.android:d ...

最新文章

  1. Python+OpenCV实现AI人脸识别身份认证系统(3)—训练人脸识别模型
  2. 你不知道的18个Python高效编程技巧
  3. (转载)四种常见的 POST 提交数据方式
  4. 【规范】前端编码规范——css 规范
  5. idea下的application.properties下写汉字乱码问题
  6. MongoDB系列之——安装和启动
  7. java爪哇咖啡语言_“爪哇咖啡JAVACAFE及图”商标注册案例分析
  8. 不要在有反馈的平台上输出
  9. sencha touch 入门系列 (四)sencha touch 新建项目目录结构解析
  10. Spring Configuration Check ----Unmapped Spring configuration files found.
  11. 卸载CDH5.14.2
  12. 静候Google I/O 2014大会开幕
  13. 人工智能专业好就业吗?AI就业前景
  14. Python多人聊天室-基于socket UDP协议
  15. 举例解释大数定律、中心极限定理及其在机器学习中的应用
  16. HIR夏季挑战赛作品紧急优化
  17. Revit初试水之点击按钮打开网页
  18. [XCTF-pwn] 31_ciscn-2018-Quals_house_of_grey
  19. CSDN博文“待审核”检测规则分析之如何避免“待审核”
  20. Unity 绿幕视频抠图算法原理与实现 -- 效果极好

热门文章

  1. Leangoo 6.2.7 版发布
  2. 面试官:Redis新版本开始引入多线程,谈谈你的看法?
  3. 实战 Spring Cloud Gateway 之限流篇
  4. 这个算法网站,强推。
  5. 面试题:请用代码实现ip地址与int之间互换?
  6. 图解TensorFlow--大数据平台技术栈16
  7. 废掉一个程序员最好的方法,让他忙碌着,忙碌到没时间思考
  8. 与其羡慕他人精彩,还不如设法活出自我
  9. 在项目管理情境下,如何做多项目管理?
  10. 使用Leangoo管理产品Backlog