解小黑屋第一版 + 爬UID功能

This commit is contained in:
Remik1r3n
2025-02-07 16:57:41 +08:00
parent 486da8a4c7
commit 5c7414d173
4 changed files with 66 additions and 46 deletions

View File

@@ -10,15 +10,20 @@ from loguru import logger
import time
from datetime import datetime
def isUserLoggedIn(userId):
return True
return json.loads(apiGetUserPreview(userId))['isLogin']
isLogin = json.loads(apiGetUserPreview(userId))['isLogin']
logger.info(f"用户 {userId} 是否登录: {isLogin}")
return isLogin
def getUNIXTime(mmddhhmmss, year=2025):
# 解析 MMDDHHMMSS 格式的时间,返回 Unix 时间戳
def getMaimaiUNIXTime(mmddhhmmss, year=2025):
"""
解析用户输入的 MMDDHHMMSS 格式的时间,返回 Unix 时间戳
时间会被推后一个小时,因为舞萌貌似是 UTC+9
"""
try:
date_time_str = f"{year}{mmddhhmmss}"
#date_time_str = f"{year}{mmddhhmmss}"
# 舞萌需要把小时按往后推一个小时来计算,加上一个小时
date_time_str = f"{year}{mmddhhmmss[:4]}{int(mmddhhmmss[4:6])+1:02}{mmddhhmmss[6:]}"
date_time_obj = datetime.strptime(date_time_str, '%Y%m%d%H%M%S')
# 将 datetime 对象转换为 Unix 时间戳
unix_timestamp = int(time.mktime(date_time_obj.timetuple()))
@@ -29,27 +34,27 @@ def getUNIXTime(mmddhhmmss, year=2025):
return None
def logOut(userId, Timestamp):
DEBUGMODE = True
if DEBUGMODE:
# 用于调试的时间戳
debugRealTimestamp = 1738663945
logger.info(f"调试模式: 传入的时间戳和调试时间戳之差: {Timestamp - debugRealTimestamp}")
time.sleep(0.2)
return True
"""极其简单的登出实现,成功返回 True失败返回 False
注意:不会检查用户是否真的登出了,只会尝试登出"""
try:
result = apiLogout(Timestamp, userId)
loadedResult = json.loads(result)
if loadedResult['returnCode'] == 1:
if apiLogout(Timestamp, userId)['returnCode'] == 1:
# 成功送出了登出请求
logger.debug(f"已成功尝试登出用户 {userId}")
return True
except:
logger.error(f"登出用户 {userId} 的时候发生了错误")
return False
def isCorrectTimestamp(timestamp, userId):
'''暴力的检查时间戳是否正确'''
logoutResult = logOut(userId, timestamp)
if not logoutResult:
'''
动作:给定一个时间戳,用它尝试登出用户,然后检查用户是否成功登出。
如果用户成功登出,返回 True否则返回 False。
'''
if not logOut(userId, timestamp):
logger.error(f"用时间戳 {timestamp} 登出用户 {userId} 的时候发生了错误")
return False
isLoggedOut = not isUserLoggedIn(userId)
logger.debug(f"时间戳 {timestamp} 是否正确: {isLoggedOut}")
return isLoggedOut
def findCorrectTimestamp(timestamp, userId, max_attempts=1200):
@@ -59,28 +64,32 @@ def findCorrectTimestamp(timestamp, userId, max_attempts=1200):
while attempts < max_attempts:
# 尝试当前时间戳
if isCorrectTimestamp(timestamp, userId):
print(f"Found correct timestamp: {timestamp}")
return timestamp
currentTryTimestamp = timestamp
if isCorrectTimestamp(currentTryTimestamp, userId):
logger.info(f"正确的时间戳: {currentTryTimestamp}")
return currentTryTimestamp
# 增加偏移量尝试
if isCorrectTimestamp(timestamp + offset, userId):
print(f"Found correct timestamp: {timestamp + offset}")
return timestamp + offset
currentTryTimestamp = timestamp + offset
if isCorrectTimestamp(currentTryTimestamp, userId):
logger.info(f"正确的时间戳(在给定时间以后): {currentTryTimestamp}")
return currentTryTimestamp
# 减少偏移量尝试
if isCorrectTimestamp(timestamp - offset, userId):
print(f"Found correct timestamp: {timestamp - offset}")
return timestamp - offset
currentTryTimestamp = timestamp - offset
if isCorrectTimestamp(currentTryTimestamp, userId):
logger.info(f"正确的时间戳(在给定时间以前): {currentTryTimestamp}")
return currentTryTimestamp
# 增加尝试次数和偏移量
attempts += 2
offset += 1
print("尝试多次后未找到正确时间戳")
logger.error(f"无法找到正确时间戳,尝试次数超过了 {max_attempts}")
return None
human_time = "0204061500"
beginTimestamp = getUNIXTime(human_time)
print(f"我们将开始用这个时间戳开始尝试: {beginTimestamp}")
correctTimestamp = findCorrectTimestamp(beginTimestamp, testUid)
if __name__ == "__main__":
human_time = "0207155500"
beginTimestamp = getMaimaiUNIXTime(human_time)
print(f"我们将开始用这个时间戳开始尝试: {beginTimestamp}")
correctTimestamp = findCorrectTimestamp(beginTimestamp, testUid2)