-
-
[原创]PyQt开发反编译工具学习记录篇
-
发表于:
2014-9-8 15:14
18825
-
中秋假期转眼间过去两天了,这次没出去玩,就留在家里学习下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,下面是这两个的官网:
https://www.python.org/downloads/
http://pyqt.sourceforge.net
下面我整理好放到百度网盘的:
http://pan.baidu.com/s/1dD1o5qT
两个软件选择32位的,可以运行在64位电脑环境下,win7/win8都已经测试没问题。
一些学习网站的整理:
http://www.riverbankcomputing.com
http://wiki.woodpecker.org.cn/moin/PyQt
http://www.commandprompt.com/community/pyqt/book1
http://wiki.python.org/moin/PyQt
http://code.google.com/p/pyqt-doc-cn/
第一个测试代码的编写
然后就开始第一个测试代码的编写:
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_())
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课