跟着鬼哥学PyQtPart.2

<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

时间: 2025-01-06 18:39:44

跟着鬼哥学PyQtPart.2的相关文章

跟着鬼哥学PyQtPart.4

中秋假期转眼已经过去两天了,我们的学习也在不断向前,经过前面三篇文章的学习,我们已经可以做出来一个简单的反编译apk的工具了. 为了更方便的使用我们自己编写的工具,所以我们对于第三篇文章中的search_file button来进行处理,我们使用拖拽文件到QLineEdit控件上面来显示文件路径,而不用打开window来选择了,这样对我们的操作来说更加方便一点. 0x1:拖拽事件的处理 拖拽事件,经过一晚上的查询以及翻看Java已经写好的工具,终于找到dragEnterEvent和dropEve

跟着鬼哥学so修改,四,实例第一篇

跟着鬼哥学so修改,四,实例第一篇 图/文  听鬼哥说故事 ---------------------------------------------分割线-------------------------------------------- 这篇文章是前段时间的文章,最近这个系列的so分析刚好可以做为一个实例教程,所以就补充拿回来了. 前三篇没看的,请继续关注博客,看完前面三篇. 趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充························ 另,此

跟着鬼哥学so改动,二,进行篇

图/文  听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够在so中定义String字符串了,那么我们当然也能够定义int类型的数据了.那么.我们在此定义一个getCoin方法,返回值为int类型. 例如以下: JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin (JNIEnv * env, jo

跟着鬼哥学so修改,二,进行篇

图/文  听鬼哥说故事 继续上文的内容---------------------------------- 0x1:测试文件的编写 经过上一篇文章的基础学习,现在我们开始进行是用的部分. 既然我们可以在so中定义String字符串了,那么我们当然也可以定义int类型的数据了,那么,我们在此定义一个getCoin方法,返回值为int类型.如下: JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin (JNIEnv * env, jobje

跟着鬼哥学so修改,一,准备篇

图/文 听鬼哥说故事 闲话少说,so的修改,重要性大家都知道,这里从头编写so文件,分析so文件,修改so文件,打算做一个系列的教程,当然,主要是看时间允许. android的sdk配置以及ndk环境下载,请同学们自行google即可. 翻墙也不会,工具也不会用,搜索也懒得搞,请直接略过本文即可. 0x1:新建立一个安卓工程 0x2:编写调用so代码和方法定义 在MainActivity.java同目录下创建一个JniGg.java文件,用于调用so 0x3:生成文件头.h文件 在这个目录可以看

跟着鬼哥学so修改,三,答案篇

几篇分析好的文章: http://www.pd521.com/thread-114-1-1.html     xxoo http://www.pd521.com/thread-113-1-1.html    myoldid  (回复,1,2,3) 进行软件的分析,这个过程就不需要多说了,大家自己看就是了,下面是分析完毕后的思路进行. 细节方面不再叙述: smali层关键点: native层关键点: 0x1: 修改smali层,将传入参数v0设置为int数值 1. 0x2: 针对这个apk来说,搜

跟着鬼哥学PyQt Part.1

中秋几天不出去玩了,留在家里把PyQt的相关资料学习一下,这里仅记录一下学习的相关记录,留下存档,便于以后翻阅.主要的目的是编写一个反编译和回编译的工具,稍后可以慢慢随着需求补充上一些搜索和修改的功能,处理一些游戏的自动破解,类似MM和一些其他支付都有特征可参考. 感觉可能会对初学者有一些参考,于是就整理一下发到博客里面.文中都是学习中的留下的笔记,所以肯定会有很多书籍中的代码,在此感谢那些作者,让后学者少走弯路. 0x1:PyQt的介绍: PyQt是一个创建GUI应用程序的工具包,它是Pyth

跟着鬼哥学so修改,三,作业篇

作业: 通过前面两篇文章的学习,请自行分析此应用,将当前用户类型修改为Gold Vip 用户. 有两种以上的方式可以修改的,有兴趣的同学请进行分析,写一下分析记录,可另起文章发布其过程与思路. 明天或者后天,再发布一下分析过程,以及原代码,大家再对比学习一下即可. -------------------------------------------------------- 下载地址: http://pan.baidu.com/s/1jG22HMY

CSDN学院“跟着龙哥学JavaWeb”的笔记

笔记内容都来源于""跟着龙哥学JavaWeb"课程中的讲解. 其实很多年前有接触,只是重新看看有什么更值得学习的. 既想搭建个服务器,又想做个APP端,那还是工作挺多的. 1 Web概述 C/S VB,VC++,Java,C# 特点: 在服务器端主要就是一个数据库,把所有业务逻辑以及界面的渲染操作交给客户端完成. 优点:较安全,用户节目很丰富,用户体验不错等. 缺点:每次升级都需要重新安装,针对于不同的操作系统开发,可移植性差. B/S JSP,ASP,PHP,基于浏览器访问