python制作exe程序内存大,python如何制作exe文件

大家好,小编为大家解答python代码如何生成exe可执行程序的问题。很多人还不知道python制作exe程序内存大,现在让我们一起来看看吧!

一、整体步骤
  • 1、安装pyinstaller 3.0
  • 2、安装wxpython
  • 3、安装布局工具wxFormBuilder
  • 4、将png生成icon
  • 5、upx391w(打包成exe程序)
二、工具安装
  • 安装布局工具(wxFormBuilder_v3.5.1-rc1.exe)

    • 下载地址:http://sourceforge.net/projects/wxformbuilder/files/wxformbuilder/3.1.70/
    • 教程地址:https://www.cnblogs.com/jikeboy/p/5648009.html
    • 教程地址:https://blog.51cto.com/yuyongid/1717514
  • 安装第三方库

    pip install pyinstaller
    pip install wxpython
    
  • 工具安装

    1、安装图像工具png2ico:绿色版解压即可
    2、安装打包工具upx391w:绿色版解压即可
    
三、布局工具使用
一、布局工具(wxFormBuilder)
第一步:准备一个窗体【forms 可以理解为html文件】
1、点击wxformbuilder上方的标签“forms”
2、并点击标签下方的第一个类似窗体的图标“Frame”
3、下面就会出现一个窗体
4、说明:但是现在还不能直接往窗体上添加各种控件。咱们还需要给窗体添加布局器BoxSizer

第二步:添加布局器【可以理解为html标签】
1、点击wxformbuilder上方的标签“Layout(倒数第3个)
2、并点击标签下方的图标“wxGridBagSizer”(顺数第5个)
3、添加一个只有以列控件布局的布局器
4、说明:窗体上并没有什么变化python流星雨特效代码简单。但是窗口左边的目录树有变化了,窗体下布局器多了一个红色边框

第三步:放置控件【可以理解为标签元素】
控件介绍(左起)
1、wxbutton(按钮)
2、wxBitmapButton(问号提示按钮)
3、wxStaticText(文本)
4、wxTextCtrl(文本输入框)
    1、选中wxTextCtrl元素设置默认值
    2、value写入默认值
    3、控制自动换行:
       wxTextCtrl---style---勾选wx.TE_MULTILINE
5、wxComboBox(下拉选择框)
6、wxChoice(下拉选择框)
  1、选择下来元素
  2、添加下拉选项
     wxChoice---choices---点右边---添加选项
  3、selection:通过索引指定默认选项值,0表示选择第一个选项
7、wxListBox(大文本框)
8、wxListCtrl(大下拉选择框)

第四步:调整空间位置
控件属性说明
1、name:实体对象的变量名
2、label:GUI页面显示的名称
3、控件尺寸属性
   1、wxWindow---size:Width:宽度,height:高度
4、控件位置属性
   1、gbsizeritem--row,column:行,列起始值为0
四、png生成icon
1、将png2ico.ip解压到D:\png2ico
2、将要转化的png,切成如下规格的.png图片 248*248 128*128 64*64 48*48 32*35 16*16
3、将这些.png图片全放到D:\png2ico目录
4、在命令行,进入D:\png2ico
5、再在命令行执行命令:png2ico qq.ico logo248.png logo128.png logo64.png logo48.png logo32.png logo16.png
6、执行完,程序会在D:\png2ico目录生成qq.ico
五、exe程序打包工具(upx391w)
"""
pyinstaller  打包
1、安装upx391w(解压即可)
2、在upx391w里面新建文件夹,将需要打包的.py文件放进去
3、cmd进入该目录执行命令:pyinstaller -wF dFraud.py  realName.py start.py --upx-dir upx391w
4、upx391w\build01\dist  目录下会生成.exe文件
pyinstaller -wF --icon=D:\20170508\upx391w\build01\qq.ico dFraud.py  realName.py start.py  --upx-dir upx391w
"""
1、把需要打包的py文件放到这个目录下,新建一个文件夹里面放需要打包的py文件
2、cmd 到这个新建的文件夹下
3、执行命令
如果是在build目录下就不需要加F参数
pyinstaller -wF --icon=qq.ico demo01.py  --upx-dir upx391w
在外面目录
pyinstaller -wF --icon=D:\20170508\upx391w\build01\qq.ico dFraud.py  realName.py start.py  --upx-dir upx391w
六、函数使用
1、文本框赋值
self.m_textCtrl104.SetValue(u'哇靠,发布借款报错了')
2、获取文本框内容
value = self.m_textCtrl1.GetValue()
3、获取下拉框的值
value = self.m_choice1.GetCurrentSelection()
4、事件函数语法
def test_fun(self,event):
        #event:接收self.Bind方法的event参数,名字可以随便写
        self.m_textCtrl32.SetValue('嗯,测试成功')
5、事件绑定
"""
handler:绑定函数
source:绑定按钮
"""
self.Bind(event=wx.EVT_BUTTON,handler=self.button1,source=self.m_button1)
七、完整例子
"""
event:接收self.Bind方法的event参数,名字可以随便写
value = self.m_textCtrl1.GetValue()  获取文本内容
value = self.m_choice1.GetCurrentSelection() 获取下拉框的值
self.m_textCtrl2.SetValue(response.json())  # 设置文本框的值
"""
import requests
import wx
import wx.xrc
import ast
import json
class MyFrame1(wx.Frame):

    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
                          size=wx.Size(900, 560), style=wx.DEFAULT_FRAME_STYLE | wx.MINIMIZE_BOX)

        self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)

        gbSizer1 = wx.GridBagSizer(0, 0)
        gbSizer1.SetFlexibleDirection(wx.BOTH)
        gbSizer1.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)

        self.m_staticText1 = wx.StaticText(self, wx.ID_ANY, u"接口地址", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText1.Wrap(-1)
        gbSizer1.Add(self.m_staticText1, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl1 = wx.TextCtrl(self, wx.ID_ANY, u"http://httpbin.org/post", wx.DefaultPosition,
                                       wx.Size(300, -1), 0)
        gbSizer1.Add(self.m_textCtrl1, wx.GBPosition(0, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText2 = wx.StaticText(self, wx.ID_ANY, u"请求参数", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText2.Wrap(-1)
        gbSizer1.Add(self.m_staticText2, wx.GBPosition(1, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl2 = wx.TextCtrl(self, wx.ID_ANY, u"{\n\"user_name\":\"admin\",\n\"passwd\":\"123456\"\n}",
                                       wx.DefaultPosition, wx.Size(300, 100), wx.TE_MULTILINE)
        gbSizer1.Add(self.m_textCtrl2, wx.GBPosition(1, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText3 = wx.StaticText(self, wx.ID_ANY, u"请求类型", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText3.Wrap(-1)
        gbSizer1.Add(self.m_staticText3, wx.GBPosition(2, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        m_choice1Choices = [u"POST", u"GET"]
        self.m_choice1 = wx.Choice(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_choice1Choices, 0)
        self.m_choice1.SetSelection(0)
        gbSizer1.Add(self.m_choice1, wx.GBPosition(2, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText4 = wx.StaticText(self, wx.ID_ANY, u"响应结果", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText4.Wrap(-1)
        gbSizer1.Add(self.m_staticText4, wx.GBPosition(3, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl3 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(300, 300), wx.TE_MULTILINE)
        gbSizer1.Add(self.m_textCtrl3, wx.GBPosition(3, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_button1 = wx.Button(self, wx.ID_ANY, u"发送请求", wx.DefaultPosition, wx.DefaultSize, 0)
        gbSizer1.Add(self.m_button1, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL, 5)

        self.SetSizer(gbSizer1)
        self.Layout()
        self.Centre(wx.BOTH)

        #绑定事件
        self.Bind(event=wx.EVT_BUTTON, handler=self.test_fun, source=self.m_button1)

    def __del__(self):
        pass

    def test_fun(self,event):
        try:
            url = self.m_textCtrl1.GetValue()
            data = self.m_textCtrl2.GetValue()
            method_num = self.m_choice1.GetCurrentSelection()
            method = "POST" if method_num == 0 else "GET"
            response = requests.request(method,url,json=ast.literal_eval(data))
            self.m_textCtrl3.SetValue(json.dumps(response.json(),indent=4))  # 设置文本框的值
        except Exception as e:
            self.m_textCtrl3.SetValue(e)

if __name__ == '__main__':
    app = wx.App(False)
    test = MyFrame1(None) # 创建窗口
    test.Centre() # 窗口居中
    test.Show() # 显示窗口
    app.MainLoop() # 运行程序
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 制作 Shellcode 加载器的方法有很多,这里介绍一种基于 Python 的实现方法。 首先,我们需要编写一个能够执行 shellcode 的程序。这个程序可以使用 C 语言编写,也可以使用其他语言编写。下面是一个简单的 C 语言程序,它会执行传入的 shellcode: ```c #include <stdio.h> #include <string.h> int main(int argc, char **argv) { char *shellcode = argv[1]; ((void (*)(void))shellcode)(); return 0; } ``` 编译这个程序: ``` gcc -o shellcode_loader shellcode_loader.c ``` 现在,我们可以使用 Python 来编写一个能够加载 shellcode 的脚本。这个脚本的基本思路是: 1. 将 shellcode 写入内存。 2. 调用 shellcode。 下面是 Python 代码: ```python import ctypes # shellcode shellcode = b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" # 将 shellcode 写入内存 memory = ctypes.create_string_buffer(shellcode) shellcode_address = ctypes.addressof(memory) # 调用 shellcode func = ctypes.CFUNCTYPE(None) func(shellcode_address) ``` 这个脚本使用 ctypes 库来实现将 shellcode 写入内存和调用 shellcode。首先,我们使用 create_string_buffer() 函数创建一个内存缓冲区,并将 shellcode 写入这个缓冲区。然后,我们使用 addressof() 函数获取缓冲区的内存地址,并将这个地址存储在 shellcode_address 变量中。最后,我们定义一个 CFUNCTYPE 类型的变量 func,并将其初始化为 None。CFUNCTYPE 类型表示一个 C 函数指针类型,它可以用来调用 C 函数。然后,我们可以通过 func(shellcode_address) 调用 shellcode。 需要注意的是,这个脚本必须以管理员权限运行,否则无法将 shellcode 写入内存。 以上就是基于 Python 的 shellcode 加载器的实现方法。 ### 回答2: Python是一种高级编程语言,可用于编写各种各样的脚本和程序。当使用Python编写shellcode加载器时,需要了解以下几个关键概念和步骤。 首先,要理解shellcode是什么。Shellcode是一种计算机程序,通常用于利用漏洞或执行特定的操作。Shellcode通常是二进制代码,用于在目标系统上执行指定的操作。 接下来,我们需要了解加载器是如何工作的。加载器是一段代码,其目的是将shellcode注入到目标进程中,并执行它。加载器通常是以DLL文件的形式存在,然后通过各种技术将其注入到目标进程中。 在Python中,可以使用ctypes库来加载DLL并执行其中的函数。ctypes提供了一种在Python中调用动态链接库函数的简单方法。 下面是一个简单的示例程序,用Python编写的shellcode加载器: ``` import ctypes # 加载DLL shellcode_dll = ctypes.WinDLL("shellcode.dll") # 加载器函数 def shellcode_loader(shellcode): # 将shellcode注入到目标进程中 shellcode_dll.LoadShellcode(shellcode) # 调用加载器函数 shellcode = "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\xa4\xcd\x80\x31" shellcode_loader(shellcode) ``` 在上面的示例中,我们首先使用ctypes库加载了一个名为shellcode_dll的DLL文件。然后定义了一个名为shellcode_loader的函数,该函数将接受一个shellcode作为参数,并调用shellcode_dll中的LoadShellcode函数来执行注入操作。最后,我们创建了一个包含实际shellcode的字符串,并将其传递给shellcode_loader函数进行加载。 需要注意的是,为了编写一个完整的shellcode加载器,可能还需要进一步的处理和代码,以适应不同的操作系统和处理器架构。此外,也需要适当的授权和合法用途来使用此代码。 ### 回答3: Python是一种高级编程语言,它的灵活性使得它成为编写加载器的理想工具。一个加载器的目的是将shellcode从内存中加载到计算机的进程空间,以便运行恶意代码。 使用Python编写一个shellcode加载器的过程如下: 1. 导入所需的模块:首先,在代码的开头,我们需要导入所需的模块。对于shellcode加载器,我们需要使用`ctypes`模块来与C语言进行交互。该模块能够加载动态链接库(DLL)和执行其中的函数。 2. 定义shellcode:在代码的下一部分,我们需要定义要加载的shellcode。这可以是由其他工具生成的二进制代码,也可以是手动编写的shellcode。将shellcode保存在一个字符串变量中。 3. 创建内存空间:我们需要为shellcode分配一块内存空间,以便它能够在其中运行。使用`ctypes`模块的`create_string_buffer`函数来创建这块内存空间。通过设置空间的大小来确保能够容纳整个shellcode。 4. 将shellcode复制到内存中:使用Python的`ctypes`库的`memcpy`函数将shellcode复制到之前分配的内存空间中。 5. 将内存设置为可执行:为了使操作系统将这块内存视为可执行代码,我们需要在内存空间上设置相应的标志。使用`ctypes`库的`VirtualProtect`函数可以实现这一点。 6. 执行shellcode:最后,我们需要通过函数指针调用shellcode的入口点,以便开始执行恶意代码。使用`ctypes`库的`CFUNCTYPE`函数创建一个C函数指针,然后使用这个指针来调用shellcode。 编写完成后,可以将代码保存为一个Python脚本,并在命令行中运行它。此时,shellcode将被加载到内存中,并开始执行。 需要注意的是,编写和使用shellcode加载器涉及到一些复杂的概念,如内存管理和计算机安全。在实践中,请确保对代码的运行环境和目标平台有透彻的理解,并遵循适当的法律和道德规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值