首页
社区
课程
招聘
[原创]pyoneGUI让你实现插件自由
发表于: 2024-1-1 22:41 14705

[原创]pyoneGUI让你实现插件自由

2024-1-1 22:41
14705

04dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4M7%4c8G2L8X3f1H3x3o6p5I4i4K6u0r3M7s2W2G2L8X3g2s2g2f1V1`.
绿色灵活,路径无关,插件自由,即改即用,所见即所得。助你轻松记录灵感,沉淀知识,并快速复用。

pyoneGUI网盘下载
下载链接:b61K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4k6i4c8y4P5Y4u0J5d9p5N6F1N6@1p5%4x3s2k6a6M7i4W2d9y4i4W2z5k6#2)9K6c8Y4m8%4k6q4)9K6c8o6p5H3x3U0b7`.

想要一款工具,能够像jar包一样,拷到哪里都能用;想要一款工具,可以随时调试代码,调整输入输出。要支持Python编程,有界面,支持插件。并且,添加和管理插件很容易,插件之间可以互相配合。没有找到满意的,然后,打造了pyoneGUI。

自pyoneGUI_v2.0起,构建了一个绿色版的Python环境,并安装了requests、pwntools等常用库。在此基础上,开发了一套很有特色的插件机制,允许便捷地编写Python代码并将其集成到图形界面菜单中。该项目旨在帮助高效管理编程灵感,持续积累技术经验,并通过插件模块快速复用提升效率。

图片描述
图片描述
图片描述

图片描述

例如

图片描述

注:当前阶段,pyoneGUI的特色不在插件上,而是在插件管理的机制上。

每个插件都是Plugin类的子类,只要在plugin目录下随便建一个py文件,写个Plugin子类就是一个新的插件。

“字典去重”这个插件是在demo.py中实现的,其类名为RemoveDuplicates(唯一),menu和name分别是菜单名称和插件名称,这两个值决定了插件的显示名称。

图片描述

“json格式化”这个插件是在demo.py中实现的

“场景编排demo”这个插件是在laboratory.py中实现的,这是一个实验性质的插件,其展示了场景编排能力,可以把其他的插件组合在一起,按照新的逻辑处理任务。

图片描述

“命令行”这个插件是在laboratory.py中实现的,可以执行系统命令。这是一个有自定义界面的插件,其type类型为laboratory,通过buildWindow函数绘制了插件界面,并返回了self.output_text,点击“开始”的时候执行onStart函数,点击“查看帮助文档”的时候执行showHelp函数。

图片描述

“http.server”这个插件是在laboratory.py中实现的,点击开始按钮会启动一个简单的HTTP服务,可以用来下载文件。

图片描述

"HTTP访问"这个插件是在poc.py中实现的,可以访问指定的URL地址并返回结果,是PoC功能的一个例子。这个插件没有定义buildWindow函数,而是使用的父类Plugin默认的buildWindow函数完成的界面绘制。

图片描述

[!] 欢迎使用和反馈意见,尤其是不需要大的环境依赖就能实现的有意思的功能点
下载链接:1e0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4k6i4c8y4P5Y4u0J5d9p5N6F1N6@1p5%4x3s2k6a6M7i4W2d9y4i4W2z5k6#2)9K6c8Y4m8%4k6q4)9K6c8o6p5H3x3U0b7`.

发布了了pyoneGUI_v1.0.3版本,添加了pyinstaller解包、pyc反编译、反弹Shell生成这3个插件,python环境为python-3.7.3-x86

图片描述

图片描述

图片描述

框架代码做了微调,添加了-lp参数和-fp参数,可以在命令行上指定插件路径,也可以指定pyoneGUI运行后第一个运行的插件,进而选择默认插件视图,并且可以把pyoneGUI当做pyone直接在命令行中运行python脚本。内置的python环境为python-3.7.3-x86.exe

用法举例

封装了fscan程序,使用"pyoneGUI.exe -fp Fscan"命令可以默认进入fscan插件视图,以图形化的方法调用fscan程序进行主机存活探测、端口扫描、漏洞扫描、密码爆破。pyoneGUI在这个功能里主要是做一个壳,可以方便的生成一些fscan调用命令,如果有其他常用场景的命令,也很容易添加和修改,主打一个“即改即用”。

图片描述

发布了pyoneGUI_v2.0.0版本,最大的变化是主版本放弃了pyinstaller打包,而是维护并直接打包了整个绿色版Python环境。这意味着主版本放弃了小巧便携,为什么要牺牲这个特性,主要是在打包pwntools库的时候很麻烦,而且以后如果要打包别的强大的库也可能会很麻烦,既然Python本身就比较绿色,那还用pyinstaller打包做什么,直接维护好绿色版Python环境不就好了吗。不过,如果有什么插件是比较有特色的,后面可能会用pyinstaller单独打包,毕竟pyoneGUI中的one本意就是一个程序的意思,小巧便携也是一个好的特性,如果主版本不支持,那就在特别版里支持吧。

随v2.0.0版本一起发布的插件有加载文件为Hex编码、Hex转C数组、Hex转Python数组,这些插件依然是所见即所得,即改即用的,另外还添加了一个插件名为“pwntools模板1”,可以方便的利用pwntools库生成exp代码,然后通过“代码执行->执行Python代码(exec执行)”执行代码,下图是这个插件的一个简单使用说明。

图片描述

另外,因为摆脱了pyinstaller打包,直接使用了整个绿色版Python环境,所以这个环境本身也是个很好用的工具。

其他说明:
1.绿色版Python环境使用的是Python3.7.3-amd64,经过测试,pyoneGUI_v2.0.0支持Win7-64位、Win10、Win11,如果要在Linux下运行,理论上应该不会太难,可以自行尝试,如果需要知道使用了哪些依赖库,版本又是什么,可以参考本文正文相关部分;
2.因为发布时删除了.pyc文件,所以初次运行某个插件的时候可能会稍微卡一下,但是问题不大,后面就好了;
3.虽然主版本放弃了小巧便携这个特性,但依然绿色,路径无关。

添加了“?帮助”功能,使得更方便的查看插件、修改插件。
另外,加了些小插件,如哈希算法识别、系统管理等。

图片描述
图片描述
图片描述

强化了绿色属性,甚至可以直接使用pip。

注意:可以使用pip进行包管理,但是最好不要更新或者重装pip,否则会导致绿色属性降低。

图片描述
图片描述

集成了微信的OCR模块,以此说明pyoneGUI的能力,让Python项目像jar包一样易部署,但保留Python原本的特点。

图片描述
图片描述

这些版本下有效,其他版本未测试(2025.4.29更新)
1.Win10下正常,Win7下报错
Python: 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
tkinter.TkVersion: 8.6
pyinstaller: 6.2.0
 
2.Win11下正常,Win10下正常,Win7_64位下正常
Python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
tkinter.TkVersion: 8.6
pyinstaller: 5.13.2
 
3.Win11下正常,Win10下正常,Win7_64位下正常
Python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]  (目前主要以此版本的Python为基础进行开发和测试,如 pyoneGUI_v2.1.0
tkinter.TkVersion: 8.6
这些版本下有效,其他版本未测试(2025.4.29更新)
1.Win10下正常,Win7下报错
Python: 3.12.0 (tags/v3.12.0:0fb18b0, Oct  2 2023, 13:03:39) [MSC v.1935 64 bit (AMD64)]
tkinter.TkVersion: 8.6
pyinstaller: 6.2.0
 
2.Win11下正常,Win10下正常,Win7_64位下正常
Python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
tkinter.TkVersion: 8.6
pyinstaller: 5.13.2
 
3.Win11下正常,Win10下正常,Win7_64位下正常
Python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]  (目前主要以此版本的Python为基础进行开发和测试,如 pyoneGUI_v2.1.0
tkinter.TkVersion: 8.6
查看python版本
import sys
print(sys.version)
 
查看操作系统版本
import platform
print(platform.platform())
 
查看依赖库信息
import sys
for module_name in sys.modules:
    print(module_name)
 
查看requests库的版本
import requests
print(requests.__version__)
查看python版本
import sys
print(sys.version)
 
查看操作系统版本
import platform
print(platform.platform())
 
查看依赖库信息
import sys
for module_name in sys.modules:
    print(module_name)
 
查看requests库的版本
import requests
print(requests.__version__)
class RemoveDuplicates(Plugin):
    menu="文本处理"
    name="字典去重"
    def run(self, text):
        if not text:
            return ""
        words = text.strip().replace("\r\n", "\n").split("\n")
        return "\n".join(list(dict.fromkeys(words)))
class RemoveDuplicates(Plugin):
    menu="文本处理"
    name="字典去重"
    def run(self, text):
        if not text:
            return ""
        words = text.strip().replace("\r\n", "\n").split("\n")
        return "\n".join(list(dict.fromkeys(words)))
class JsonView(Plugin):
    menu="文本处理"
    name="json格式化"
    def run(self, text):
        if not text:
            return ""
        j=json.loads(text)
        #formatted_json = json.dumps(j, indent=4)
        formatted_json = json.dumps(j, indent=4, ensure_ascii=False)
        return formatted_json
class JsonView(Plugin):
    menu="文本处理"
    name="json格式化"
    def run(self, text):
        if not text:
            return ""
        j=json.loads(text)
        #formatted_json = json.dumps(j, indent=4)
        formatted_json = json.dumps(j, indent=4, ensure_ascii=False)
        return formatted_json
class WorkflowOrchestration(Plugin):
    menu="实验室"
    name="场景编排demo"
    type="text"
    def run(self, text):
        tasks=[]
        tasks+=[RemoveDuplicates]
        tasks+=[ToLower]
        tasks+=[SortLines]
         
        for _ in tasks:
            text=_().run(text)
         
        return text
class WorkflowOrchestration(Plugin):
    menu="实验室"
    name="场景编排demo"
    type="text"
    def run(self, text):
        tasks=[]
        tasks+=[RemoveDuplicates]
        tasks+=[ToLower]
        tasks+=[SortLines]
         
        for _ in tasks:
            text=_().run(text)
         
        return text
class CMD(Plugin):
    menu="实验室"
    name="命令行"
    type="laboratory"
    def buildWindow(self):
        tab_laboratory = self.frame_args["tab_laboratory"]
        此处省略一些画界面的代码
 
        # 设置options
        self.options=Options()
        dic={"Name":"CMD", "Current Setting":"", "Required":"yes", "Description":"执行的命令", "obj":cmd_entry }
        self.options.append(dic)
        return self.output_text
         
    def onStart(self, event=None):
        options=self.getOptions()
        cmd=options["CMD"]
         
        self.log(f"[+] {cmd}\n")
        self.executeCommand(cmd, logfunc=self.log)
        # TODO:添加自定义命令,并使自定义命令和系统命令都支持管道
 
    def onStop(self, event=None):
        self.log("[*] onStop\n")
             
    def showHelp(self, event=None):
        super().showHelp()
        help="功能上相当于system(CMD)\n\n"\
             "Windows下常用命令:\n"\
             "netstat -ano | findstr LISTEN\t\t\t查看监听端口\n"\
             "\n"
        self.log(help)
class CMD(Plugin):
    menu="实验室"
    name="命令行"
    type="laboratory"
    def buildWindow(self):
        tab_laboratory = self.frame_args["tab_laboratory"]
        此处省略一些画界面的代码
 
        # 设置options
        self.options=Options()
        dic={"Name":"CMD", "Current Setting":"", "Required":"yes", "Description":"执行的命令", "obj":cmd_entry }
        self.options.append(dic)
        return self.output_text
         
    def onStart(self, event=None):
        options=self.getOptions()
        cmd=options["CMD"]
         
        self.log(f"[+] {cmd}\n")
        self.executeCommand(cmd, logfunc=self.log)
        # TODO:添加自定义命令,并使自定义命令和系统命令都支持管道
 
    def onStop(self, event=None):
        self.log("[*] onStop\n")
             
    def showHelp(self, event=None):
        super().showHelp()
        help="功能上相当于system(CMD)\n\n"\
             "Windows下常用命令:\n"\
             "netstat -ano | findstr LISTEN\t\t\t查看监听端口\n"\
             "\n"
        self.log(help)
class HttpServer(Plugin):
    menu="实验室"
    name="http.server"
    type="laboratory"
    server=None
    def buildWindow(self):
        tab_laboratory = self.frame_args["tab_laboratory"]
        此处省略一些画界面的代码
 
        # 设置options
        self.options=Options()
        dic={"Name":"IP", "Current Setting":"", "Required":"yes", "Description":"监听网卡的IP", "obj":ip_entry }
        self.options.append(dic)
        dic={"Name":"PORT", "Current Setting":"", "Required":"yes", "Description":"监听端口", "obj":port_entry }
        self.options.append(dic)
         
        #MyHandler里会用
        PluginGlobalStorage[self.__class__.__name__]={"class_obj":self}
        return self.output_text
         
    def onStart(self, event=None):
        options=self.getOptions()
        IP=options["IP"]
        PORT=int(options["PORT"])
         
        class MyHandler(http.server.SimpleHTTPRequestHandler):
            def log_message(self, format, *args):
                msg=format%args
                obj=PluginGlobalStorage["HttpServer"]["class_obj"]
                obj.log(msg+"\n")
                 
        def fn():
            with socketserver.TCPServer((IP, PORT), MyHandler) as self.server:
                self.log(f"监听于{IP}:{PORT}\n")
                self.server.serve_forever()
                 
        self.log("[+] 启动Server\n")
        thread = threading.Thread(target=fn)
        thread.start()
 
    def onStop(self, event=None):
        if self.server:
            self.log("[+] 关闭Server\n")
            self.server.shutdown()
            self.server=None
        else:
            self.log("[*] Server未启动\n")
             
    def showHelp(self, event=None):
        super().showHelp()
        self.log("相当于在python3下调用:\n")
        self.log("python -m http.server port\n\n")
        self.log("或者相当于在python2.7下调用:\n")
        self.log("python -m SimpleHTTPServer port\n\n")
class HttpServer(Plugin):
    menu="实验室"
    name="http.server"
    type="laboratory"
    server=None
    def buildWindow(self):
        tab_laboratory = self.frame_args["tab_laboratory"]
        此处省略一些画界面的代码
 
        # 设置options
        self.options=Options()
        dic={"Name":"IP", "Current Setting":"", "Required":"yes", "Description":"监听网卡的IP", "obj":ip_entry }
        self.options.append(dic)
        dic={"Name":"PORT", "Current Setting":"", "Required":"yes", "Description":"监听端口", "obj":port_entry }
        self.options.append(dic)
         
        #MyHandler里会用
        PluginGlobalStorage[self.__class__.__name__]={"class_obj":self}
        return self.output_text
         
    def onStart(self, event=None):
        options=self.getOptions()
        IP=options["IP"]
        PORT=int(options["PORT"])
         
        class MyHandler(http.server.SimpleHTTPRequestHandler):
            def log_message(self, format, *args):
                msg=format%args
                obj=PluginGlobalStorage["HttpServer"]["class_obj"]
                obj.log(msg+"\n")
                 
        def fn():
            with socketserver.TCPServer((IP, PORT), MyHandler) as self.server:
                self.log(f"监听于{IP}:{PORT}\n")
                self.server.serve_forever()
                 
        self.log("[+] 启动Server\n")
        thread = threading.Thread(target=fn)
        thread.start()
 
    def onStop(self, event=None):

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2025-5-25 23:56 被Jtian编辑 ,原因:
上传的附件:
收藏
免费 13
支持
分享
最新回复 (14)
雪    币: 3512
活跃值: (2224)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
测试可用
2024-1-2 04:18
0
雪    币: 5621
活跃值: (31896)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-1-2 10:12
1
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
支持
2024-1-2 12:15
0
雪    币: 3254
活跃值: (3114)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-1-2 22:46
0
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
2024.1.4更新
发布了了pyoneGUI_v1.0.3版本,添加了pyinstaller解包、pyc反编译、反弹Shell生成这3个插件,python环境为python-3.7.3-x86
2024-1-4 14:32
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
觉得有些功能很好
2024-1-14 08:04
1
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8

2024.1.15更新
发布了了pyoneGUI_v1.1.0版本,框架代码做了微调,添加了-lp参数和-fp参数,可以在命令行上指定插件路径,也可以指定pyoneGUI运行后第一个运行的插件,进而选择默认插件视图,并且可以把pyoneGUI当做pyone直接在命令行中运行python脚本。内置的python环境为python-3.7.3-x86.exe
下载链接:6c5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4k6i4c8y4P5Y4u0J5d9p5N6F1N6@1p5%4x3s2k6a6M7i4W2d9y4i4W2z5k6#2)9K6c8Y4m8%4k6q4)9K6c8o6p5H3x3U0b7`.

最后于 2024-1-15 12:34 被Jtian编辑 ,原因:
2024-1-15 10:15
0
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9

2024.1.21更新
发布了pyoneGUI_v1.1.1版本,封装了fscan程序,使用"pyoneGUI.exe -fp Fscan"命令可以默认进入fscan插件视图,以图形化的方法调用fscan程序进行主机存活探测、端口扫描、漏洞扫描、密码爆破。pyoneGUI在这个功能里主要是做一个壳,可以方便的生成一些fscan调用命令,如果有其他常用场景的命令,也很容易添加和修改,主打一个“所见即所得,即改即用”。

最后于 2024-1-21 17:30 被Jtian编辑 ,原因:
2024-1-21 17:29
0
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10

2024.2.3更新
发布了pyoneGUI_v2.0.0版本,最大的变化是主版本放弃了pyinstaller打包,而是维护并直接打包了整个绿色版Python环境。这意味着主版本放弃了小巧便携,为什么要牺牲这个特性,主要是在打包pwntools库的时候很麻烦,而且以后如果要打包别的强大的库也可能会很麻烦,既然Python本身就比较绿色,那还用pyinstaller打包做什么,直接维护好绿色版Python环境不就好了吗。不过,如果有什么插件是比较有特色的,后面可能会用pyinstaller单独打包,毕竟pyoneGUI中的one本意就是一个程序的意思,小巧便携也是一个好的特性,如果主版本不支持,那就在特别版里支持吧。

最后于 2024-2-3 17:31 被Jtian编辑 ,原因:
2024-2-3 17:29
0
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
感谢分享
2024-2-20 12:36
0
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
2025.4.29更新
添加了“?帮助”功能,使得更方便的查看插件、修改插件。
另外,加了些小插件,如哈希算法识别、系统管理等。
2025-4-29 20:29
0
雪    币: 15661
活跃值: (18963)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
13
感觉可以作为SDL的安全左移工具库,先fork一份,后面如果有开发的话,我再提交吧
2025-4-29 21:07
1
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
14
2025.5.16更新
强化了绿色属性,甚至可以直接使用pip。
2025-5-16 22:42
0
雪    币: 2248
活跃值: (4681)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
15
2025.5.25更新
集成了微信的OCR模块,以此说明pyoneGUI的能力,让Python项目像jar包一样易部署,但保留Python原本的特点。
2025-5-25 23:57
0
游客
登录 | 注册 方可回帖
返回