Android中所有API和对应权限的数据结构构建
2016-08-23 20:18
417 查看
写在前面的话
这是一篇有毒博客,我觉得,读者慎入.我想说,那个最底下的广告怎么去,辣眼睛…… T -T
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.txt lineList = fmap.readlines() lineList.reverse() # 重点,技术都在这里了,将读取出的每一行逆序排列 methodList = [] # 存储API的list for 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]=methodList methodList = []
写在后面的话
哈哈哈,是的,我最近失恋了,只是爱上了不值得爱的人,心情有点遭,但是感觉人生有开始开挂了.有句话想跟所有的妹子说:
一切不以恋爱为目的的撩妹,他么全部都是犯!罪!
见到这种男生,你要有心思,可以慢慢 玩! 死! 他!
但是千万 不!要!犯!贱!
我写的啥.哈哈哈,我也不知道,这是一篇有毒的博客.大家加油吧,我回去变美,变聪明,变智慧,变的更加性感去了.
最后诅咒所有玩弄女性的男生,你们都不怕得病么?好勇敢哟~~~
红红火火恍恍惚惚嘻嘻哈哈吼吼嘿嘿….
滚去写论文咯,happy~
天道好轮回,苍天绕过谁,mua
相关文章推荐
- 数据结构实验之图论四:迷宫探索
- 数据结构 找到二叉树中的最大搜索二叉子树
- ZooKeeper的数据结构模型和特点
- sdut oj3402 数据结构实验之排序五:归并求逆序数
- 单链表的中间结点
- 数据结构实验之图论七:驴友计划
- SDUT OJ 3400数据结构实验之排序三:bucket sort
- 单链表的反转(用循环和递归实现单链表反转)
- SDUT OJ 3399 数据结构实验之排序二:交换排序
- Map与数据结构
- 带你深入理解STL之Vector容器
- 1139数据结构上机测试2-2:单链表操作B
- 数字雨+大数加法+割圆术求π+冒泡排序+快速排序+栈练习+链表练习
- 数据结构实验之栈七:出栈序列判定
- sdut oj3401 数据结构实验之排序四:寻找大富翁
- SDUT OJ 3404 数据结构实验之排序七:选课名单
- 数据结构读书笔记
- 数据结构实验之图论七:驴友计划
- 数据结构实验之排序六:希尔排序
- SDUT3402数据结构实验之排序五:归并求逆序数