python手册中文版apk-Go、Python 语言解析安卓 APK 包

Go语言解析APK

Github上有一个非常棒的Go语言的库 https://github.com/shogo82148/androidbinary

虽然Star数量有点少,不过代码质量高的惊人。维护人是一位来自日本的shogo82148 对于项目的Issue处理的很及时。

使用这个库可以解析apk文件中的AndroidManifest.xml以及resources.arsc ,原本解析这些文件需要非常了解这些文件的结构,处理起来非常复杂,但是借助这个库,分析起来就很容易。

例子

举例说明下

package main

import (

"github.com/shogo82148/androidbinary/apk"

)

func main() {

pkg, _ := apk.OpenFile("your-android-app.apk")

defer pkg.Close()

icon, _ := apk.Icon(nil) // returns the icon of APK as image.Image

pkgName := pkg.PackageName() // returns the pakcage name

mainActivity, _ = pkg.MainAcitivty()

}

就这么点代码就可以获取到应用的packageName以及应用图标(图标其实最难解析),但是借助这个库,实现起来就很容易。

Python解析APK

解析apk的Python库有很多,但是并没有出现一个特别强的,可以一统天下的库。

就用目前我感觉最好的一个库作为例子。

pip install AxmlParserPY==0.0.3

保存下面的代码为 apkparse.py

#!/usr/bin/env python

# coding: utf-8

import zipfile

from xml.dom import minidom

from axmlparserpy.axmlprinter import AXMLPrinter

class Manifest(object):

def __init__(self, content):

self._dom = minidom.parseString(content)

self._permissions = None

@property

def package_name(self):

return self._dom.documentElement.getAttribute('package')

@property

def version_code(self):

return self._dom.documentElement.getAttribute("android:versionCode")

@property

def version_name(self):

return self._dom.documentElement.getAttribute("android:versionName")

@property

def permissions(self):

if self._permissions is not None:

return self._permissions

self._permissions = []

for item in self._dom.getElementsByTagName("uses-permission"):

self._permissions.append(str(item.getAttribute("android:name")))

return self._permissions

@property

def main_activity(self):

"""

Returns:

the name of the main activity

"""

x = set()

y = set()

for item in self._dom.getElementsByTagName("activity"):

for sitem in item.getElementsByTagName("action"):

val = sitem.getAttribute("android:name")

if val == "android.intent.action.MAIN":

x.add(item.getAttribute("android:name"))

for sitem in item.getElementsByTagName("category"):

val = sitem.getAttribute("android:name")

if val == "android.intent.category.LAUNCHER":

y.add(item.getAttribute("android:name"))

z = x.intersection(y)

if len(z) > 0:

return z.pop()

return None

def parse_apk(filename):

'''

Returns:

Manifest(Class)

'''

with zipfile.ZipFile(filename, 'r') as file:

manifest = file.read('AndroidManifest.xml')

return Manifest(AXMLPrinter(manifest).getBuff())

if __name__ == '__main__':

m = parse_apk("your-apk.apk")

print m.version_code

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页