3838
3939#include " CfxReleaseInfo.h"
4040
41+ constexpr const auto kROSBlobEmailOffset = 8 ;
42+ constexpr const auto kROSBlobTicketOffset = 2800 ;
43+ constexpr const auto kROSBlobSessionTicketOffset = 3312 ;
44+ constexpr const auto kROSBlobAccountIdOffset = 3816 ;
45+ constexpr const auto kROSBlobUsernameOffset = 3743 ;
46+ constexpr const auto kROSBlobSessionKeyOffset = 4360 ;
47+
4148template <typename ... Ts>
4249static auto PostAutoLogin (Ts&&... args)
4350{
@@ -152,7 +159,7 @@ std::string GetROSEmail()
152159 }
153160
154161 auto accountBlob = blob->data ;
155- return (const char *)&accountBlob[8 ];
162+ return (const char *)&accountBlob[kROSBlobEmailOffset ];
156163}
157164
158165#if defined(IS_RDR3) || defined(GTA_FIVE) || defined(GTA_NY)
@@ -226,10 +233,10 @@ bool GetMTLSessionInfo(std::string& ticket, std::string& sessionTicket, std::arr
226233 }
227234 }
228235
229- ticket = std::string ((const char *)&accountBlob[2800 ]);
230- sessionTicket = std::string ((const char *)&accountBlob[3312 ]);
231- memcpy (sessionKey.data (), &accountBlob[0x10D8 ], sessionKey.size ());
232- accountId = *(uint64_t *)&accountBlob[3816 ];
236+ ticket = std::string ((const char *)&accountBlob[kROSBlobTicketOffset ]);
237+ sessionTicket = std::string ((const char *)&accountBlob[kROSBlobSessionTicketOffset ]);
238+ memcpy (sessionKey.data (), &accountBlob[kROSBlobSessionKeyOffset ], sessionKey.size ());
239+ accountId = *(uint64_t *)&accountBlob[kROSBlobAccountIdOffset ];
233240
234241 return true ;
235242}
@@ -261,7 +268,7 @@ static bool InitAccountSteam()
261268 if (blob->valid )
262269 {
263270 accountBlob = blob->data ;
264- trace (" External ROS says it's signed in: %s\n " , (const char *)&accountBlob[8 ]);
271+ trace (" External ROS says it's signed in: %s\n " , (const char *)&accountBlob[kROSBlobEmailOffset ]);
265272 }
266273
267274 return blob->valid ;
@@ -297,7 +304,7 @@ static bool InitAccountEOS()
297304 if (blob->valid )
298305 {
299306 accountBlob = blob->data ;
300- trace (" Epic ROS says it's signed in: %s\n " , (const char *)&accountBlob[8 ]);
307+ trace (" Epic ROS says it's signed in: %s\n " , (const char *)&accountBlob[kROSBlobEmailOffset ]);
301308 }
302309
303310 return blob->valid ;
@@ -791,7 +798,7 @@ void ValidateEpic(int parentPid)
791798 *(uint64_t *)&blob->data [3816 ] = j.value (" RockstarId" , uint64_t (0 ));
792799 strcpy ((char *)&blob->data [2800 ], j.value (" Ticket" , " " ).c_str ());
793800 strcpy ((char *)&blob->data [3312 ], tree.get <std::string>(" Response.SessionTicket" ).c_str ());
794- memcpy (&blob->data [0x10D8 ], sessionKey.data (), sessionKey.size ());
801+ memcpy (&blob->data [kROSBlobSessionKeyOffset ], sessionKey.data (), sessionKey.size ());
795802 strcpy ((char *)&blob->data [8 ], j.value (" Email" , " " ).c_str ());
796803 strcpy ((char *)&blob->data [0xE9F ], j.value (" Nickname" , " " ).c_str ());
797804
@@ -965,7 +972,7 @@ void ValidateSteam(int parentPid)
965972 *(uint64_t *)&blob->data [3816 ] = j.value (" RockstarId" , uint64_t (0 ));
966973 strcpy ((char *)&blob->data [2800 ], j.value (" Ticket" , " " ).c_str ());
967974 strcpy ((char *)&blob->data [3312 ], tree.get <std::string>(" Response.SessionTicket" ).c_str ());
968- memcpy (&blob->data [0x10D8 ], sessionKey.data (), sessionKey.size ());
975+ memcpy (&blob->data [kROSBlobSessionKeyOffset ], sessionKey.data (), sessionKey.size ());
969976 strcpy ((char *)&blob->data [8 ], j.value (" Email" , " " ).c_str ());
970977 strcpy ((char *)&blob->data [0xE9F ], j.value (" Nickname" , " " ).c_str ());
971978
@@ -1124,7 +1131,7 @@ static bool InitAccountMTL()
11241131 return false ;
11251132 }
11261133
1127- trace (" MTL says it's signed in: %s\n " , (const char *)&accountBlob[8 ]);
1134+ trace (" MTL says it's signed in: %s\n " , (const char *)&accountBlob[kROSBlobEmailOffset ]);
11281135
11291136 return true ;
11301137#else
@@ -1167,8 +1174,8 @@ static bool InitAccountRemote()
11671174
11681175static HookFunction hookFunction ([]()
11691176{
1170- Instance<ICoreGameInit>::Get ()->SetData (" rosUserName" , (const char *)&accountBlob[0xE9F ]);
1171- Instance<ICoreGameInit>::Get ()->SetData (" rosUserEmail" , (const char *)&accountBlob[8 ]);
1177+ Instance<ICoreGameInit>::Get ()->SetData (" rosUserName" , (const char *)&accountBlob[kROSBlobUsernameOffset ]);
1178+ Instance<ICoreGameInit>::Get ()->SetData (" rosUserEmail" , (const char *)&accountBlob[kROSBlobEmailOffset ]);
11721179});
11731180#endif
11741181#else
@@ -1188,7 +1195,7 @@ void PreInitGameSpec()
11881195uint64_t ROSGetDummyAccountID ()
11891196{
11901197#if defined(IS_RDR3)
1191- return *(uint64_t *)&accountBlob[3816 ];
1198+ return *(uint64_t *)&accountBlob[kROSBlobAccountIdOffset ];
11921199#else
11931200 static std::once_flag gotAccountId;
11941201 static uint32_t accountId;
0 commit comments