• [翔哥高手无敌之路]0-002.如何提取apk中的信息?


    面对一款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('
    '.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('
    '.join(plugins))
            self.text_ids.setText('
    '.join(ids))

     

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

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

     

  • 相关阅读:
    node express 返回json object
    CodeIgniter 安装指导
    nodejs 使用express开发获取其他网站引用本站点js文件的参数
    nodejs express 学习
    microsoft webMatrix 使用 IISnode 进行node express 开发
    模板引擎jade学习
    模板引擎之jade 学习
    smarty学习——高级知识
    smarty学习——缓存
    smarty学习——编程知识
  • 原文地址:https://www.cnblogs.com/superdo/p/4495665.html
Copyright © 2020-2023  润新知