feat(spoof): пер-аккаунтный спуф с тумблером и прокидыванием в веб-аппы

- спуф теперь свой на каждый аккаунт, вмораживается при входе
- тумблер вкл/выкл в настройках (по умолчанию выключен)
- новый аккаунт добавляется со своим включённым спуфом (другое устройство)
- UA спуфа прокинут в Сферум, Цифровой ID (вебвью + HTTP)
- генерация выбирает Android или iOS; iOS отдаёт deviceType IOS
- экран спуфа показывает текущую личность, а не свежесгенерированную
This commit is contained in:
klockky
2026-06-20 15:15:09 +00:00
parent 62b5d1b9f3
commit d055de268b
14 changed files with 535 additions and 150 deletions
+75
View File
@@ -0,0 +1,75 @@
class SpoofProfile {
final bool enabled;
final String deviceName;
final String osVersion;
final String screen;
final String timezone;
final String locale;
final String deviceLocale;
final String deviceId;
final String deviceType;
final String arch;
final String appVersion;
final int buildNumber;
final String pushDeviceType;
final String instanceId;
final int? clientSessionId;
final String userAgent;
const SpoofProfile({
required this.enabled,
this.deviceName = '',
this.osVersion = '',
this.screen = '',
this.timezone = '',
this.locale = '',
this.deviceLocale = '',
this.deviceId = '',
this.deviceType = 'ANDROID',
this.arch = 'arm64-v8a',
this.appVersion = '',
this.buildNumber = 0,
this.pushDeviceType = 'GCM',
this.instanceId = '',
this.clientSessionId,
this.userAgent = '',
});
Map<String, dynamic> toJson() => {
'enabled': enabled,
'device_name': deviceName,
'os_version': osVersion,
'screen': screen,
'timezone': timezone,
'locale': locale,
'device_locale': deviceLocale,
'device_id': deviceId,
'device_type': deviceType,
'arch': arch,
'app_version': appVersion,
'build_number': buildNumber,
'push_device_type': pushDeviceType,
'instance_id': instanceId,
'client_session_id': clientSessionId,
'user_agent': userAgent,
};
factory SpoofProfile.fromJson(Map<String, dynamic> json) => SpoofProfile(
enabled: json['enabled'] as bool? ?? false,
deviceName: json['device_name'] as String? ?? '',
osVersion: json['os_version'] as String? ?? '',
screen: json['screen'] as String? ?? '',
timezone: json['timezone'] as String? ?? '',
locale: json['locale'] as String? ?? '',
deviceLocale: json['device_locale'] as String? ?? '',
deviceId: json['device_id'] as String? ?? '',
deviceType: json['device_type'] as String? ?? 'ANDROID',
arch: json['arch'] as String? ?? 'arm64-v8a',
appVersion: json['app_version'] as String? ?? '',
buildNumber: (json['build_number'] as num?)?.toInt() ?? 0,
pushDeviceType: json['push_device_type'] as String? ?? 'GCM',
instanceId: json['instance_id'] as String? ?? '',
clientSessionId: (json['client_session_id'] as num?)?.toInt(),
userAgent: json['user_agent'] as String? ?? '',
);
}