Beispiel #1
0
	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)
Beispiel #2
0
    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)