Custom-client: сервер виден+залочен + preset-пароль (Win+Android)
preconfigure.sh генерит src/custom_client.json (override-settings server/relay/key + verification-method + disable-change-permanent-password; preset-пароль salt+00b64(sha256(pw+salt)) в HARD_SETTINGS) и патчит common.rs встроенным неподписанным загрузчиком (обход ED25519-подписи RustDesk). Пароль из RUSTDESK_PRESET_PASSWORD, plaintext не хранится. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -92,3 +92,21 @@ Rust 1.75 (rustup override в клоне) · MSVC 14.44 из vcvars64.
|
||||
## Секреты в CI (gitea Actions)
|
||||
`RUSTDESK_SERVER`, `RUSTDESK_PUB_KEY`, (опц.) `RUSTDESK_API_SERVER`. Префикс имён — не `GITHUB_`/`GITEA_`
|
||||
(зарезервированы), при необходимости `GT_`.
|
||||
|
||||
## Custom-client: сервер виден+залочен + preset-пароль
|
||||
Требование: сервер показан в Настройках и НЕизменяем + вшитый постоянный пароль (+ временный).
|
||||
Механизм RustDesk (изучен по коду 1.4.9):
|
||||
- `src/common.rs::load_custom_client()` (зовётся из core_main) читает `custom.txt` рядом с exe —
|
||||
base64 + **ED25519-подпись** по вшитому pubkey `5Qbwsde3…` (приватник у генератора RustDesk Pro, у нас нет).
|
||||
- Он заполняет `OVERWRITE_SETTINGS` (override — залоченные опции), `DEFAULT_SETTINGS`, `BUILTIN_SETTINGS` (локи),
|
||||
`HARD_SETTINGS` (top-level, вкл. preset-пароль).
|
||||
- `custom-rendezvous-server`/`relay-server`/`key`/`api-server`/`verification-method` ∈ `KEYS_SETTINGS` →
|
||||
в `override-settings` показываются И залочены. `disable-change-permanent-password` ∈ BUILDIN.
|
||||
- Preset-пароль (`hbb_common/src/config/permanent_password.rs`): `HARD_SETTINGS.password="00"+base64(sha256(pw+salt))`,
|
||||
`HARD_SETTINGS.salt=<любая непустая соль>`. Формат «00»+b64(h1), h1=sha256(pw+salt)[..32].
|
||||
|
||||
Наша реализация (`preconfigure.sh`, вкл. по умолчанию; выкл. `RUSTDESK_NO_CUSTOM_CLIENT=1`):
|
||||
- Пишет `src/custom_client.json` (override-settings + password/salt из `RUSTDESK_PRESET_PASSWORD`).
|
||||
- Патчит `common.rs`: добавляет `read_custom_client_unsigned()` (парсит JSON БЕЗ подписи, тот же apply-код) +
|
||||
`include_str!("custom_client.json")` в начало `load_custom_client()`. Работает Windows+Android (без внешнего файла).
|
||||
- Пароль — только из env/secret `RUSTDESK_PRESET_PASSWORD`, солёный хэш пишется в gitignored-клон, plaintext нигде.
|
||||
|
||||
Reference in New Issue
Block a user