from dexparser import Dexparser from dexparser import uleb128_value import disassembler import numpy as np from scipy import sparse import sys #dexfile = Dexparser('../apps/com.apporio.glitchr.apk_FILES/classes.dex') dexfile = Dexparser(sys.argv[1]) opcode_list = [] c_list = dexfile.classdef_list() class_cnt = 0 for class_idx, flag, superclass_idx, interfaces_off, source_file_idx, annotation_off, class_data_off, static_values_off in c_list: #print 'class: ' + str(class_cnt) class_cnt = class_cnt + 1 if class_data_off == 0: continue [ static_field_list, instance_field_list, direct_method_list, virtual_method_list ] = dexfile.classdata_list(class_data_off) method_cnt = 0 ###compute 2-gram for direct method for diff, access_flags, code_off in direct_method_list: if code_off == 0: continue #print 'method: ' + str(method_cnt) size = ord(dexfile.mmap[code_off + 12]) + (
# 最后将打印出来的五大索引区域的列表信息,都保存到文件中 # save_file = open('save.log', 'w') # title = '%s\n---> %s <---\n%s\n' % ('-*-'*30, '%s', '-*-'*30) # save_file.write("%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n" % (\ # title % 'string', '\n'.join(string_list),\ # title % 'type', '\n'.join(type_string_list), \ # title % 'proto', '\n'.join(proto_string_list), \ # title % 'method', '\n'.join(method_string_list), \ # title % 'field', '\n'.join(field_string_list) \ # )) # save_file.close() print("-*-" * 40) class_list = dex.classdef_list() for classitem in class_list: class_id = classitem[0] access_flag = classitem[1] superclass_idx = classitem[2] interfaces_off = classitem[3] source_file_idx = classitem[4] annotation_off = classitem[5] class_data_off = classitem[6] static_values_off = classitem[7] implement_content = '' # interfaces = print("%x: %s ---> %s %s extends %s %s" % (class_id, string_list[source_file_idx], access_flag, type_string_list[class_id], type_string_list[superclass_idx], implement_content))