Permalink
Comparing changes
Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also .
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
8
contributors
Commits on Nov 18, 2019
Commits on May 15, 2020
We have a new IRC channel.
Commits on May 16, 2020
NetHook2 emsg descriptors 'fix' for steam client beta
Update irc contact details.
README: better web irc link
Commits on May 19, 2020
Commits on Jun 02, 2020
Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.4.1 to 2.4.2. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/commits/v2.4.2) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
Commits on Jun 04, 2020
Remove unnecessary assigment
Update protobufs
Commits on Jun 06, 2020
….runner.visualstudio-2.4.2 Bump xunit.runner.visualstudio from 2.4.1 to 2.4.2 in /SteamKit2
Commits on Jun 18, 2020
Commits on Jun 19, 2020
Add ELauncherType
Commits on Jun 20, 2020
Commits on Jun 21, 2020
Add full update fields to PICS changes callback
Commits on Jun 22, 2020
Update protobufs
Commits on Jul 05, 2020
Unified
Split
Showing
with
7,492 additions
and 665 deletions.
- +1 −1 .travis.yml
- +14 −76 Resources/NetHook2/NetHook2/crypto.cpp
- +2 −5 Resources/NetHook2/NetHook2/crypto.h
- +2 −0 Resources/ProtobufGen/protos.csv
- +1 −1 Resources/Protobufs
- +13 −0 Resources/SteamLanguage/enums.steamd
- +1 −1 Resources/SteamLanguageParser/Parser/TokenAnalyzer.cs
- +285 −0 SteamKit2/SteamKit2/Base/Generated/GC/CSGO/MsgGC.cs
- +31 −0 SteamKit2/SteamKit2/Base/Generated/GC/CSGO/SteamMsgBase.cs
- +105 −0 SteamKit2/SteamKit2/Base/Generated/GC/CSGO/SteamMsgGCSDK.cs
- +871 −181 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCClient.cs
- +2,158 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCClientGuild.cs
- +2 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCClientMatchMgmt.cs
- +523 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCCommon.cs
- +690 −72 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCCommonMatchMgmt.cs
- +91 −4 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCMsgId.cs
- +513 −100 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgGCServer.cs
- +487 −10 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgMatchMetadata.cs
- +4 −1 SteamKit2/SteamKit2/Base/Generated/GC/Dota/MsgSharedEnums.cs
- +33 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/SteamMsgBase.cs
- +10 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/SteamMsgGCEcon.cs
- +51 −0 SteamKit2/SteamKit2/Base/Generated/GC/Dota/SteamMsgGCSDK.cs
- +10 −0 SteamKit2/SteamKit2/Base/Generated/GC/TF2/MsgGC.cs
- +12 −0 SteamKit2/SteamKit2/Base/Generated/SteamLanguage.cs
- +153 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgAuth.cs
- +30 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgBase.cs
- +10 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgBroadcast.cs
- +32 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgChat.cs
- +16 −6 SteamKit2/SteamKit2/Base/Generated/SteamMsgClientServerLogin.cs
- +20 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgDepotBuilder.cs
- +20 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgInventory.cs
- +1,004 −179 SteamKit2/SteamKit2/Base/Generated/SteamMsgPlayer.cs
- +65 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgPublishedFile.cs
- +174 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgTimedTrial.cs
- +31 −0 SteamKit2/SteamKit2/Base/Generated/SteamMsgUserAccount.cs
- +10 −0 SteamKit2/SteamKit2/Steam/Handlers/SteamApps/Callbacks.cs
- +0 −7 SteamKit2/SteamKit2/Steam/Handlers/SteamUser/Callbacks.cs
- +1 −1 SteamKit2/SteamKit2/SteamKit2.csproj
- +1 −1 SteamKit2/SteamKit2/Util/CryptoHelper.cs
- +13 −17 SteamKit2/SteamKit2/changes.txt
- +1 −1 SteamKit2/Tests/Tests.csproj
- +1 −1 readme.md
| @@ -30,7 +30,7 @@ script: | ||
| notifications: | ||
| irc: | ||
| channels: | ||
| - "irc.gamesurge.net#opensteamworks" | ||
| - "irc.freenode.net#steamkit" | ||
| on_success: never | ||
| on_failure: always | ||
|
|
||
| @@ -11,19 +11,17 @@ | ||
|
|
||
|
|
||
| SymmetricEncryptChosenIVFn Encrypt_Orig = nullptr; | ||
| bool (__cdecl *GetMessageFn)( int * ) = nullptr; | ||
|
|
||
| PchMsgNameFromEMsgFn PchMsgNameFromEMsg = nullptr; | ||
|
|
||
| static_assert(sizeof(MsgInfo_t) == 20, "Wrong size of MsgInfo_t"); | ||
| static_assert(offsetof(MsgInfo_t, eMsg) == 0, "Wrong offset of MsgInfo_t::eMsg"); | ||
| static_assert(offsetof(MsgInfo_t, pchMsgName) == 4, "Wrong offset of MsgInfo_t::pchMsgName"); | ||
| static_assert(offsetof(MsgInfo_t, nFlags) == 8, "Wrong offset of MsgInfo_t::nFlags"); | ||
| static_assert(offsetof(MsgInfo_t, k_EServerTarget) == 12, "Wrong offset of MsgInfo_t::k_EServerTarget"); | ||
| static_assert(offsetof(MsgInfo_t, nUnk1) == 16, "Wrong offset of MsgInfo_t::uUnk1"); | ||
| static_assert(offsetof(MsgInfo_t, nFlags) == 4, "Wrong offset of MsgInfo_t::nFlags"); | ||
| static_assert(offsetof(MsgInfo_t, k_EServerTarget) == 8, "Wrong offset of MsgInfo_t::k_EServerTarget"); | ||
| static_assert(offsetof(MsgInfo_t, nUnk1) == 12, "Wrong offset of MsgInfo_t::uUnk1"); | ||
| static_assert(offsetof(MsgInfo_t, pchMsgName) == 16, "Wrong offset of MsgInfo_t::pchMsgName"); | ||
|
|
||
| typedef std::pair<EMsg, MsgInfo_t *> MsgPair; | ||
|
|
||
|
|
||
| CCrypto::CCrypto() noexcept | ||
| : Encrypt_Detour( nullptr ) | ||
| { | ||
| @@ -41,74 +39,19 @@ CCrypto::CCrypto() noexcept | ||
|
|
||
| g_pLogger->LogConsole( "CCrypto::SymmetricEncryptChosenIV = 0x%x\n", Encrypt_Orig ); | ||
|
|
||
| char *pGetMessageList = nullptr; | ||
| const bool bGetMessageList = steamClientScan.FindFunction( | ||
| "\xA1\x00\x00\x00\x00\xA8\x01\x75\x29\x68\x00\x00\x00\x00\x83\xC8\x01\xB9\x00\x00\x00\x00\x68\x00\x00\x00\x00\xA3\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x68\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x83\xC4\x04\xB8\x00\x00\x00\x00\xC3", | ||
| "x????xxxxx????xxxx????x????x????x????x????x????xxxx????x", | ||
| (void **)&pGetMessageList | ||
| const bool bPchMsgNameFromEMsg = steamClientScan.FindFunction( | ||
| "\x55\x8B\xEC\xA1\x00\x00\x00\x00\x83\xEC\x08\xA8\x01\x75\x1F\x83\xC8\x01\xB9\x00\x00\x00\x00\xA3", | ||
| "xxxx????xxxxxxxxxxx????x", | ||
| (void **)&PchMsgNameFromEMsg | ||
| ); | ||
|
|
||
| if (bGetMessageList) | ||
| if (bPchMsgNameFromEMsg) | ||
| { | ||
| constexpr uint32 uMessageListStartPtrOffset = 23; | ||
| constexpr uint32 uMessageListCountPtrOffset = 10; | ||
|
|
||
| MsgInfo_t *pInfos = *(MsgInfo_t **)( pGetMessageList + uMessageListStartPtrOffset ); | ||
| const uint32 uNumMessages = *(uint32 *)( pGetMessageList + uMessageListCountPtrOffset ); | ||
|
|
||
| g_pLogger->LogConsole( "pGetMessageList = 0x%x\npInfos = 0x%x\nnumMessages = %d\n", pGetMessageList, pInfos, uNumMessages ); | ||
|
|
||
| HMODULE sc = GetModuleHandle("steamclient.dll"); | ||
| assert(sc != nullptr); | ||
| MODULEINFO modInfo; | ||
| GetModuleInformation(GetCurrentProcess(), sc, &modInfo, sizeof(modInfo)); | ||
|
|
||
| const uintptr_t uSteamAddrMin = (uintptr_t)modInfo.lpBaseOfDll; | ||
| const uintptr_t uSteamAddrMax = (uintptr_t)modInfo.lpBaseOfDll + modInfo.SizeOfImage; | ||
|
|
||
| for ( uint16 x = 0 ; x < uNumMessages; x++ ) | ||
| { | ||
| const uintptr_t uMsgNameAddr = (uintptr_t)pInfos->pchMsgName; | ||
| if (uMsgNameAddr < uSteamAddrMin || uMsgNameAddr >= uSteamAddrMax) | ||
| { | ||
| g_pLogger->LogConsole("Found bad emsg name. Check size and layout of MsgInfo_t. Aborting emsg lookup.\n"); | ||
| break; | ||
| } | ||
| eMsgList.insert( MsgPair( pInfos->eMsg, pInfos ) ); | ||
|
|
||
| pInfos++; | ||
| } | ||
|
|
||
| if ( eMsgList.size() != 0 ) | ||
| { | ||
| // should only delete our existing files if we have something new to dump | ||
| g_pLogger->DeleteFile( "emsg_list.txt", false ); | ||
| g_pLogger->DeleteFile( "emsg_list_detailed.txt", false ); | ||
|
|
||
| HANDLE hListFile = g_pLogger->OpenFile( "emsg_list.txt", false ); | ||
| HANDLE hListDetailedFile = g_pLogger->OpenFile( "emsg_list_detailed.txt", false ); | ||
|
|
||
| for ( MsgList::iterator iter = eMsgList.begin() ; iter != eMsgList.end() ; iter++ ) | ||
| { | ||
| const MsgInfo_t * pInfo = iter->second; | ||
|
|
||
| g_pLogger->LogOpenFile( hListFile, "\t%s = %d,\r\n", pInfo->pchMsgName, pInfo->eMsg ); | ||
| g_pLogger->LogOpenFile( hListDetailedFile, "\t%s = %d, // flags: %d, server type: %d\r\n", pInfo->pchMsgName, pInfo->eMsg, pInfo->nFlags, pInfo->k_EServerTarget ); | ||
| } | ||
|
|
||
| g_pLogger->CloseFile( hListFile ); | ||
| g_pLogger->CloseFile( hListDetailedFile ); | ||
|
|
||
| g_pLogger->LogConsole( "Dumped emsg list! (%d messages)\n", eMsgList.size() ); | ||
| } | ||
| else | ||
| { | ||
| g_pLogger->LogConsole( "Unable to dump emsg list: No messages! (Offset changed?)\n" ); | ||
| } | ||
| g_pLogger->LogConsole( "PchMsgNameFromEMsg = 0x%x\n", PchMsgNameFromEMsg); | ||
| } | ||
| else | ||
| { | ||
| g_pLogger->LogConsole( "Unable to find GetMessageList.\n" ); | ||
| g_pLogger->LogConsole( "Unable to find PchMsgNameFromEMsg.\n" ); | ||
| } | ||
|
|
||
| SymmetricEncryptChosenIVFn encrypt = CCrypto::SymmetricEncryptChosenIV; | ||
| @@ -128,8 +71,6 @@ CCrypto::CCrypto() noexcept | ||
|
|
||
| CCrypto::~CCrypto() | ||
| { | ||
| eMsgList.clear(); | ||
|
|
||
| if ( Encrypt_Detour ) | ||
| { | ||
| Encrypt_Detour->Detach(); | ||
| @@ -150,12 +91,9 @@ bool __cdecl CCrypto::SymmetricEncryptChosenIV( const uint8 *pubPlaintextData, u | ||
|
|
||
| const char* CCrypto::GetMessage( EMsg eMsg, uint8 serverType ) | ||
| { | ||
| for ( MsgList::iterator iter = eMsgList.begin() ; iter != eMsgList.end() ; iter++ ) | ||
| if(PchMsgNameFromEMsg != nullptr) | ||
| { | ||
| if ( iter->first == eMsg ) | ||
| { | ||
| return iter->second->pchMsgName; | ||
| } | ||
| return PchMsgNameFromEMsg(eMsg); | ||
| } | ||
|
|
||
| return nullptr; | ||
| @@ -11,18 +11,17 @@ | ||
| #undef GetMessage | ||
|
|
||
| typedef bool(__cdecl *SymmetricEncryptChosenIVFn)(const uint8*, uint32, const uint8*, uint32, uint8*, uint32*, const uint8*, uint32); | ||
| typedef const char* (__cdecl * PchMsgNameFromEMsgFn)(EMsg); | ||
|
|
||
| struct MsgInfo_t | ||
| { | ||
| EMsg eMsg; | ||
| const char* pchMsgName; | ||
| int nFlags; | ||
| EServerType k_EServerTarget; | ||
| uint32 nUnk1; | ||
| const char* pchMsgName; | ||
| }; | ||
|
|
||
| typedef std::map<EMsg, MsgInfo_t*> MsgList; | ||
|
|
||
| class CCrypto | ||
| { | ||
|
|
||
| @@ -35,8 +34,6 @@ class CCrypto | ||
| CSimpleDetour* Encrypt_Detour; | ||
|
|
||
| static bool __cdecl SymmetricEncryptChosenIV( const uint8 *pubPlaintextData, uint32 cubPlaintextData, const uint8* pIV, uint32 cubIV, uint8 *pubEncryptedData, uint32 *pcubEncryptedData, const uint8 *pubKey, uint32 cubKey ); | ||
|
|
||
| MsgList eMsgList; | ||
| }; | ||
|
|
||
| extern CCrypto* g_pCrypto; | ||
| @@ -2,6 +2,7 @@ ProtoDir,ProtoFileName,ClassFilePath,Namespace | ||
| steam,content_manifest.proto,ContentManifest.cs,SteamKit2.Internal | ||
| steam,encrypted_app_ticket.proto,SteamMsgAppTicket.cs,SteamKit2.Internal | ||
| steam,steammessages_accounthardware.steamclient.proto,SteamMsgAccountHardware.cs,SteamKit2.Internal | ||
| steam,steammessages_auth.steamclient.proto,SteamMsgAuth.cs,SteamKit2.Internal | ||
| steam,steammessages_base.proto,SteamMsgBase.cs,SteamKit2.Internal | ||
| steam,steammessages_broadcast.steamclient.proto,SteamMsgBroadcast.cs,SteamKit2.Internal | ||
| steam,steammessages_chat.steamclient.proto,SteamMsgChat.cs,SteamKit2.Internal | ||
| @@ -33,6 +34,7 @@ steam,steammessages_shader.steamclient.proto,SteamMsgShader.cs,SteamKit2.Interna | ||
| steam,steammessages_site_license.steamclient.proto,SteamMsgSiteLicense.cs,SteamKit2.Internal | ||
| steam,steammessages_sitelicenseclient.proto,SteamMsgSiteLicenseClient.cs,SteamKit2.Internal | ||
| steam,steammessages_store.steamclient.proto,SteamMsgStore.cs,SteamKit2.Internal | ||
| steam,steammessages_timedtrial.steamclient.proto,SteamMsgTimedTrial.cs,SteamKit2.Internal | ||
| steam,steammessages_twofactor.steamclient.proto,SteamMsgTwoFactor.cs,SteamKit2.Internal | ||
| steam,steammessages_unified_base.steamclient.proto,SteamMsgUnifiedBase.cs,SteamKit2.Internal | ||
| steam,steammessages_useraccount.steamclient.proto,SteamMsgUserAccount.cs,SteamKit2.Internal | ||
Submodule Protobufs
updated
53 files
| +47 −0 | csgo/cstrike15_gcmessages.proto | |
| +20 −0 | csgo/gcsdk_gcmessages.proto | |
| +3 −0 | csgo/steammessages.proto | |
| +25 −0 | dota2/dota_clientmessages.proto | |
| +26 −0 | dota2/dota_commonmessages.proto | |
| +188 −70 | dota2/dota_gcmessages_client.proto | |
| +656 −0 | dota2/dota_gcmessages_client_guild.proto | |
| +191 −0 | dota2/dota_gcmessages_client_guild_events.proto | |
| +2 −0 | dota2/dota_gcmessages_client_match_management.proto | |
| +96 −0 | dota2/dota_gcmessages_common.proto | |
| +312 −10 | dota2/dota_gcmessages_common_match_management.proto | |
| +91 −4 | dota2/dota_gcmessages_msgid.proto | |
| +93 −10 | dota2/dota_gcmessages_server.proto | |
| +71 −1 | dota2/dota_match_metadata.proto | |
| +4 −1 | dota2/dota_shared_enums.proto | |
| +55 −2 | dota2/dota_usermessages.proto | |
| +1 −0 | dota2/econ_gcmessages.proto | |
| +5 −0 | dota2/gcsdk_gcmessages.proto | |
| +8 −0 | dota2/netmessages.proto | |
| +55 −39 | dota2/steamdatagram_messages_sdr.proto | |
| +3 −0 | dota2/steammessages.proto | |
| +63 −0 | dota2/steamnetworkingsockets_messages.proto | |
| +1 −3 | dota2/steamnetworkingsockets_messages_udp.proto | |
| +9 −0 | dota2/usermessages.proto | |
| +2 −0 | steam/htmlmessages.proto | |
| +45 −39 | steam/steamdatagram_messages_sdr.proto | |
| +1 −0 | steam/steammessages_appoverview.proto | |
| +40 −0 | steam/steammessages_auth.steamclient.proto | |
| +3 −0 | steam/steammessages_base.proto | |
| +1 −0 | steam/steammessages_broadcast.steamclient.proto | |
| +3 −0 | steam/steammessages_chat.steamclient.proto | |
| +2 −1 | steam/steammessages_clientserver_login.proto | |
| +2 −0 | steam/steammessages_depotbuilder.steamclient.proto | |
| +2 −0 | steam/steammessages_inventory.steamclient.proto | |
| +209 −0 | steam/steammessages_player.steamclient.proto | |
| +9 −0 | steam/steammessages_publishedfile.steamclient.proto | |
| +47 −0 | steam/steammessages_timedtrial.steamclient.proto | |
| +3 −0 | steam/steammessages_useraccount.steamclient.proto | |
| +63 −0 | steam/steamnetworkingsockets_messages.proto | |
| +1 −3 | steam/steamnetworkingsockets_messages_udp.proto | |
| +9 −0 | steam/stream.proto | |
| +1 −0 | tf2/tf_gcmessages.proto | |
| +2 −0 | underlords/dac_gamemessages.proto | |
| +31 −34 | underlords/steamdatagram_messages_sdr.proto | |
| +45 −0 | underlords/steamnetworkingsockets_messages.proto | |
| +0 −3 | underlords/steamnetworkingsockets_messages_udp.proto | |
| +2 −0 | webui/community.proto | |
| +102 −0 | webui/curator_admin.proto | |
| +78 −85 | webui/friends.proto | |
| +30 −0 | webui/friends_mobile.proto | |
| +559 −0 | webui/steamui_broadcast.proto | |
| +127 −35 | webui/steamui_libraryroot.proto | |
| +213 −0 | webui/store.proto |
| @@ -1540,3 +1540,16 @@ public enum ESteamRealm | ||
| SteamGlobal = 1; | ||
| SteamChina = 2; | ||
| }; | ||
|
|
||
| enum ELauncherType | ||
| { | ||
| Default = 0; | ||
| PerfectWorld = 1; | ||
| Nexon = 2; | ||
| CmdLine = 3; | ||
| CSGO = 4; | ||
| ClientUI = 5; | ||
| Headless = 6; | ||
| SteamChina = 7; | ||
| SingleApp = 8; | ||
| } | ||
| @@ -228,7 +228,7 @@ private static void ParseInnerScope(Queue<Token> tokens, Node parent, Node root) | ||
| Token obsolete = Optional( tokens, "identifier", "obsolete" ); | ||
| if ( obsolete != null ) | ||
| { | ||
| // Obselete identifiers are output when generating the language, but include a warning | ||
| // Obsolete identifiers are output when generating the language, but include a warning | ||
| pnode.Obsolete = ""; | ||
|
|
||
| Token obsoleteReason = Optional( tokens, "string" ); | ||
Oops, something went wrong.