Created
November 5, 2014 21:50
-
-
Save k3170makan/2a5c4acdca5d529bb9d2 to your computer and use it in GitHub Desktop.
Sample from Androguard source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file is part of Androguard. | |
# | |
# Copyright (C) 2012, Anthony Desnos <desnos at t0t0.fr> | |
# All rights reserved. | |
# | |
# Androguard is free software: you can redistribute it and/or modify | |
# it under the terms of the GNU Lesser General Public License as published by | |
# the Free Software Foundation, either version 3 of the License, or | |
# (at your option) any later version. | |
# | |
# Androguard is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU Lesser General Public License for more details. | |
# | |
# You should have received a copy of the GNU Lesser General Public License | |
# along with Androguard. If not, see <http://www.gnu.org/licenses/>. | |
""" | |
PLEASE NOTE: some of the code here has been truncated, and this is sample is not in working condition. | |
This was done purely to document part of the code | |
""" | |
class APK: | |
""" | |
This class can access to all elements in an APK file | |
:param filename: specify the path of the file, or raw data | |
:param raw: specify if the filename is a path or raw data (optional) | |
:param mode: specify the mode to open the file (optional) | |
:param magic_file: specify the magic file (optional) | |
:param zipmodule: specify the type of zip module to use (0:chilkat, 1:zipfile, 2:patch zipfile) | |
:type filename: string | |
:type raw: boolean | |
:type mode: string | |
:type magic_file: string | |
:type zipmodule: int | |
:Example: | |
APK("myfile.apk") | |
APK(open("myfile.apk", "rb").read(), raw=True) | |
""" | |
def __init__(self, filename, raw=False, mode="r", magic_file=None, zipmodule=ZIPMODULE): | |
self.filename = filename | |
self.xml = {} | |
self.axml = {} | |
self.arsc = {} | |
self.package = "" | |
self.androidversion = {} | |
self.permissions = [] | |
self.valid_apk = False | |
self.files = {} | |
self.files_crc32 = {} | |
self.magic_file = magic_file | |
if raw == True: | |
self.__raw = filename | |
else: | |
fd = open(filename, "rb") | |
self.__raw = fd.read() | |
fd.close() | |
self.zipmodule = zipmodule | |
if zipmodule == 0: | |
self.zip = ChilkatZip(self.__raw) | |
elif zipmodule == 2: | |
from androguard.patch import zipfile | |
self.zip = zipfile.ZipFile(StringIO.StringIO(self.__raw), mode=mode) | |
else: | |
import zipfile | |
self.zip = zipfile.ZipFile(StringIO.StringIO(self.__raw), mode=mode) | |
for i in self.zip.namelist(): | |
if i == "AndroidManifest.xml": | |
self.axml[i] = AXMLPrinter(self.zip.read(i)) | |
try: | |
self.xml[i] = minidom.parseString(self.axml[i].get_buff()) | |
except: | |
self.xml[i] = None | |
if self.xml[i] != None: | |
self.package = self.xml[i].documentElement.getAttribute("package") | |
self.androidversion["Code"] = self.xml[i].documentElement.getAttribute("android:versionCode") | |
self.androidversion["Name"] = self.xml[i].documentElement.getAttribute("android:versionName") | |
for item in self.xml[i].getElementsByTagName('uses-permission'): | |
self.permissions.append(str(item.getAttribute("android:name"))) | |
self.valid_apk = True | |
self.get_files_types() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment