-
Notifications
You must be signed in to change notification settings - Fork 151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
appcache: add new magic for Steam Client Beta (June 2024) #463
Conversation
Hm, this might need more work. Converting to draft. |
Getting closer, seems like {
'appid': 5,
'size': 85,
'info_state': 1,
'last_updated': 1680901338,
'access_token': 0,
'sha1': b'\x87\xfaCg\x85\x80\r\xb4\x90Im\xdc}\xb4\x81\xeeQ\x8b\x825',
'change_number': 22534048, # Matches SteamDB: https://steamdb.info/app/5/info/
'data_sha1': b'~\xa7WO\xe35\xb5\x07~k>\xba|B\xc8\x90\x1e\xab\x91\xa9' # Does not match 'sha1'
} |
Didn't really make much progress tonight. Remaining issues are:
If anyone has any pointers I'd love to hear them! |
EDIT: This is partly incorrect. Read the next comment. Had a closer look at this since the Steam beta change broke Protontricks' own The new
Note that the first byte of The field map offset points to a new segment at the very end of the
The struct for each app section seems unchanged, but the
The So, looks like each field name is no longer written in full each time. Instead, the mapping at the end of the My analysis might be off, so keep that in mind. :) |
Wrote the analysis before looking up the SteamAppInfo PR; they seem to have figured out the new format, and they call the field map "string pool" instead. Oh well, was fun figuring this one out. :) I guess it would be possible to provide the array of field name strings (i.e. the string pool, table or whatchacallit) as a parameter to |
Hacked together quick support in https://github.com/Matoking/vdf/tree/support_new_bvdf and in https://github.com/Matoking/steam/tree/appinfo_v29 It's somewhat ugly, but seems to work. @rossengeorgiev is probably best qualified to answer how this "binary VDF requires separate table to parse" stuff should be handled in the API. |
Legend! Thanks for this, I don't really know much about reading from binary files but I have certainly learned a lot from your explanation and branches! |
However we want to handle this going forward is fine with me; I can close this PR and @Matoking you can open a PR with your changes as you already have the changes ready to go for |
I squashed the commits together, added you as a co-author and created the PR #464. Does this work for you? |
Yes, that works perfectly. Thank you and I appreciate being added as a co-author too 😄 I will close this PR in favour of #464. |
Great, thanks for the help! 👍 |
Fix #462.
The latest Steam Client Beta changed the magic for
appinfo.vdf
. This PR adds the new magic to the file. I confirmed that this allows myappinfo.vdf
to be parsed, but have not checked for backwards compatibility (although it should work given that we check based on a tuple of magics).Unsure how the
data_sha1
should look, and if theif
check needs to now include the new magic too. Alternatively theif
could be changed toif magic != b"'DV\x07"
, but have not tested this.I am using this as a reference implementation, although my C# skills are close to zero 😅 SteamDatabase/SteamAppInfo@56b1fec