feat(spoof): обновил фингерпринт и версию до 26.19.2 + миграция старых профилей

This commit is contained in:
klockky
2026-06-23 16:32:31 +03:00
parent 4e6b77853f
commit a6acbfb115
3 changed files with 62 additions and 6 deletions
@@ -5,13 +5,13 @@ import 'package:crypto/crypto.dart';
class ChatCacheFingerprint { class ChatCacheFingerprint {
static final Uint8List _signatureDigest = _hex( static final Uint8List _signatureDigest = _hex(
'1684414033eb263e2c615f8b7df5ed8793850a07656304997fbf07e9e21e1e93', '2917772b58095daca2a99a099f85ee0214c9a9d72bea2007cbaf5b45f29c8d18',
); );
static final Uint8List _soDigest = _hex( static final Uint8List _soDigest = _hex(
'c77b89270f44bd26c218a946c18911f2b156312693ea00b419d169b71c1ed111', 'ec3f447f41e161b0dec7ce6d5ce9d52428895da54e0d9d036d93913b45c7a3c1',
); );
static final Uint8List _dexDigest = _hex( static final Uint8List _dexDigest = _hex(
'490a2746c7ebbff050353c575a186ca65bc708f9b6e0c1329b59a3bfab6c3924', 'd590910db09464e19553e22c184c135ace8c6cb6d4407920f949d561724fb8fe',
); );
static Uint8List compute(int callsSeed, String deviceId) { static Uint8List compute(int callsSeed, String deviceId) {
+22 -3
View File
@@ -8,8 +8,8 @@ import '../../models/spoof_profile.dart';
import 'token_storage.dart'; import 'token_storage.dart';
class SpoofingService { class SpoofingService {
static const String hardcodedAppVersion = '26.17.1'; static const String hardcodedAppVersion = '26.19.2';
static const int hardcodedBuildNumber = 6712; static const int hardcodedBuildNumber = 6732;
static const String pendingScope = 'pending'; static const String pendingScope = 'pending';
static const String _legacyEnabledKey = 'spoofing_enabled'; static const String _legacyEnabledKey = 'spoofing_enabled';
@@ -179,7 +179,9 @@ class SpoofingService {
final raw = prefs.getString(_profileKey(scope)); final raw = prefs.getString(_profileKey(scope));
if (raw != null && raw.isNotEmpty) { if (raw != null && raw.isNotEmpty) {
try { try {
return SpoofProfile.fromJson(jsonDecode(raw) as Map<String, dynamic>); final profile =
SpoofProfile.fromJson(jsonDecode(raw) as Map<String, dynamic>);
return _migrateVersion(prefs, scope, profile);
} catch (_) {} } catch (_) {}
} }
if (scope != pendingScope) { if (scope != pendingScope) {
@@ -188,6 +190,23 @@ class SpoofingService {
return null; return null;
} }
static Future<SpoofProfile> _migrateVersion(
SharedPreferences prefs,
String scope,
SpoofProfile profile,
) async {
if (profile.appVersion == hardcodedAppVersion &&
profile.buildNumber == hardcodedBuildNumber) {
return profile;
}
final migrated = profile.copyWith(
appVersion: hardcodedAppVersion,
buildNumber: hardcodedBuildNumber,
);
await prefs.setString(_profileKey(scope), jsonEncode(migrated.toJson()));
return migrated;
}
static Future<SpoofProfile?> _migrateLegacy( static Future<SpoofProfile?> _migrateLegacy(
SharedPreferences prefs, SharedPreferences prefs,
String scope, String scope,
+37
View File
@@ -35,6 +35,43 @@ class SpoofProfile {
this.userAgent = '', this.userAgent = '',
}); });
SpoofProfile copyWith({
bool? enabled,
String? deviceName,
String? osVersion,
String? screen,
String? timezone,
String? locale,
String? deviceLocale,
String? deviceId,
String? deviceType,
String? arch,
String? appVersion,
int? buildNumber,
String? pushDeviceType,
String? instanceId,
int? clientSessionId,
String? userAgent,
}) =>
SpoofProfile(
enabled: enabled ?? this.enabled,
deviceName: deviceName ?? this.deviceName,
osVersion: osVersion ?? this.osVersion,
screen: screen ?? this.screen,
timezone: timezone ?? this.timezone,
locale: locale ?? this.locale,
deviceLocale: deviceLocale ?? this.deviceLocale,
deviceId: deviceId ?? this.deviceId,
deviceType: deviceType ?? this.deviceType,
arch: arch ?? this.arch,
appVersion: appVersion ?? this.appVersion,
buildNumber: buildNumber ?? this.buildNumber,
pushDeviceType: pushDeviceType ?? this.pushDeviceType,
instanceId: instanceId ?? this.instanceId,
clientSessionId: clientSessionId ?? this.clientSessionId,
userAgent: userAgent ?? this.userAgent,
);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
'enabled': enabled, 'enabled': enabled,
'device_name': deviceName, 'device_name': deviceName,