Python 编译器_如何在pe系统里安装软件

Python 编译器_如何在pe系统里安装软件好久都没更新博客了,最近是真的很忙,每天抽出1小时写博客,有的时候更本没时间,今天写一个解析PE的一个软件,过程和内容很干,干货干货之前有很多人加我要资料和软件,我从来没说过要钱什么的,只要给个关注和点赞,就可以了,需要什么资料,只要我可以给,我会不要一分钱免费给你们资料,欢迎大家来评论博主?点个赞留个关注吧!!资料(百度网盘)提取码:i4ptPE解析软件和源代码包文件提取码:07bhPE解析器软件安装包提取码:r9og激活成功教程版打包软件–打包为安装包先看视频,双击打开

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

好久都没更新博客了,最近是真的很忙,每天抽出1小时写博客,有的时候更本没时间,今天写一个解析PE的一个软件,过程和内容很干,干货干货

之前有很多人加我要资料和软件,我从来没说过要钱什么的,只要给个关注和点赞,就可以了,需要什么资料,只要我可以给,我会不要一分钱免费给你们资料,欢迎大家来评论博主?

点个赞留个关注吧!!

资料(百度网盘)

提取码:i4pt PE解析 软件和源代码包文件

提取码:07bh PE解析器软件安装包

提取码:r9og 激活成功教程版打包软件–打包为安装包

先看视频,双击打开安装包,安装程序后双击打开,可直接浏览文件也可直接拖拽文件,程序有判断,如果非PE文件会有提示,里面也有PE解析详细按钮,点击即可查看,电脑配置低下可能会卡一点,解析的PE文件太大也会卡一点,要注意哦

PE解析软件

 

Python 编译器_如何在pe系统里安装软件

Python 编译器_如何在pe系统里安装软件

 

目录

一、源码详解

二、完整代码

三、编译程序

四、程序打包


【流程】

1、源码详解

2、程序测试

3、程序编译

4、程序打包

一、源码详解

1、首先导入模块,没有的可以安装

安装模块的方法

pip install 模块名      –安装模块

pip install -U 模块名      –升级模块

from tkinter import *
from tkinter.ttk import *
import tkinter
from tkinter import filedialog
import pefile
import re
import os
import windnd
from tkinter.filedialog import *
import win32gui
import win32ui
from PIL import Image

2、基本的GUI框架

    root = Tk()
    root.title('剑工坊-PE分析工具')  # 程序的标题名称
    root.geometry("780x520+360+140")  # 窗口的大小及页面的显示位置
    root.resizable(False, False)  # 固定页面不可放大缩小
    root.iconbitmap("4.ico")  # 程序的图标

3、GUI里放入我们自己制作的图片,图片是提前设计的,我不是一个合格的界面设计师,不要向我学习哈

    photo = PhotoImage(file="./Key.png")
    theLabel = tkinter.Label(root, image=photo)
    theLabel.place(x=-1, y=-1)

Python 编译器_如何在pe系统里安装软件

 

4、加入文本框,用来展示内容的哈,下方的图片里,被我用红色框选的就是已经添加的文本框,你们看不见是因为我使用 borderwidth=0 将它的框给扁平化了,把数值改为1,就可以看到了

    # 打开文件   核心文件存储
    var_file = tkinter.StringVar()
    tkinter.Entry(root, width=70, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_file).place(x=105, y=10)

    # PE
    var_PE = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff',textvariable=var_PE).place(x=100, y=66)

    # EP段
    var_EP = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_EP).place(x=100, y=88)

    # 病毒检测
    var_BD = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_BD).place(x=322, y=66)

    # RVA大小
    var_RVA = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_RVA).place(x=322, y=90)

    # 入口点
    var_entry  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_entry).place(x=100, y=176)

    # 效验和
    var_Validate  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Validate).place(x=100, y=196)

    # 子系统
    var_Subsystem  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Subsystem).place(x=100, y=216)

    # 头部大小
    var_head  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_head).place(x=94, y=280)

    # 镜像大小
    var_image  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_image).place(x=94, y=304)

    # 代码基址
    var_Code  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Code).place(x=94, y=330)

    # 数据基址
    var_data  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_data).place(x=94, y=356)

    # 标志字
    var_sign  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_sign).place(x=330, y=280)

    # 特征值
    var_features  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_features).place(x=330, y=302)

    # 节数目
    var_Number  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Number).place(x=330, y=326)

    # 时间日期标志
    var_Date_flag  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Date_flag).place(x=330, y=410)

    # 可选头部大小
    var_optional_header  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_optional_header).place(x=330, y=434)

    # 服务器版本
    var_server  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_server).place(x=330, y=458)

    # 节对齐度
    var_Section_alignment  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Section_alignment).place(x=94, y=410)

    # 限定大小
    var_Limit_size  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Limit_size).place(x=94, y=434)

    # 镜像基址
    var_limit  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_limit).place(x=94, y=458)

    # 文件对齐
    var_File_Alignment  = tkinter.StringVar()
    tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_File_Alignment).place(x=94, y=482)

    # 文件说明
    var_Document_description = tkinter.StringVar()
    tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_Document_description).place(x=530, y=312)

    # 版权
    var_copyright = tkinter.StringVar()
    tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_copyright).place(x=530, y=348)

    # 文件版本
    var_File_version = tkinter.StringVar()
    tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_File_version).place(x=530, y=384)

    # 产品版本
    var_product_version = tkinter.StringVar()
    tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_product_version).place(x=530, y=420)

    # 签名
    var_autograph = tkinter.StringVar()
    tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_autograph).place(x=530, y=456)

    # 大名
    var_Dname = tkinter.StringVar()
    tkinter.Entry(root, width=18, borderwidth=0, fg='#ea0f0f', bg='#ffffff',font=('',16),textvariable=var_Dname).place(x=530, y=114)

Python 编译器_如何在pe系统里安装软件

 5、用于清空文本框

    def QK():  # 清空内容
        var_EP.set('')
        var_BD.set('')
        var_RVA.set('')
        var_entry.set('')
        var_Validate.set('')
        var_Subsystem.set('')
        var_head.set('')
        var_image.set('')
        var_Code.set('')
        var_data.set('')
        var_sign.set('')
        var_features.set('')
        var_Number.set('')
        var_Date_flag.set('')
        var_optional_header.set('')
        var_server.set('')
        var_Section_alignment.set('')
        var_Limit_size.set('')
        var_limit.set('')
        var_File_Alignment.set('')
        var_Document_description.set('')
        var_copyright.set('')
        var_File_version.set('')
        var_product_version.set('')
        var_autograph.set('')
        var_Dname.set('')

6、用来获取图标和切换图标

    # 图标
    image_file_3 = tkinter.PhotoImage(file="pictures.png")  # 软件第一次打开时要呈现的图片
    Button(root, image=image_file_3).place(x=471, y=104)

    # 更换软件图标
    def picture():
        try:
            image_file_3.config(file='icon.png')  # 替换
        except:
            pass

    ico_x = 32
    def ICON(exePath2):
        try:

            exePath = exePath2.replace("\\", "/")  # 替换
            large, small = win32gui.ExtractIconEx(f'{exePath}', 0)
            useIcon = large[0]
            destroyIcon = small[0]
            win32gui.DestroyIcon(destroyIcon)
            hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
            hbmp = win32ui.CreateBitmap()
            hbmp.CreateCompatibleBitmap(hdc, ico_x, ico_x)
            hdc = hdc.CreateCompatibleDC()
            hdc.SelectObject(hbmp)
            hdc.DrawIcon((0, 0), useIcon)
            bmpstr = hbmp.GetBitmapBits(True)
            img = Image.frombuffer(
                'RGBA',
                (32, 32),
                bmpstr, 'raw', 'BGRA', 0, 1
            )
            img.save('icon.png')
        except:
            pass

Python 编译器_如何在pe系统里安装软件

7、 这段代码是核心,获取程序路径,进行PE解析,然后回去指定内容进行展示,会载入到文本里

    def PE():   # 检测是否是PE文件

        try:
            fileinfo = os.stat(var_file.get())

            def formatTime(atime):
                import time
                return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(atime))
            ICON(var_file.get())
            picture()
            PE_file = pefile.PE(var_file.get())  # 读取pe文件
            PE_file_PE = PE_file.NT_HEADERS   # 检测是否是PE
            PE_file_MZ = PE_file.DOS_HEADER   # 检测是否是MZ
            PE_file_2 = PE_file.OPTIONAL_HEADER
            PE_file_3 = PE_file.FILE_HEADER
            PE_file_5 = PE_file.VS_FIXEDFILEINFO
            if hex(PE_file_MZ.e_magic) == '0x5a4d' and hex(PE_file_PE.Signature) == '0x4550':
                var_PE.set('PE文件')

                # EP段
                PE_q = PE_file.sections[0]  # 读取第一段   EP段
                EP_value = str(PE_q).replace(" ", "")  # 将空格替换为无(空值)
                file_EP = re.findall('Name:(.*)', EP_value)[0]  # 读取EP段
                var_EP.set(file_EP)

                # 病毒
                var_BD.set('暂未开发')

                # RVA检测
                var_RVA.set(hex(PE_file_2.NumberOfRvaAndSizes))  # RVA数目及大小

                # 入口点
                var_entry.set(hex(PE_file_2.AddressOfEntryPoint))

                # 效验和
                var_Validate.set(hex(PE_file_2.CheckSum))

                # 子系统
                var_Subsystem.set(hex(PE_file_2.Subsystem))

                # 头部大小
                var_head.set(hex(PE_file_2.SizeOfHeaders))

                # 镜像大小
                var_image.set(hex(PE_file_2.SizeOfImage))

                # 代码基址
                var_Code.set(hex(PE_file_2.BaseOfCode))

                # 数据基址
                var_data.set(hex(PE_file_2.BaseOfData))

                # 标志字
                var_sign.set(hex(PE_file_2.Magic))

                # 特征值
                var_features.set(hex(PE_file_3.Characteristics))

                # 节数目  //※PE文件中区块数量
                var_Number.set(hex(PE_file_3.NumberOfSections))

                # 时间日期标志
                var_Date_flag.set(hex(PE_file_3.TimeDateStamp))

                # 可选头部大小
                var_optional_header.set(hex(PE_file_3.SizeOfOptionalHeader))

                # 服务器版本
                var_server.set(hex(PE_file_2.MajorLinkerVersion))

                # 节对齐度
                var_Section_alignment.set(hex(PE_file_2.SectionAlignment))

                # 限定大小
                var_Limit_size.set(hex(PE_file_2.SizeOfInitializedData))

                # 镜像基址
                var_limit.set(hex(PE_file_2.ImageBase))

                # 文件对齐
                var_File_Alignment.set(hex(PE_file_2.FileAlignment))

                # 访问日期
                var_Document_description.set(formatTime(fileinfo.st_atime))

                # 安装日期
                var_copyright.set(formatTime(fileinfo.st_ctime))

                # 文件版本
                var_File_version.set(hex(PE_file_5[0].FileVersionMS))

                # 产品版本
                var_product_version.set(hex(PE_file_5[0].ProductVersionMS))

                # 签名
                var_autograph.set(hex(PE_file_5[0].Signature))

                # 大名
                var_Dname.set(os.path.basename(var_file.get()))
            else:
                var_PE.set('非有效PE文件!!')
                QK()
        except:
            var_PE.set('非有效PE文件!!')
            QK()

8、这段代码是可以省去浏览文件,使用推拽文件即可导入解析

    def file(files):   # 使用拖拽
        msg = '\n'.join((item.decode('gbk') for item in files))
        files = msg.replace("\\", "/")  # 替换
        if not os.path.isfile(files):  # 判断是否为文件
            var_file.set('错误文件路径不存在  --  不可多选!!  请检测!!!')
        else:
            var_file.set(files)    # 判断为文件则执行
            PE()

Python 编译器_如何在pe系统里安装软件

9、这段代码是用来查看详细资料,可以进行另存和撤销,功能不多,但很实用

    def dai_mck():   # 具体代码查看
        root_sk = Tk()
        root_sk.title(var_file.get())
        root_sk.geometry('600x500+200+200')
        root_sk.configure(background='#333333')
        root_sk.iconbitmap("4.ico")  # 程序的图标

        text = tkinter.Text(root_sk, width=140, heigh=60, bg='#333333', undo=True, fg='#ffffff',borderwidth=0)  # 宽度为80个字母(40个汉字),高度为1个行高

        scroll = tkinter.Scrollbar(root_sk)
        # 放到窗口的右侧, 填充Y竖直方向
        scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)

        # 两个控件关联
        scroll.config(command=text.yview)
        text.config(yscrollcommand=scroll.set)
        text.pack()
        try:
            PE = pefile.PE(var_file.get())    # 读取pe文件
            text.insert(tkinter.INSERT, f'\n\n{PE}')
        except:
            PE = '\n\n请检查路径文件或文档是否出错不存在!!!!!!!!!!!!'
            text.insert(tkinter.INSERT, PE)




        def mysaveas():  # 另存为
            global filename
            f = asksaveasfilename(initialfile="未命名.txt", defaultextension=".txt")
            filename = f
            fh = open(f, 'w')
            msg = text.get(1.0, END)
            fh.write(msg)
            fh.close()
            root_sk.title("记事本 " + os.path.basename(f))

        def move():  # 撤销
            text.edit_undo()

        menubar = Menu(root_sk)
        root_sk.config(menu=menubar)
        menubar.add_cascade(label='另存为', command=mysaveas)
        menubar.add_cascade(label='撤销', command=move)
        root_sk.mainloop()

二、完整代码

from tkinter import *
from tkinter.ttk import *
import tkinter
from tkinter import filedialog
import pefile
import re
import os
import windnd
from tkinter.filedialog import *
import win32gui
import win32ui
from PIL import Image
def main():
root = Tk()
root.title('剑工坊-PE分析工具')  # 程序的标题名称
root.geometry("780x520+360+140")  # 窗口的大小及页面的显示位置
root.resizable(False, False)  # 固定页面不可放大缩小
root.iconbitmap("4.ico")  # 程序的图标
photo = PhotoImage(file="./Key.png")
theLabel = tkinter.Label(root, image=photo)
theLabel.place(x=-1, y=-1)
# 打开文件   核心文件存储
var_file = tkinter.StringVar()
tkinter.Entry(root, width=70, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_file).place(x=105, y=10)
# PE
var_PE = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff',textvariable=var_PE).place(x=100, y=66)
# EP段
var_EP = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_EP).place(x=100, y=88)
# 病毒检测
var_BD = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_BD).place(x=322, y=66)
# RVA大小
var_RVA = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_RVA).place(x=322, y=90)
# 入口点
var_entry  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_entry).place(x=100, y=176)
# 效验和
var_Validate  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Validate).place(x=100, y=196)
# 子系统
var_Subsystem  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Subsystem).place(x=100, y=216)
# 头部大小
var_head  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_head).place(x=94, y=280)
# 镜像大小
var_image  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_image).place(x=94, y=304)
# 代码基址
var_Code  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Code).place(x=94, y=330)
# 数据基址
var_data  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_data).place(x=94, y=356)
# 标志字
var_sign  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_sign).place(x=330, y=280)
# 特征值
var_features  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_features).place(x=330, y=302)
# 节数目
var_Number  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Number).place(x=330, y=326)
# 时间日期标志
var_Date_flag  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Date_flag).place(x=330, y=410)
# 可选头部大小
var_optional_header  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_optional_header).place(x=330, y=434)
# 服务器版本
var_server  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_server).place(x=330, y=458)
# 节对齐度
var_Section_alignment  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Section_alignment).place(x=94, y=410)
# 限定大小
var_Limit_size  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_Limit_size).place(x=94, y=434)
# 镜像基址
var_limit  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_limit).place(x=94, y=458)
# 文件对齐
var_File_Alignment  = tkinter.StringVar()
tkinter.Entry(root, width=14, borderwidth=0,fg='#ea0f0f', bg='#ffffff', textvariable=var_File_Alignment).place(x=94, y=482)
# 文件说明
var_Document_description = tkinter.StringVar()
tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_Document_description).place(x=530, y=312)
# 版权
var_copyright = tkinter.StringVar()
tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_copyright).place(x=530, y=348)
# 文件版本
var_File_version = tkinter.StringVar()
tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_File_version).place(x=530, y=384)
# 产品版本
var_product_version = tkinter.StringVar()
tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_product_version).place(x=530, y=420)
# 签名
var_autograph = tkinter.StringVar()
tkinter.Entry(root, width=30, borderwidth=0, fg='#ea0f0f', bg='#ffffff', textvariable=var_autograph).place(x=530, y=456)
# 大名
var_Dname = tkinter.StringVar()
tkinter.Entry(root, width=18, borderwidth=0, fg='#ea0f0f', bg='#ffffff',font=('',16),textvariable=var_Dname).place(x=530, y=114)
def QK():  # 清空内容
var_EP.set('')
var_BD.set('')
var_RVA.set('')
var_entry.set('')
var_Validate.set('')
var_Subsystem.set('')
var_head.set('')
var_image.set('')
var_Code.set('')
var_data.set('')
var_sign.set('')
var_features.set('')
var_Number.set('')
var_Date_flag.set('')
var_optional_header.set('')
var_server.set('')
var_Section_alignment.set('')
var_Limit_size.set('')
var_limit.set('')
var_File_Alignment.set('')
var_Document_description.set('')
var_copyright.set('')
var_File_version.set('')
var_product_version.set('')
var_autograph.set('')
var_Dname.set('')
# 图标
image_file_3 = tkinter.PhotoImage(file="pictures.png")  # 软件第一次打开时要呈现的图片
Button(root, image=image_file_3).place(x=471, y=104)
# 更换软件图标
def picture():
try:
image_file_3.config(file='icon.png')  # 替换
except:
pass
ico_x = 32
def ICON(exePath2):
try:
exePath = exePath2.replace("\\", "/")  # 替换
large, small = win32gui.ExtractIconEx(f'{exePath}', 0)
useIcon = large[0]
destroyIcon = small[0]
win32gui.DestroyIcon(destroyIcon)
hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
hbmp = win32ui.CreateBitmap()
hbmp.CreateCompatibleBitmap(hdc, ico_x, ico_x)
hdc = hdc.CreateCompatibleDC()
hdc.SelectObject(hbmp)
hdc.DrawIcon((0, 0), useIcon)
bmpstr = hbmp.GetBitmapBits(True)
img = Image.frombuffer(
'RGBA',
(32, 32),
bmpstr, 'raw', 'BGRA', 0, 1
)
img.save('icon.png')
except:
pass
def PE():   # 检测是否是PE文件
try:
fileinfo = os.stat(var_file.get())
def formatTime(atime):
import time
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(atime))
ICON(var_file.get())
picture()
PE_file = pefile.PE(var_file.get())  # 读取pe文件
PE_file_PE = PE_file.NT_HEADERS   # 检测是否是PE
PE_file_MZ = PE_file.DOS_HEADER   # 检测是否是MZ
PE_file_2 = PE_file.OPTIONAL_HEADER
PE_file_3 = PE_file.FILE_HEADER
PE_file_5 = PE_file.VS_FIXEDFILEINFO
if hex(PE_file_MZ.e_magic) == '0x5a4d' and hex(PE_file_PE.Signature) == '0x4550':
var_PE.set('PE文件')
# EP段
PE_q = PE_file.sections[0]  # 读取第一段   EP段
EP_value = str(PE_q).replace(" ", "")  # 将空格替换为无(空值)
file_EP = re.findall('Name:(.*)', EP_value)[0]  # 读取EP段
var_EP.set(file_EP)
# 病毒
var_BD.set('暂未开发')
# RVA检测
var_RVA.set(hex(PE_file_2.NumberOfRvaAndSizes))  # RVA数目及大小
# 入口点
var_entry.set(hex(PE_file_2.AddressOfEntryPoint))
# 效验和
var_Validate.set(hex(PE_file_2.CheckSum))
# 子系统
var_Subsystem.set(hex(PE_file_2.Subsystem))
# 头部大小
var_head.set(hex(PE_file_2.SizeOfHeaders))
# 镜像大小
var_image.set(hex(PE_file_2.SizeOfImage))
# 代码基址
var_Code.set(hex(PE_file_2.BaseOfCode))
# 数据基址
var_data.set(hex(PE_file_2.BaseOfData))
# 标志字
var_sign.set(hex(PE_file_2.Magic))
# 特征值
var_features.set(hex(PE_file_3.Characteristics))
# 节数目  //※PE文件中区块数量
var_Number.set(hex(PE_file_3.NumberOfSections))
# 时间日期标志
var_Date_flag.set(hex(PE_file_3.TimeDateStamp))
# 可选头部大小
var_optional_header.set(hex(PE_file_3.SizeOfOptionalHeader))
# 服务器版本
var_server.set(hex(PE_file_2.MajorLinkerVersion))
# 节对齐度
var_Section_alignment.set(hex(PE_file_2.SectionAlignment))
# 限定大小
var_Limit_size.set(hex(PE_file_2.SizeOfInitializedData))
# 镜像基址
var_limit.set(hex(PE_file_2.ImageBase))
# 文件对齐
var_File_Alignment.set(hex(PE_file_2.FileAlignment))
# 访问日期
var_Document_description.set(formatTime(fileinfo.st_atime))
# 安装日期
var_copyright.set(formatTime(fileinfo.st_ctime))
# 文件版本
var_File_version.set(hex(PE_file_5[0].FileVersionMS))
# 产品版本
var_product_version.set(hex(PE_file_5[0].ProductVersionMS))
# 签名
var_autograph.set(hex(PE_file_5[0].Signature))
# 大名
var_Dname.set(os.path.basename(var_file.get()))
else:
var_PE.set('非有效PE文件!!')
QK()
except:
var_PE.set('非有效PE文件!!')
QK()
def file(files):   # 使用拖拽
msg = '\n'.join((item.decode('gbk') for item in files))
files = msg.replace("\\", "/")  # 替换
if not os.path.isfile(files):  # 判断是否为文件
var_file.set('错误文件路径不存在  --  不可多选!!  请检测!!!')
else:
var_file.set(files)    # 判断为文件则执行
PE()
def dai_mck():   # 具体代码查看
root_sk = Tk()
root_sk.title(var_file.get())
root_sk.geometry('600x500+200+200')
root_sk.configure(background='#333333')
root_sk.iconbitmap("4.ico")  # 程序的图标
text = tkinter.Text(root_sk, width=140, heigh=60, bg='#333333', undo=True, fg='#ffffff',borderwidth=0)  # 宽度为80个字母(40个汉字),高度为1个行高
scroll = tkinter.Scrollbar(root_sk)
# 放到窗口的右侧, 填充Y竖直方向
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# 两个控件关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
text.pack()
try:
PE = pefile.PE(var_file.get())    # 读取pe文件
text.insert(tkinter.INSERT, f'\n\n{PE}')
except:
PE = '\n\n请检查路径文件或文档是否出错不存在!!!!!!!!!!!!'
text.insert(tkinter.INSERT, PE)
def mysaveas():  # 另存为
global filename
f = asksaveasfilename(initialfile="未命名.txt", defaultextension=".txt")
filename = f
fh = open(f, 'w')
msg = text.get(1.0, END)
fh.write(msg)
fh.close()
root_sk.title("记事本 " + os.path.basename(f))
def move():  # 撤销
text.edit_undo()
menubar = Menu(root_sk)
root_sk.config(menu=menubar)
menubar.add_cascade(label='另存为', command=mysaveas)
menubar.add_cascade(label='撤销', command=move)
root_sk.mainloop()
def getfile():   # 使用定位文件
file_path = filedialog.askopenfilename(filetypes=[('*.EXE', '*.exe'), ('*.dll', '*.DLL')])
var_file.set(file_path)
PE()
windnd.hook_dropfiles(theLabel, func=file)  # 背景
# 按钮控件
Button(root, text='\n具体代码查看\n',width=18, command=dai_mck).place(x=284, y=172)
Button(root, text='打开文件',  command=getfile).place(x=610, y=8)
def Label():   # 标签
# 标签
tkinter.Label(root, bg="#ffffff", text='小木_.').place(x=710, y=14)
Label()   # 标签
root.mainloop() #运行
if __name__ == '__main__':
main()

三、编译程序

我们使用pyinstaller 进行编译

pyinstaller -i 图标名称.ico 程序名称.py –noconsole

-i  打包程序的图标(没有图标的可以将-i *.ico 去掉)

 

–noconsole    是只运行或操作时不弹出DOS窗口,进行隐藏 

Python 编译器_如何在pe系统里安装软件

四、程序打包

使用第三方软件进行打包为安装包程序,将程序进行解压,打开该软件 (该程序使用后需要删除重新进行解压,因为你运行后它会自动更新,会把激活成功教程的文件进行替换,就不是激活成功教程软件了)

Python 编译器_如何在pe系统里安装软件

软件名称:就是你安装后的程序名称

软件版本:就是版本随便填

简短描述:就是这个程序的简介

图标:是安装包的图标,不添加的话会变成第三方软件自身的图标哦

背景:是安装时GUI的窗口框架背景图

选取打包目录:就是要打包起来的目录

从打包目录选取主程序:从要打包的目录里选择你的主程序

选取安装程序保存路径:就是安装包生成后要保存的名称和位置,这个是生成的安装哈,可不是安装后的程序

生成静默安装程序:就是可以不弹出任何提示进行安装,想不想要自己看着搞

Python 编译器_如何在pe系统里安装软件

我们打开高级功能和服务  点击高级功能

运行环境保护想开不开都可以

版权信息:填写直接的标所,列如: 归属 CSDN用户:小木_.

公司名称:添加自己的公司,没公司的瞎填或不填

官网网站:没有的可以不填,有的也可以不填,想填就填,随意哈

Python 编译器_如何在pe系统里安装软件

我们打开卸载自定义

勾选启用1自定义界面功能

卸载图标:是指卸载程序时的图标

背景:就是卸载时GUI的背景

卸载时清除用户数据:这个尽量勾选哈,不给自己留麻烦,意思就是删除程序时也把使用过的痕迹数据一同清理 

Python 编译器_如何在pe系统里安装软件

接下来我们打开更多VIP功能 (这两个可选可不选,没必要哈)

勾选加壳保护主程序

以管理员方式启动主程序

Python 编译器_如何在pe系统里安装软件

然后就打包成功了

Python 编译器_如何在pe系统里安装软件

 

留个赞再走呗

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181186.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • WannaCry勒索病毒_永恒之蓝病毒攻击原理

    WannaCry勒索病毒_永恒之蓝病毒攻击原理WannaCry永恒之蓝的电脑勒索病毒正在全球蔓延,在电脑感染病毒后,电脑里的所有数据都会被加密,用户完全打不开,接着屏幕会弹出消息框,要求受害人支付比特币赎金,勒索病毒一旦中招危害巨大,本文总结出勒索病毒最全防范措施。

  • 第二章:activiti工作流连接数据库,和eclipse安装activiti插件

    第二章:activiti工作流连接数据库,和eclipse安装activiti插件第二章:activiti工作流连接数据库,和eclipse安装activiti插件

  • ELK 收集 Tomcat 日志「建议收藏」

    ELK 收集 Tomcat 日志「建议收藏」01Tomcat安装与测试1.1安装Tomcat安装Tomcat的本体和相关官方测试demo,参考链接apt-getinstalltomcat8-y#安装Tomcat本体apt-getinstalltomcat8-docstomcat8-examplestomcat8-admin-y#安装测试demo1.2Tomcat启动检查systemctlstarttomcat8#启动Tomcatsystemctlstatustomcat8netstat

  • 程序员法则xiazai_程序员手册

    程序员法则xiazai_程序员手册第六章论剑  我深深的吸了一口气,让自己的激动的心情平息下来。“大家好,很高兴可以和大家合作开发这个项目,我也不浪费大家的时间,下面我就给大家讲一下这个项目的具体构架情况”。一个个的方案才我的嘴里轻松的说出来,每个人都分配到合适的任务,每个人都清楚的明白自己的目的,我全身心的投入指挥当中,我记得BRUCE,也是我程序道路上的领路人之一,曾经在发给我的EMAIL中说过:“许,你编写的程序让我感受到

  • Java8 新特性 —— 函数式编程

    Java8 新特性 —— 函数式编程

    2020年11月19日
  • phpstorm激活码2022.01(注册激活)

    (phpstorm激活码2022.01)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号