def __init__(self, filename): self.filename = filename self.apk = APK(filename) # initialize if self.apk.isVaildAPK(): self.vm = DalvikVMFormat(self.apk.getDex()) self.vmx = analysis.VMAnalysis(self.vm) print "JAD run" if decompile(filename) == 0: print "Failed to decompile using JAD" return self.apktool = APKtool(filename) self.cl = CLASS(self.apk, self.vm, self.vmx) methodInvokeList = self.cl.get_methodInvoke() self.callInOut = CallInOut(methodInvokeList)
def on_actNew_triggered(self): """ Slot: When the user click the New button, this slot will receive the New signal. """ import Global # initialize the class attribute self.path2method = {} # create a file dialog to open an apk file dlg = QFileDialog(self) filename = dlg.getOpenFileName(self, self.tr("Open APK File"), QString(), self.tr("APK Files Odex Files(*.*)")) filetype = filename.split('.', 1)[1] # QMessageBox.warning(self ,'file', filetype) if filetype == 'apk': Global.CONFIG = { "CFG": 1, "Dalvik": 1, "Java": 0, "Bytecode": 1, "Smali": 1, "CallIn": 1, "CallOut": 1, "Permission": 1, "Manifest": 1 } #add support for odex if filetype == 'odex': Global.CONFIG = { "CFG": 1, "Dalvik": 1, "Java": 0, "Bytecode": 1, "Smali": 1, "CallIn": 1, "CallOut": 1, "Permission": 1, "Manifest": 0 } if not zipfile.is_zipfile(filename): msgbox = QMessageBox() msgbox.setText("Please select the APK file correctly!") msgbox.setWindowTitle("Warning!") msgbox.show() else: # create a progress dialog to show the progress # all pre-processing are done in a thread progress = ProgressDialog() thread = MyThread(progress, str(filename)) thread.start() progress.run() # judge this APK whether it is valid or invalid if not Global.APK.isVaildAPK(): msgbox = QMessageBox() msgbox.setText("This APK is invalid!") msgbox.setWindowTitle("Error!") msgbox.exec_() return # clear all the last apk's info self.listWidget_strings.clear() self.listWidget_classes.clear() # self.Graph.scene.clear() # self.Graph_call.scene.clear() self.plainTextEdit_dalvik.setPlainText("") self.plainTextEdit_java.setPlainText("") self.plainTextEdit_bytecode.setPlainText("") self.plainTextEdit_smali.setPlainText("") self.textEdit_permission.setText("") self.textEdit_call.setText("") self.textBrowser.setText("") self.plainTextEdit_dalvik.reset() # start to show some infomation of the apk self.Tab_APKInfo(Global.APK) self.Tab_Methods(Global.APK, Global.VM, Global.VMX) self.Tab_Strings() self.Tab_Classes() print "Before show information" if Global.CONFIG["Java"] == 1: self.Tab_Files(str(filename)) else: self.treeWidget_files.clear() if Global.CONFIG["Smali"] == 1 or Global.CONFIG["Manifest"] == 1: print "config to show apktool" self.apktool = APKtool() #yuan build callinout tree if Global.CONFIG["CallIn"] == 1 or Global.CONFIG["CallOut"] == 1: methodInvokeList = self.CL.get_methodInvoke() self.callInOut = CallInOut(methodInvokeList) # mcalltree = self.callInOut.callTree() else: self.textEdit_call.setText("") if Global.CONFIG["Permission"] == 1: self.Tab_Permission() else: self.textEdit_permission.setText("") if Global.CONFIG["Manifest"] == 1: self.Tab_Manifest() else: self.textBrowser.setText("") self.tabWidget_2.setCurrentIndex(4) self.tabWidget.setCurrentIndex(7)