文章目录

最近做了一个作业,要求用python获取apk的一些信息,要求:
1、获取apk文件存在哪些文件并保存到一个文本;
2、获取apk文件存在使用哪些权限(uses-permission)并保存到一个文本。

第一个功能的实现需要先把apk解压,然后直接读取目录文件名就可以了。
第二个功能的实现需要把apk反编译,这个可以借助现有的反编译工具实现,我使用的是apktool v2.0.1,反编译之后才能正常看到AndroidManifest.xml的内容。关于获取xml文件的内容,一开始用了简单的文件读取方式,后来发现用dom读取xml更加方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
__author__ = 'seven'
import os
import sys
import zipfile
from xml.dom import minidom
path = os.getcwd() + '\\'
def unzipfile(file):
uzfile = zipfile.ZipFile(path + file)
filelist = ''
for name in uzfile.namelist():
filelist += name + '\n'
out = open(os.path.splitext(file)[0] + 'list.txt', 'w')
out.write(filelist)
out.close()
def readManifest(file):
cmd = r'apktool d %s -o outdir' % file # use apktool2.0.1
permission = ''
os.system(cmd)
dom = minidom.parse('.\outdir\AndroidManifest.xml')
root = dom.documentElement
nodes = root.getElementsByTagName('uses-permission')
for node in nodes:
permission += node.attributes['android:name'].value + '\n'
o = open(os.path.splitext(file)[0] + 'permission.txt', 'w')
o.write(permission)
o.close()
if __name__ == '__main__':
if len(sys.argv) == 2:
unzipfile(sys.argv[1])
readManifest(sys.argv[1])
else:
print 'Usage: python apkfile.py test.apk'
文章目录