<span style="font-family: Arial, Helvetica, sans-serif;">0x1:</span><span style="font-family: 宋体;">简述</span>
<span style="font-family: Arial, Helvetica, sans-serif;">0x1:</span><span style="font-family: 宋体;">简述</span>
经过第一篇的简单布局以后,我们来考虑是否可以放上一个按钮,来执行相关的动作呢?答案是肯定可以的,经过测试,已经简单整理一个按钮的点击事件响应,来执行反编译动作。这里将学习过程记录一下。
0x2:思考过程
我们想要做反编译的动作,首先是要准备反编译所需要的相关东西。所以我们下载apktool.jar来执行相关动作,我这里采用的是一个朋友编译的1.5版本的apktool,相关网址为:
http://bbs.chinaunix.net/thread-4096302-1-1.html
使用apktool.jar的命令即可,我们可以用Python来执行cmd的命令的,所以这个是可以实现的。
这个方法处理好以后,就是需要跟按钮点击事件关联起来即可。那么下面我们就分开实现这个。
0x3:反编译方法的实现
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)
代码中已经写清楚了详细的注释,这里我们可以看一下截图,证明我们的方法是有效的:
我们现在已经可以实现这个功能了,即使用apktool.jar的命令,在命令行下来实现,也是比较简单的,只要配置好java的环境变量即可,那么下一步我们就开始编写一个按钮,实现简单的鼠标点击事件。
0x4:鼠标点击事件的实现
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 mousePressEvent(self,event):
'''鼠标按下事件'''
# 判断是否为鼠标左键按下
if event.button() == QtCore.Qt.LeftButton:
# 设置窗口背景颜色
self.setStyleSheet('''''')
################################## 自定义按钮类 ####################################
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_())
代码中有详细的注释,这里是效果截图:
点击apk_decode按钮,会弹出一个对话框提示正在反编译,说明我们已经将按钮的点击事件写上了,然后下一步我们就是将反编译的方法加上,并且对应放到按钮的点击事件里面。
0x5:整合两处代码
详细代码如下:
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_())
看到这个截图,可以发现我们已经成功实现了点击按钮实现反编译的功能了。
0x6:总结
上面我们已经可以简单实现按钮的反编译了,毕竟没有白白浪费时间,证明我们是可以做一个反编译工具的,那么平时操作中,我们肯定不会是在代码中写死apk的路径的。常用的方法是加一个选择apk路径的window,然后选定apk,这样来确定apk所在的路径的。那么下一篇我们就一起来探索如何实现这个功能。
中秋第二天,下午就在探索中度过了。。。
祝福大家中秋愉快~~~
上面代码都是完整代码,所以本篇不再上传到网盘了,大家直接复制代码测试使用即可,欢迎有兴趣的大神交流指导~~~
破解群:,爱鬼哥
爱破解,爱鬼哥 :377724636