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

[!] 欢迎使用和反馈意见,尤其是不需要大的环境依赖就能实现的有意思的功能点
下载链接:f8dK9s2c8@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
):
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2025-5-25 23:56
被Jtian编辑
,原因: