public RequestEnvelope SetRequestEnvelopeUnknown6(RequestEnvelope requestEnvelope) { if (_sessionHash == null) { _sessionHash = new byte[32]; _random.NextBytes(_sessionHash); } byte[] authSeed = requestEnvelope.AuthTicket != null? requestEnvelope.AuthTicket.ToByteArray() : requestEnvelope.AuthInfo.ToByteArray(); var normAccel = new Vector(_deviceInfo.Sensors.AccelRawX, _deviceInfo.Sensors.AccelRawY, _deviceInfo.Sensors.AccelRawZ); normAccel.NormalizeVector(1.0f);//1.0f on iOS, 9.81 on Android? var sig = new Signature { LocationHash1 = Utils.GenerateLocation1(authSeed, requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), LocationHash2 = Utils.GenerateLocation2(requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), SessionHash = ByteString.CopyFrom(_sessionHash), Unknown25 = 7363665268261373700L, Timestamp = (ulong)DateTime.UtcNow.ToUnixTime(), TimestampSinceStart = (ulong)_deviceInfo.TimeSnapshot, SensorInfo = new Signature.Types.SensorInfo { AccelNormalizedX = normAccel.X, AccelNormalizedY = normAccel.Y, AccelNormalizedZ = normAccel.Z, AccelRawX = -_deviceInfo.Sensors.AccelRawX, AccelRawY = -_deviceInfo.Sensors.AccelRawY, AccelRawZ = -_deviceInfo.Sensors.AccelRawZ, MagnetometerX = _deviceInfo.Sensors.MagnetometerX, MagnetometerY = _deviceInfo.Sensors.MagnetometerY, MagnetometerZ = _deviceInfo.Sensors.MagnetometerZ, GyroscopeRawX = _deviceInfo.Sensors.GyroscopeRawX, GyroscopeRawY = _deviceInfo.Sensors.GyroscopeRawY, GyroscopeRawZ = _deviceInfo.Sensors.GyroscopeRawZ, AngleNormalizedX = _deviceInfo.Sensors.AngleNormalizedX, AngleNormalizedY = _deviceInfo.Sensors.AngleNormalizedY, AngleNormalizedZ = _deviceInfo.Sensors.AngleNormalizedZ, AccelerometerAxes = _deviceInfo.Sensors.AccelerometerAxes, TimestampSnapshot = (ulong)(_deviceInfo.Sensors.TimeSnapshot - _random.Next(150, 260)) }, DeviceInfo = new Signature.Types.DeviceInfo { DeviceId = _deviceInfo.DeviceID, AndroidBoardName = _deviceInfo.AndroidBoardName, AndroidBootloader = _deviceInfo.AndroidBootloader, DeviceBrand = _deviceInfo.DeviceBrand, DeviceModel = _deviceInfo.DeviceModel, DeviceModelBoot = _deviceInfo.DeviceModelBoot, DeviceModelIdentifier = _deviceInfo.DeviceModelIdentifier, FirmwareFingerprint = _deviceInfo.FirmwareFingerprint, FirmwareTags = _deviceInfo.FirmwareTags, HardwareManufacturer = _deviceInfo.HardwareManufacturer, HardwareModel = _deviceInfo.HardwareModel, FirmwareBrand = _deviceInfo.FirmwareBrand, FirmwareType = _deviceInfo.FirmwareType }, ActivityStatus = _deviceInfo.ActivityStatus != null ? new Signature.Types.ActivityStatus() { Walking = _deviceInfo.ActivityStatus.Walking, Automotive = _deviceInfo.ActivityStatus.Automotive, Cycling = _deviceInfo.ActivityStatus.Cycling, Running = _deviceInfo.ActivityStatus.Running, Stationary = _deviceInfo.ActivityStatus.Stationary, Tilting = _deviceInfo.ActivityStatus.Tilting, } : null }; if (_deviceInfo.GpsSattelitesInfo.Length > 0) { sig.GpsInfo = new Signature.Types.AndroidGpsInfo(); //sig.GpsInfo.TimeToFix //currently not filled _deviceInfo.GpsSattelitesInfo.ToList().ForEach(sat => { sig.GpsInfo.Azimuth.Add(sat.Azimuth); sig.GpsInfo.Elevation.Add(sat.Elevation); sig.GpsInfo.HasAlmanac.Add(sat.Almanac); sig.GpsInfo.HasEphemeris.Add(sat.Emphasis); sig.GpsInfo.SatellitesPrn.Add(sat.SattelitesPrn); sig.GpsInfo.Snr.Add(sat.Snr); sig.GpsInfo.UsedInFix.Add(sat.UsedInFix); }); } _deviceInfo.LocationFixes.ToList().ForEach(loc => sig.LocationFix.Add(new Signature.Types.LocationFix { Floor = loc.Floor, Longitude = loc.Longitude, Latitude = loc.Latitude, //Altitude = loc.Altitude, //currently probably not filled LocationType = loc.LocationType, Provider = loc.Provider, ProviderStatus = loc.ProviderStatus, HorizontalAccuracy = loc.HorizontalAccuracy, VerticalAccuracy = loc.VerticalAccuracy, Unknown20 = loc.Unknown20, TimestampSnapshot = loc.TimeSnapshot })); foreach (var request in requestEnvelope.Requests) { sig.RequestHash.Add( Utils.GenerateRequestHash(authSeed, request.ToByteArray()) ); } requestEnvelope.Unknown6 = new Unknown6 { RequestType = 6, Unknown2 = new Unknown6.Types.Unknown2 { EncryptedSignature = ByteString.CopyFrom(Crypt.Encrypt(sig.ToByteArray())) } }; return(requestEnvelope); }
public RequestEnvelope SetRequestEnvelopeUnknown6(RequestEnvelope requestEnvelope) { if (_sessionHash == null) { _sessionHash = new byte[32]; _random.NextBytes(_sessionHash); } byte[] authSeed = requestEnvelope.AuthTicket != null? requestEnvelope.AuthTicket.ToByteArray() : requestEnvelope.AuthInfo.ToByteArray(); var normAccel = new Vector(_deviceInfo.AccelRawX, _deviceInfo.AccelRawY, _deviceInfo.AccelRawZ); normAccel.NormalizeVector(9.81); normAccel.Round(2); ulong timeFromStart = (ulong)_deviceInfo.TimeSnapshot.TotalMilliseconds; var sig = new Signature { LocationHash1 = Utils.GenerateLocation1(authSeed, requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), LocationHash2 = Utils.GenerateLocation2(requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), SessionHash = ByteString.CopyFrom(_sessionHash), Unknown25 = -8537042734809897855L, Timestamp = (ulong)DateTime.UtcNow.ToUnixTime(), TimestampSinceStart = timeFromStart, SensorInfo = new Signature.Types.SensorInfo { AccelNormalizedX = normAccel.X, AccelNormalizedY = normAccel.Y, AccelNormalizedZ = normAccel.Z, AccelRawX = -_deviceInfo.AccelRawX, AccelRawY = -_deviceInfo.AccelRawY, AccelRawZ = -_deviceInfo.AccelRawZ, MagnetometerX = _deviceInfo.MagnetometerX, MagnetometerY = _deviceInfo.MagnetometerY, MagnetometerZ = _deviceInfo.MagnetometerZ, GyroscopeRawX = _deviceInfo.GyroscopeRawX, GyroscopeRawY = _deviceInfo.GyroscopeRawY, GyroscopeRawZ = _deviceInfo.GyroscopeRawZ, AngleNormalizedX = _deviceInfo.AngleNormalizedX, AngleNormalizedY = _deviceInfo.AngleNormalizedY, AngleNormalizedZ = _deviceInfo.AngleNormalizedZ, AccelerometerAxes = _deviceInfo.AccelerometerAxes, TimestampSnapshot = timeFromStart - (ulong)_random.Next(150, 260) }, DeviceInfo = new Signature.Types.DeviceInfo { DeviceId = _deviceInfo.DeviceID, FirmwareBrand = _deviceInfo.FirmwareBrand, FirmwareType = _deviceInfo.FirmwareType } /*ActivityStatus = new Signature.Types.ActivityStatus() * { * StartTimeMs = timeFromStart - (ulong)_random.Next(150, 350), * Walking = false, * Automotive = false, * Cycling = false, * Running = false, * Stationary = true, * Tilting = false, * UnknownStatus = false, * Status = ByteString.Empty //Have no idea what is there * }*/ }; _deviceInfo.LocationFixes.ToList().ForEach(loc => sig.LocationFix.Add(new Signature.Types.LocationFix { Floor = loc.Floor, Longitude = loc.Longitude, Latitude = loc.Latitude, Altitude = loc.Altitude, LocationType = loc.LocationType, Provider = loc.Provider, ProviderStatus = loc.ProviderStatus, HorizontalAccuracy = loc.HorizontalAccuracy, VerticalAccuracy = loc.VerticalAccuracy, TimestampSnapshot = loc.Timestamp })); foreach (var request in requestEnvelope.Requests) { sig.RequestHash.Add( Utils.GenerateRequestHash(authSeed, request.ToByteArray()) ); } requestEnvelope.Unknown6 = new Unknown6 { RequestType = 6, Unknown2 = new Unknown6.Types.Unknown2 { EncryptedSignature = ByteString.CopyFrom(Crypt.Encrypt(sig.ToByteArray())) } }; return(requestEnvelope); }
public RequestEnvelope SetRequestEnvelopeUnknown6(RequestEnvelope requestEnvelope) { var rnd32 = new byte[32]; var rnd = new Random(); rnd.NextBytes(rnd32); var ticketBytes = requestEnvelope.AuthTicket.ToByteArray(); var sig = new Signature() { LocationHash1 = Utils.GenerateLocation1(ticketBytes, requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), LocationHash2 = Utils.GenerateLocation2(requestEnvelope.Latitude, requestEnvelope.Longitude, requestEnvelope.Altitude), //Unknown25 = -8537042734809897855, Timestamp = (ulong)DateTime.UtcNow.ToUnixTime(), TimestampSinceStart = (ulong)(DateTime.UtcNow.ToUnixTime() - _startTime.ToUnixTime()), SensorInfo = new Signature.Types.SensorInfo() { AccelNormalizedZ = GenRandom(9.8), AccelNormalizedX = GenRandom(0.02), AccelNormalizedY = GenRandom(0.3), TimestampSnapshot = (ulong)_internalWatch.ElapsedMilliseconds - 230, MagnetometerX = GenRandom(0.12271042913198471), MagnetometerY = GenRandom(-0.015570580959320068), MagnetometerZ = GenRandom(0.010850906372070313), AngleNormalizedX = GenRandom(17.950439453125), AngleNormalizedY = GenRandom(-23.36273193359375), AngleNormalizedZ = GenRandom(-48.8250732421875), AccelRawX = GenRandom(-0.0120010357350111), AccelRawY = GenRandom(-0.04214850440621376), AccelRawZ = GenRandom(0.94571763277053833), GyroscopeRawX = GenRandom(7.62939453125e-005), GyroscopeRawY = GenRandom(-0.00054931640625), GyroscopeRawZ = GenRandom(0.0024566650390625), AccelerometerAxes = 3 }, DeviceInfo = GetDeviceInfo() }; //sig.DeviceInfo = _client.DeviceInfo; sig.LocationFix.Add(new Signature.Types.LocationFix() { Provider = "network", //Unk4 = 120, Latitude = (float)_client.CurrentLatitude, Longitude = (float)_client.CurrentLongitude, Altitude = (float)_client.CurrentAltitude, //TimestampSinceStart = (ulong)_internalWatch.ElapsedMilliseconds - 200, TimestampSnapshot = (ulong)_internalWatch.ElapsedMilliseconds - 200, Floor = 3, LocationType = 1, ProviderStatus = 3 }); sig.SessionHash = ByteString.CopyFrom(_client.SessionHash); sig.Unknown25 = BitConverter.ToUInt32(new System.Data.HashFunction.xxHash(64, 0x88533787).ComputeHash(System.Text.Encoding.ASCII.GetBytes("\"b8fa9757195897aae92c53dbcf8a60fb3d86d745\"")), 0); foreach (var request in requestEnvelope.Requests) { sig.RequestHash.Add( Utils.GenerateRequestHash(ticketBytes, request.ToByteArray()) ); } requestEnvelope.Unknown6.Add(new Unknown6() { RequestType = 6, Unknown2 = new Unknown6.Types.Unknown2() { EncryptedSignature = ByteString.CopyFrom(Crypt.Encrypt(sig.ToByteArray())) } }); return(requestEnvelope); }