首页
社区
课程
招聘
[原创]PyQt开发反编译工具学习记录篇
发表于: 2014-9-8 15:14 19220

[原创]PyQt开发反编译工具学习记录篇

2014-9-8 15:14
19220

中秋假期转眼间过去两天了,这次没出去玩,就留在家里学习下PyQt的开发知识。这里仅记录一下学习的相关记录,留下存档,便于以后翻阅。主要的目的是编写一个反编译和回编译的工具,稍后可以慢慢随着需求补充上一些搜索和修改的功能,处理一些游戏的自动破解,类似MM和一些其他支付都有特征可参考,适合做自动化处理。

0x1:第一天,环境配置,简单测试代码

PyQt的简介

PyQt是一个创建GUI应用程序的工具包,它是Python编程语言和Qt库的成功融合,Qt库是目前最强大的库之一。PyQt是由Phil Thompson 开发,实现了一个Python模块集。它有超过300类,将近6000个函数和方法,它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。 PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。

环境的配置

我们这里使用的Python版本为2.7.8 ,对应的PyQt版本为4.11.1,下面是这两个的官网:

1e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2H3P5i4c8Z5L8$3&6Q4x3X3g2G2M7X3N6Q4x3V1k6V1L8%4N6F1L8r3!0S2k6s2y4Q4x3V1j5`.
3b0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8&6M7i4c8Q4x3X3g2K6L8%4g2J5j5$3g2X3L8%4u0Y4k6g2)9J5k6h3&6W2N6l9`.`.

下面我整理好放到百度网盘的:

332K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8S2L8W2)9J5k6h3u0S2K9h3c8#2i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8U0q4V1c8o6q4G2y4i4q4f1

两个软件选择32位的,可以运行在64位电脑环境下,win7/win8都已经测试没问题。
一些学习网站的整理:

fb0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4u0A6N6X3g2J5j5X3q4F1K9$3y4G2L8i4m8#2N6r3W2F1k6#2)9J5k6h3y4G2L8b7`.`.
c98K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6A6K9$3W2Q4x3X3g2%4L8$3!0V1M7r3g2U0K9$3g2J5i4K6u0W2L8%4u0Y4i4K6u0W2j5$3&6Q4x3V1k6E0L8$3W2F1i4K6u0r3f1s2W2c8N6l9`.`.
68fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4G2L8h3#2S2L8X3c8H3M7X3!0E0M7s2c8Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8$3#2E0N6h3&6A6N6s2W2Q4x3V1k6H3P5i4q4@1i4K6u0r3j5X3!0G2K9K6p5`.
016K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6A6K9$3W2Q4x3X3g2H3P5i4c8Z5L8$3&6Q4x3X3g2G2M7X3N6Q4x3V1k6E0L8$3W2F1i4K6u0r3f1s2W2c8N6l9`.`.
4f2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4G2k6r3g2Q4x3X3g2Y4L8$3!0Y4L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6H3i4K6u0r3M7s2W2I4N6q4)9J5k6r3c8G2j5#2)9J5k6r3y4F1i4K6u0r3

第一个测试代码的编写

然后就开始第一个测试代码的编写:

import sys

'''这里我们进行必须的引用。基础的GUI控件位于QtGui模块中。'''
from PyQt4 import QtGui

'''每一个PyQT4应用必须创建一个应用对象。应用对象位于QtGui模块中。sys.argv参数是从命令行返回的一个参数列表。Python脚本可以从shell来运行。这是一种我们启动脚本的方法。'''
app = QtGui.QApplication(sys.argv)

'''QWidget控件是PyQT4中所有用户接口对象的基类。我们为QWidget提供了缺省的构造程序。缺省的构造程序没有父类。一个没有父类的控件叫做窗口。'''
widget = QtGui.QWidget()

'''resize()方法可以调整控件的尺寸。这里是250px宽,150px高。'''
widget.resize(250, 150)

'''这里我们指定我们窗口的标题。标题在标题栏里显示。'''
widget.setWindowTitle('Love Guige,Love Python')

'''show() 方法将控件显示在屏幕上。'''
widget.show()

'''sys.exit()方法可以确保一个干净的退出。环境参数会显示出应用程序是何种方式结束的'''
sys.exit(app.exec_())
import os

#####设置apk路径,我们这里先使用固定路径#####

apk_path=os.getcwd()+"\\aa.apk"

def apkD(apk_path):

    ###打印一下路径,看看是否正确#####
    print(apk_path)

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

    ###查看一下命令,是否正确,有写错###
    print(apkToD)

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

apkD(apk_path)
################################## 自定义按钮类 ####################################
class MyButton(QtGui.QToolButton):
    '''自定义按钮类'''
    ############################## 构造、析构函数 ##################################
    def __init__(self,parent=None):
        '''构造函数'''
        # 调用父类构造函数
        super(MyButton,self).__init__(parent)
        # 设置按钮尺寸
        self.setFixedSize(QtCore.QSize(800,120))
        # 设置按钮背景颜色
        self.setStyleSheet('''background-color:red;''')
    ################################ 事件 #########################################
    def mousePressEvent(self,event):
        '''鼠标按下事件'''
        # 判断是否为鼠标左键按下
        if event.button() == QtCore.Qt.LeftButton:
            # 发射点击信号
            self.clicked.emit(True)
            # 传递至父窗口响应鼠标按下事件
            self.parent().mousePressEvent(event)
import sys
import os
from PyQt4 import QtGui
from PyQt4 import QtCore

###apk的位置,当前类下,我们这里先放到当前文件所在目录###
apk_path=os.getcwd()+"\\aa.apk"

################################# 自定义窗口类 #####################################
class MyWindow(QtGui.QWidget):
    '''自定义窗口类'''
    ############################# 构造、析构函数 #################################
    def __init__(self,parent=None):
        '''构造函数'''
        # 调用父类构造函数
        super(MyWindow,self).__init__(parent)
        # 设置窗口固定尺寸
        self.setFixedSize(QtCore.QSize(800,600))
        # 创建主控件
        bodyWidget = QtGui.QWidget(self)
        # 创建主布局
        mainLayout = QtGui.QVBoxLayout(bodyWidget)

        # 创建自定义按钮
        button = MyButton(self)
        # 设置文本内容
        button.setText("Apk_Decode")
        # 添加控件
        mainLayout.addWidget(button)
        # 设置按钮点击连接槽函数
        button.clicked.connect(self.OnClick)
    ############################### 命令 ########################################
    def OnClick(self):
        '''响应点击'''
        QtGui.QMessageBox.about(self,"apk_d","apk is decoding")

    ############################### 反编译方法 ########################################
    def apk_decode(self,path):
        print(path)
        apkToD='java -jar apktool.jar d '+path
        print(apkToD)
        os.system(apkToD)
        
    ################################ 事件 ########################################
    def mousePressEvent(self,event):
        '''鼠标按下事件'''
        # 判断是否为鼠标左键按下
        if event.button() == QtCore.Qt.LeftButton:
            # 设置窗口背景颜色
            self.setStyleSheet('''''')
            self.apk_decode(apk_path)
            

        
        
################################## 自定义按钮类 ####################################
class MyButton(QtGui.QToolButton):
    '''自定义按钮类'''
    ############################## 构造、析构函数 ##################################
    def __init__(self,parent=None):
        '''构造函数'''
        # 调用父类构造函数
        super(MyButton,self).__init__(parent)
        # 设置按钮尺寸
        self.setFixedSize(QtCore.QSize(800,120))
        # 设置按钮背景颜色
        self.setStyleSheet('''background-color:red;''')
    ################################ 事件 #########################################
    def mousePressEvent(self,event):
        '''鼠标按下事件'''
        # 判断是否为鼠标左键按下
        if event.button() == QtCore.Qt.LeftButton:
            # 发射点击信号
            self.clicked.emit(True)
            # 传递至父窗口响应鼠标按下事件
            self.parent().mousePressEvent(event)
        
################################## 主函数 ##########################################
if __name__ == "__main__":
    '''主函数'''
    # 声明变量
    app = QtGui.QApplication(sys.argv)
    # 创建窗口
    window = MyWindow()
    # 设置窗口显示
    window.show()
    #应用程序事件循环
    sys.exit(app.exec_())

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (11)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习学习 顶一下
2014-9-8 15:18
0
雪    币: 756
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持鬼哥!!!!
2014-9-8 15:18
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
前排支持鬼哥了。推荐增加JDK的东西,因为最新的apktool 已经有-o参数了
2014-9-8 15:20
0
雪    币: 275
活跃值: (259)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
不明觉厉,支持!!
2014-9-8 15:30
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
小鬼霸气。 又研究新玩意了。
2014-9-8 15:56
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
顶顶更健康~
2014-9-8 19:32
0
雪    币: 233
活跃值: (148)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8
好好学习,天天向上,顶。
2014-9-9 10:13
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习学习 顶一下 !
2014-9-9 16:32
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
珍爱生命,请用python```
2014-9-10 03:31
0
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
11
学习了,多谢分享~~
2014-9-10 12:17
0
雪    币: 107
活跃值: (429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习...谢谢分享....
2014-9-12 10:09
0
游客
登录 | 注册 方可回帖
返回