906K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4M7%4c8G2L8X3f1H3x3o6p5I4i4K6u0r3M7s2W2G2L8X3g2s2g2f1V1`.
绿色灵活,路径无关,插件自由,即改即用,所见即所得。助你轻松记录灵感,沉淀知识,并快速复用。
pyoneGUI网盘下载
下载链接:527K9s2c8@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函数完成的界面绘制。

[!] 欢迎使用和反馈意见,尤其是不需要大的环境依赖就能实现的有意思的功能点
下载链接:33aK9s2c8@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, 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, 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"]
此处省略一些画界面的代码
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)
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"]
此处省略一些画界面的代码
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)
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"]
此处省略一些画界面的代码
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)
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"]
此处省略一些画界面的代码
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)
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):
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-5-25 23:56
被Jtian编辑
,原因: