- reference androguard.
- fork of apk_parse
- partial support for xAPKs added (nested APKs)
pip install apk_parse_ph4
If there are problems with installing m2crypto
on Mac, try this:
brew install openssl
brew install swig
env LDFLAGS="-L$(brew --prefix openssl)/lib" \
CFLAGS="-I$(brew --prefix openssl)/include" \
SWIG_FEATURES="-cpperraswarn -includeall -I$(brew --prefix openssl)/include" \
pip install m2crypto
or
LDFLAGS="-L/opt/local/lib" \
CFLAGS="-I/opt/local/include" \
SWIG_FEATURES="-cpperraswarn -includeall -I/opt/local/include" \
pip install --user m2crypto
apkf = APK("myfile.apk")
apkf = APK(read("myfile.apk"), raw=True)
The following example processes APK in a separate call. as_file_name set to True causes the file is not read whole to the memory, but it used as a file - ZIP module does seek if needed. In this way also big apks (e.g., 1.5 GB) can be processed. temp_dir option allows APK processor to use temporary dir, e.g. for xapk format, where sub-APK needs to be parsed:
apkf = APK(apk_path, process_now=False, process_file_types=False, as_file_name=True, temp_dir='/tmp')
apkf.file_md5 = 'abcd0102037292' # skips MD5 recomputing (if already computed during download)
apkf.process()
Return the name of the package
>>> apkf.package com.android.vending >>> apkf.get_package() com.android.vending
Return the file md5 of the apk
>>> apkf.file_md5 40bdd920a3a3d2acf432e3c5b485eb11
Return the cert md5 of the apk
>>> apkf.cert_md5 cde9f6208d672b54b1dacc0b7029f5eb
Return the apk file size
>>> apkf.file_size 11194863
Return the apk version
>>> apkf.androidversion {'Code': u'80341200', 'Name': u'5.4.12'}
Return the android version code
>>> apkf.get_androidversion_code() 80341200
Return the android version name
>>> apkf.get_androidversion_name() 5.4.12
Return the android:minSdkVersion attribute
>>> apkf.get_min_sdk_version() 9
Return the android:targetSdkVersion attribute
>>> apkf.get_target_sdk_version() 21
Return the android:name attributes for libraries
>>> apkf.get_libraries() []
Return the files inside the APK
>>> apkf.get_files() [u'AndroidManifest.xml', u'assets/keys/dcb-pin-encrypt-v1/1',...]
Return the files inside the APK with their associated types (by using
python-magic) Please pip install python-magic
>>> apkf.get_files_types() {u'res/layout/play_card_bundle_item_small.xml': "Android's binary XML",...}
Return the name of the main activity
>>> apkf.get_main_activity() com.android.vending.AssetBrowserActivity
Return the android:name attribute of all activities
>>> apkf.get_activities() ['com.android.vending.AssetBrowserActivity', ...]
Return the android:name attribute of all services
>>> apkf.get_services() ['com.android.vending.GCMIntentService', ...]
Return the android:name attribute of all receivers
>>> apkf.get_receivers() ['com.google.android.gcm.GCMBroadcastReceiver', ...]
Return the android:name attribute of all providers
>>> apkf.get_providers() ['com.google.android.finsky.providers.RecentSuggestionsProvider', ...]
Return permissions
>>> apkf.get_permissions() ['com.android.vending.permission.C2D_MESSAGE', ...]
Return FILES, PERMISSIONS, MAIN ACTIVITY...
>>> apkf.show() FILES: ...
Parse ICON of the apk, storage on icon_path
>>> apkf.parse_icon(icon_path='/tmp') ...
Returns developer certificate in a textual form
>>> apkf.cert_text Certificate: Data:Version: 3 (0x2) ...
Returns developer certificate in PEM form
>>> apkf.cert_pem -----BEGIN CERTIFICATE----- ...
Returns the signature file in DER form (contains signature & certificate)
>>> apkf.pkcs7_der (binary data)