dexparser

Modules

class dexparser.AABParser(filedir=None, fileobj=None, deepscan=False)

Bases: dexparser.APKParser

AAB (Android App Bundle) file format parser class :param string filedir: AAB file path :param bytes fileobj: AAB file object :param boolean deepscan: Scan all assets of AAB file for detect adex file

class dexparser.APKParser(filedir=None, fileobj=None, deepscan=False)

Bases: object

APK file format parser class :param string filedir: APK file path :param bytes fileobj: APK file object :param boolean deepscan: Scan all assets of APK file for detect adex file

get_all_dex_filenames()

Get all name of dex files :returns: list of dex filenames

example:
>>> APKParser(filedir='path/to/file.apk').get_all_dex_filenames()
['classes.dex', 'classes1.dex']
get_dex(filename='classes.dex')

Get dex file with DEX parsed object

Params:name of dexfile (default: classes.dex)
Returns:DEXParser object
example:
>>> APKParser(filedir='path/to/file.apk').get_dex()
True
is_multidex

Detect if APK is a multidex https://developer.android.com/studio/build/multidex

Returns:boolean
example:
>>> APKParser(filedir='path/to/file.apk').is_multidex
True
class dexparser.DEXParser(filedir=None, fileobj=None)

Bases: dexparser.Dexparser

DEX file format parser subclass :param string filedir: DEX file path :param bytes fileobj: DEX file object

class dexparser.Dexparser(filedir=None, fileobj=None)

Bases: object

DEX file format parser class :param string filedir: DEX file path :param bytes fileobj: DEX file object

checksum

Get checksum value of DEX file

Returns:hexlify value of checksum
example:
>>> Dexparser(filedir='path/to/classes.dex').checksum
0x30405060
get_annotations(offset)

Get annotation data from DEX file

Parameters:offset (integer) – annotation_off offset value
Returns:specific data of annotation
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_annotations(offset=3022)
{
    'visibility': 3403,
    'type_idx_diff': 3024,
    'size_diff': 64,
    'name_idx_diff': 30,
    'value_type': 302,
    'encoded_value': 7483
}
get_class_data(offset)

Get class specific data from DEX file

Parameters:offset (integer) – class_idx offset value
Returns:specific data of class
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_class_data(offset=3022)
{
    'static_fields': [
        {
            'diff': 30, 'access_flags': 4000
        }
    ],
    'instance_fields': [
        {
            'diff': 32, 'access_flags': 4000
        }
    ],
    'direct_methods': [
        {
            'diff': 30, 'access_flags': 4000, 'code_off': 384304
        }
    ],
    'virtual_methods': [
        {
            'diff': 63, 'access_flags': 4000, 'code_off': 483933
        }
    ]
}
get_classdef_data()

Get class definition data from DEX file

Returns:list of class definition data extracted from class_def_item
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_classdef_data()
[
    {
        'class_idx': 3049,
        'access_flags': 4000,
        'superclass_idx': 200,
        'interfaces_off': 343,
        'source_file_idx': 3182,
        'annotation_off': 343,
        'class_data_off': 345,
        'static_values_off': 8830
    },
    ...
]
get_fieldids()

Get field idx from DEX file

Returns:list of field ids defined at field_id_item
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_fieldids()
[{'class_idx': 339, 'type_idx': 334, 'name_idx': 340}, ...]
get_methods()

Get methods from DEX file

Returns:list of methods defined at DEX file
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_methods()
[{'class_idx': 132, 'proto_idx': 253, 'name_idx': 3005}, ...]
get_protoids()

Get proto idx from DEX file

Returns:list of proto ids defined at proto_id_item
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_protoids()
[{'shorty_idx': 3000, 'return_type_idx': 330, 'param_off': 0}, ...]
get_static_values(offset)

Get all static values parsed from ‘static_values_off’ classdef_data section.

Parameters:offset (integer) – static_values_off offset value
Returns:specific data of static values
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_static_values(offset=3022)
[b'android.annotation', 0.0, False, None]
get_strings()

Get string items from DEX file

Returns:strings extracted from string_data_item section
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_strings()
['Ljava/utils/getJavaUtils', ...]
get_typeids()

Get type ids from DEX file

Returns:descriptor_idx extracted from type_id_item section
example:
>>> dex = Dexparser(filedir='path/to/classes.dex')
>>> dex.get_typeids()
[133, 355, 773, 494, ...]
header

Get header data from DEX

Returns:header data
example:
>>> Dexparser(filedir='path/to/classes.dex').header
{'magic': 'dex5' ...}