天天看點

跟着鬼哥學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

Apk_Decode的點選事件:

跟着鬼哥學PyQtPart.3

0x4:總結

    上面的大家可以看到,我們已經可以實作兩個功能了,即打開window找檔案,然後進行反編譯,但是在反編譯完成以後,我們需要對裡面的smali檔案進行操作,然後再回編譯檔案,簽名,才能對手機進行安裝,是以下一篇文章,我們就主要是編寫回編譯的方法以及對apk簽名的方法。