面对一款apk软件,我们如何去获取它的信息,如何获取它的版本号,包名,或者ID,用户权限,这些信息都隐藏在apk包中的AndroidManifest.xml文件中,解开它我们就能获取任何想要的信息。但是当解压apk之后却发现AndroidManifest.xml是一堆看不懂的数字,那该怎么才能获得信息呢?我们不妨做一个款工具来轻松达到目的。

所需条件

  • 安装java环境
  • 拥有AXMLPrinter2.jar文件

获取原理

将apk解压之后,打开cmd,输入java -jar 然后将AXMLPrinter2.jar文件拖入,再将AndroidManifest.xml文件拖入,回车就能解析AndroidManifest.xml文件,得到里面的信息,这是利用jar包解析xml文件。然而这种解压出来的信息比较混乱,我们需要准确的定位信息,只出现需要的信息,这就要将信息过滤,这就需要开发工具来实现。

开发步骤

  1. 解压apk文件
  2. 获取AndroidManifest.xml文件
  3. 解析AndroidManifest.xml文件
  4. 过滤无用内容得到所需信息

代码资源

解压apk

    def isapk(self,into):
# 将文件名显示在text_apk上
separate = os.path.split(str(into)) #解压apk
myzip = zipfile.ZipFile((into))
myfilelist=myzip.namelist()

获取AndroidManifest.xml文件

        for name in myfilelist:
#找到'AndroidManifest.xml'文件
if name == 'AndroidManifest.xml':
fd = open(separate[0]+ r'/AndroidManifest.xml'.decode('utf-8'), "wb")
fd.write(myzip.read(name))
fd.close()
break

解析AndroidManifest.xml文件

        separat = separate[0].decode('utf-8')
roots = os.popen('java -jar C:/dev/PythonProjects/APKTool/src/res/AXMLPrinter2.jar '+ separat+ r'/AndroidManifest.xml')
text = roots.read()
roots.close() #将反编译的内容存入‘AndroidManifest.xml'
def save(filename, contents):
fh = open(filename, 'w')
fh.write(contents)
fh.close() save(separat+ r'/AndroidManifest.xml', text)
return separat+ r'/AndroidManifest.xml'

过滤无用内容得到所需信息

获取版本名、版本号、包名

    def version(self, root):
bodys = root.getiterator("manifest")
#提取versionName
versionName = bodys[0].attrib['{http://schemas.android.com/apk/res/android}versionName']
self.text_version.setText(versionName)
#提取versionCode
versionCode = bodys[0].attrib['{http://schemas.android.com/apk/res/android}versionCode']
self.text_codeversion.setText(versionCode)
#提取package
package = bodys[0].attrib['package']
self.text_package.setText(package)

获取用户权限

    def permission(self, root):
permission = root.findall("uses-permission") #在输出前清空
permissions = []
for i in range(len(permission)):
#输出permission内容
name = permission[i].attrib['{http://schemas.android.com/apk/res/android}name']
permissions.append(name) self.text_permissions.setText('\n'.join(permissions))

获取ID与插件

    def mata(self, root):
meta = root.getiterator("meta-data")
plugins = []
ids = []
for i in range(len(meta)):
#输出meta-data"
if meta[i].attrib['{http://schemas.android.com/apk/res/android}name'] == 'plugin_'+str(i):
value = meta[i].attrib['{http://schemas.android.com/apk/res/android}value']
plugins.append(value) else:
name = meta[i].attrib['{http://schemas.android.com/apk/res/android}name']
value = meta[i].attrib['{http://schemas.android.com/apk/res/android}value']
complete = '[ %s ] = [ %s ]'%(name, value)
ids.append(str(complete)) self.text_plugins.setText('\n'.join(plugins))
self.text_ids.setText('\n'.join(ids))

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)

转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4495665.html

[翔哥高手无敌之路]0-002.如何提取apk中的信息?的更多相关文章

  1. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

  2. c++------------提取文件中的信息

    对于文件比较复杂的时候,为了获取文件中的信息,需要一些比较特殊的函数,比如,getline().replace().atoi,atof等 例子一,读取以下文件中的数据,并保存进一个类里面. 首先,类的 ...

  3. python学习笔记——提取网页中的信息正则表达式re

    被用来检索\替换那些符合某个模式(规则)的文本,对于文本过滤或规则匹配,最强大的就是正则表达式,是python爬虫里必不可少的神兵利器. 1 正则表达式re基本规则 [0-9] 任意一个数字,等价\d ...

  4. MYSQL 提取时间中的信息的 4 方法

    方法 1. year(),month(),day() 方法 2. dayofweek(),dayofmonth(),dayofyear(); 方法 3. hour(),minute(),second( ...

  5. 使用 python 提取照片中的手机信息

    使用 python 提取照片中的手机信息 最近在做一个项目,有一个很重要的点是需要获取使用用户的手机信息,这里我选择从照片中获取信息.有人会问为什么不从手机里面直接获取设备信息.由于现在android ...

  6. [工具-004]如何从apk中提取AndroidManifest.xml并提取相应信息

    跟上一篇类似,我们也需要对APK的一些诸如umengkey,ADkey,TalkingData进行验证,那么我们同样需要解压apk文件,然后提取其中的AndroidManifest.xml.然后解析x ...

  7. Windows PE3.0制作方法(从Win7中提取制作)

    Windows PE3.0制作方法(从Win7中提取制作 在d:新建文件夹winpe,在winpe中新建sources.pe3和new文件夹,把附件中提供的工具imagex连文件夹一起放到winpe目 ...

  8. C++ 提取字符串中的数字

    C++ 提取字符串中的数字 #include <iostream> using namespace std; int main() { ] = "1ab2cd3ef45g&quo ...

  9. python笔记之提取网页中的超链接

    python笔记之提取网页中的超链接 对于提取网页中的超链接,先把网页内容读取出来,然后用beautifulsoup来解析是比较方便的.但是我发现一个问题,如果直接提取a标签的href,就会包含jav ...

随机推荐

  1. 洛谷2014 选课(树形DP)树形背包问题

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  2. Flutter 打包Android APK 笔记与事项

    获取一个KEY 首先要获取 你的 打包应用的一个 key ,这一步其实和 在AndroidStudio 上打包 APK 一样,都是要注册一个本地的 key,key 其实也就是 jks文件啦. 如果已经 ...

  3. Ansible入门知识

    一.ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装 ...

  4. golang server示例

    一个简单的web服务器 package main import ( "fmt" "log" "net/http" ) func main() ...

  5. Python监控文件夹 && 发送邮件

    直接上代码: # python3 # -*- coding: utf-8 -*- # 2017/06/16 by luohan from email.mime.text import MIMEText ...

  6. Unity 游戏框架搭建 2019 (四十四、四十五) 关于知识库的小结&独立的方法和独立的类

    在上一篇,我们完成了一个定时功能,并且接触了 Action 和委托.lambda 表达式这些概念. 到目前为止,我们的库作为知识收录这个功能来说,已经非常好用了,由于使用了 partial 关键字,所 ...

  7. Navicat12.1系列安装,破解以及破解navicat报错的解决方案

    由于上课的需要,我们必须自己下载并安装 Navicat Premium 12,虽然安装过程很简单,但是安装后的navicat只能试用,并没有永久激活,然而我还想永久使用,所以就各种百度,因为不断地遇到 ...

  8. Publishing and Deployment >> Publishing to IIS 翻译

    Publishing to IIS  发布到IIS 2017/1/18 18 min to read Contributors  Supported operating systems 支持的操作系统 ...

  9. 【Hadoop离线基础总结】oozie的安装部署与使用

    目录 简单介绍 概述 架构 安装部署 1.修改core-site.xml 2.上传oozie的安装包并解压 3.解压hadooplibs到与oozie平行的目录 4.创建libext目录,并拷贝依赖包 ...

  10. [hdu5400 Arithmetic Sequence]预处理,容斥

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=5400 思路:预处理出每个点向左和向右的最远边界,从左向右枚举中间点,把区间答案加到总答案里面.由与可能与前 ...