Add firmware downgrade suggestions for BE3600 routers with multilingual support

Co-authored-by: longzheng268 <38132402+longzheng268@users.noreply.github.com>
pull/116/head
copilot-swe-agent[bot] 1 month ago
parent 6127f23757
commit 14e8e97fff

@ -7,6 +7,8 @@ import time
import xmir_base
from gateway import *
import i18n
import lang_config
gw = Gateway(detect_device = False, detect_ssh = False)
@ -61,15 +63,64 @@ if True:
'connect5', # smartcontroller
'connect7', # get_icon
]
exploit_worked = False
exploit_warnings = []
for mod_name in exp_modules:
try:
import_module(mod_name, gw)
exploit_worked = True
break # Ok
except ExploitFixed as e:
print('WARN:', str(e))
exploit_warnings.append(str(e))
continue # try next module
except ExploitNotWorked as e:
print('WARN:', str(e))
exploit_warnings.append(str(e))
continue # try next module
except Exception:
raise
# Show firmware downgrade suggestion if all exploits failed
if not exploit_worked and gw.device_name in ['RD15', 'RN06']: # BE3600 variants
current_lang = lang_config.get_language() or 'en'
print()
print("=" * 60)
print(i18n.get_translation(current_lang, 'messages', 'firmware_downgrade_title'))
print()
print(i18n.get_translation(current_lang, 'messages', 'firmware_downgrade_be3600'))
print()
# Show current firmware version if available
if gw.rom_version:
if current_lang == 'zh':
print(f"当前固件版本: {gw.rom_version}")
print("建议降级到: 1.0.68 或更旧版本")
elif current_lang == 'ru':
print(f"Текущая версия прошивки: {gw.rom_version}")
print("Рекомендуемое понижение до: 1.0.68 или старше")
else:
print(f"Current firmware version: {gw.rom_version}")
print("Recommended downgrade to: 1.0.68 or older")
print()
print(i18n.get_translation(current_lang, 'messages', 'firmware_downgrade_tutorial'))
print()
print(i18n.get_translation(current_lang, 'messages', 'firmware_downgrade_tool'))
print("=" * 60)
print()
elif not exploit_worked:
current_lang = lang_config.get_language() or 'en'
print()
print("=" * 60)
print(i18n.get_translation(current_lang, 'messages', 'exploit_failed_title'))
print()
print(i18n.get_translation(current_lang, 'messages', 'exploit_failed_message'))
print()
print(i18n.get_translation(current_lang, 'messages', 'exploit_failed_suggestion'))
print("=" * 60)
print()

@ -1 +1,38 @@
English:
In this folder, you should put the firmware for flashing.
IMPORTANT: If you encounter exploit warnings like:
- "Exploits arn_switch/start_binding/set_mac_filter not working!!!"
- "Exploits Smartcontroller are not usable (hackCheck:3)"
- "Exploit get_icon not working!!! (API not founded)"
For Xiaomi BE3600 (RD15) routers, please downgrade to firmware version 1.0.68 or older.
You can use the Xiaomi Router Repair Tool for firmware downgrade.
Firmware downgrade tutorial: https://github.com/uyez/lyq/releases/tag/be3600
中文:
此文件夹中应放置用于刷写的固件。
重要提示:如果您遇到漏洞利用警告,如:
- "漏洞利用 arn_switch/start_binding/set_mac_filter 不工作!!!"
- "漏洞利用 Smartcontroller 不可用 (hackCheck:3)"
- "漏洞利用 get_icon 不工作!!! (API未找到)"
对于小米BE3600 (RD15)路由器请降级到固件版本1.0.68或更旧版本。
您可以使用小米路由器修复工具进行固件降级。
固件降级教程https://github.com/uyez/lyq/releases/tag/be3600
Русский:
В эту папку следует помещать прошивки для прошивки.
ВАЖНО: Если вы столкнулись с предупреждениями об эксплойтах:
- "Эксплойты arn_switch/start_binding/set_mac_filter не работают!!!"
- "Эксплойты Smartcontroller недоступны (hackCheck:3)"
- "Эксплойт get_icon не работает!!! (API не найден)"
Для роутеров Xiaomi BE3600 (RD15), пожалуйста, понизьте версию прошивки до 1.0.68 или старше.
Вы можете использовать инструмент восстановления роутера Xiaomi для понижения версии прошивки.
Руководство по понижению версии прошивки: https://github.com/uyez/lyq/releases/tag/be3600

@ -40,6 +40,15 @@ TRANSLATIONS = {
'language_menu': 'Language / 语言 / Язык',
'language_prompt': 'Select language [1-English, 2-中文, 3-Русский]: ',
'bootloader_choice': 'Select bootloader [1-Breed, 2-U-Boot]: '
},
'messages': {
'firmware_downgrade_title': 'FIRMWARE DOWNGRADE SUGGESTION:',
'firmware_downgrade_be3600': 'If exploits are not working on your BE3600 router, please\ndowngrade to firmware version 1.0.68 or older.',
'firmware_downgrade_tutorial': 'Firmware downgrade tutorial:\nhttps://github.com/uyez/lyq/releases/tag/be3600',
'firmware_downgrade_tool': 'You can use the Xiaomi Router Repair Tool for downgrade.',
'exploit_failed_title': 'EXPLOIT FAILED:',
'exploit_failed_message': 'All available exploits failed to work on this device.\nThis may be due to newer firmware versions that have\npatched the vulnerabilities.',
'exploit_failed_suggestion': 'Consider checking for alternative firmware versions\nor contact the community for device-specific solutions.'
}
},
'zh': {
@ -77,6 +86,15 @@ TRANSLATIONS = {
'language_menu': 'Language / 语言 / Язык',
'language_prompt': '选择语言 [1-English, 2-中文, 3-Русский]: ',
'bootloader_choice': '选择引导程序 [1-Breed, 2-U-Boot]: '
},
'messages': {
'firmware_downgrade_title': '固件降级建议:',
'firmware_downgrade_be3600': '如果漏洞利用在您的BE3600路由器上不工作\n降级到固件版本1.0.68或更旧版本。',
'firmware_downgrade_tutorial': '固件降级教程:\nhttps://github.com/uyez/lyq/releases/tag/be3600',
'firmware_downgrade_tool': '您可以使用小米路由器修复工具进行降级。',
'exploit_failed_title': '漏洞利用失败:',
'exploit_failed_message': '所有可用的漏洞利用都无法在此设备上工作。\n这可能是由于较新的固件版本已修补了\n这些漏洞。',
'exploit_failed_suggestion': '请考虑检查替代固件版本\n或联系社区获取设备特定解决方案。'
}
},
'ru': {
@ -114,16 +132,43 @@ TRANSLATIONS = {
'language_menu': 'Language / 语言 / Язык',
'language_prompt': 'Выберите язык [1-English, 2-中文, 3-Русский]: ',
'bootloader_choice': 'Выберите загрузчик [1-Breed, 2-U-Boot]: '
},
'messages': {
'firmware_downgrade_title': 'ПРЕДЛОЖЕНИЕ ПОНИЖЕНИЯ ВЕРСИИ ПРОШИВКИ:',
'firmware_downgrade_be3600': 'Если эксплойты не работают на вашем роутере BE3600, пожалуйста\nпонизьте версию прошивки до 1.0.68 или старше.',
'firmware_downgrade_tutorial': 'Руководство по понижению версии прошивки:\nhttps://github.com/uyez/lyq/releases/tag/be3600',
'firmware_downgrade_tool': 'Вы можете использовать инструмент восстановления роутера Xiaomi для понижения версии.',
'exploit_failed_title': 'ЭКСПЛОЙТ НЕ СРАБОТАЛ:',
'exploit_failed_message': 'Все доступные эксплойты не смогли работать на этом устройстве.\nЭто может быть связано с более новыми версиями прошивки,\nкоторые исправили уязвимости.',
'exploit_failed_suggestion': 'Рассмотрите возможность проверки альтернативных версий прошивки\nили обратитесь к сообществу за решениями для конкретного устройства.'
}
}
}
def get_translation(lang, key, *args):
def get_translation(lang, key, subkey=None, *args):
"""Get translated text for given language and key"""
if lang not in TRANSLATIONS:
lang = 'en' # fallback to English
trans = TRANSLATIONS[lang]
# Handle nested dictionary lookup
if subkey:
if key in trans and isinstance(trans[key], dict) and subkey in trans[key]:
text = trans[key][subkey]
if args:
return text.format(*args)
return text
# fallback to English
elif lang != 'en' and key in TRANSLATIONS['en'] and isinstance(TRANSLATIONS['en'][key], dict) and subkey in TRANSLATIONS['en'][key]:
text = TRANSLATIONS['en'][key][subkey]
if args:
return text.format(*args)
return text
else:
return f"{key}.{subkey}" # fallback key
# Handle normal key lookup
if key in trans:
if isinstance(trans[key], list):
return trans[key]
@ -139,10 +184,13 @@ def get_translation(lang, key, *args):
else:
# fallback to English only if we're not already using English
if lang != 'en':
return get_translation('en', key, *args)
return get_translation('en', key, subkey, *args)
else:
# If key not found even in English, return a default message
return f"[Missing translation: {key}]"
if subkey:
return f"[Missing translation: {key}.{subkey}]"
else:
return f"[Missing translation: {key}]"
def get_supported_languages():
"""Get list of supported language codes"""

Loading…
Cancel
Save