跟着鬼哥学PyQtPart.3

本文我们主要是创建一个window选择文件,从而来确定apk的路径,然后点击反编译按钮来对其进行反编译。

0x1:寻找相关api代码

QFileDialog类提供了类似的其他静态函数,如下表,通过这些函数,用户可以方便地定制自己的文件对话框。

 

静态函数 说明

getOpenFileName 获得用户选择的文件名

getSaveFileName 获得用户保存的文件名

getExistingDirectory 获得用户选择的已存在的目录名

getOpenFileNames 获得用户选择的文件名列表

 

0x2:按钮事件的总结

按钮的点击事件,经过一下午的分析,果断抛弃上一课的总结使用的鼠标点击事件,而直接对按钮的响应事件作出处理。也可以说通过今天下午的学习,比上午进步了一点点。。。

self.connect(decode,SIGNAL('clicked()'),self.apkD)

然后就是下午对布局文件的继续熟悉,感觉写布局代码越来越像写安卓代码的布局了,好了,下面我贴上全部代码,里面已经写了比较详细的注释了,相信有编码基础的读者是可以看懂的:


# -*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
import os


class GridLayout2(QWidget):
    
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setWindowTitle('Android_APK')
        ###第一行
        self.apk_path = QLabel('APk Path')
        self.apk_path_edit = QLineEdit()
        
        ###第二行,三个按钮,这里第三个按钮的点击事件还没写
        file_search=QPushButton("Search_File")
        decode = QPushButton("Apk_Decode")
        build = QPushButton("Apk_Build")

        ###寻找文件按钮的点击事件
        self.connect(file_search,SIGNAL('clicked()'),self.openFile)

        ###反编译按钮的点击事件
        self.connect(decode,SIGNAL('clicked()'),self.apkD)
        
        grid = QGridLayout()
        grid.setSpacing(10)
        grid.addWidget(self.apk_path, 1, 0)
        grid.addWidget(self.apk_path_edit, 1, 1)

        grid.addWidget(file_search,2,0)
        grid.addWidget(decode, 2,1)
        
        grid.addWidget(build, 2,2)
        self.setLayout(grid)
        self.resize(350, 300)


    def openFile(self):
        ##调用QfileDialog的相关方法来打开文件选择框
        s=QFileDialog.getOpenFileName(self,"Open file dialog","/","Apk files(*.apk)")
        ##定义全局变量,用于接收需要反编译的apk的路径
        global APK_STR
        APK_STR=str(s)
        self.apk_path_edit.setText(APK_STR)

    def apkD(self):

        ###上面openFIle方法中定义的全局变量,打印一下路径,看看是否正确#####
        print(APK_STR)

        ###apktool的命令使用#####
        apkToD='java -jar apktool.jar d '+APK_STR

        ###调用os的system命令来执行cmd的相关命令###
        os.system(apkToD)
        

        
app = QApplication(sys.argv)
qb = GridLayout2()
qb.show()
sys.exit(app.exec_())



0x3:效果截图

Search_file的点击事件:


跟着鬼哥学PyQtPart.3_第1张图片




Apk_Decode的点击事件:


跟着鬼哥学PyQtPart.3_第2张图片



0x4:总结

 

    上面的大家可以看到,我们已经可以实现两个功能了,即打开window找文件,然后进行反编译,但是在反编译完成以后,我们需要对里面的smali文件进行操作,然后再回编译文件,签名,才能对手机进行安装,所以下一篇文章,我们就主要是编写回编译的方法以及对apk签名的方法。



你可能感兴趣的:(android,python,qt,反编译工具,PyQt)