Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Protobuf uit bestaande game decoden?

Pagina: 1
Acties:

Vraag


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
Hallo,
Ik speel Monster Super League en wil graag een paar tools ontwikkelen om b.v. uit te vogelen welke gems het beste zijn voor bepaalde astromon en welke astromon het beste te gebruiken zijn bij Titans etc etc.

Hiervoor heb ik echter toegang nodig tot de gamedata en die lijkt in een formaat opgeslagen te zijn waar ik niet veel wijzer van wordt. Ter voorbeeld, als ik het bestand van mijn telefoon
code:
1
Android/data/com.ftt.msleague_gl/files/download/gamedata_1263_5e7e36467eb66c05b0c5f1a79547bcf7.pb

naar mijn desktop overzet en dat open in notepad++


Wat ik er van begrijp is dat de data in een protobuf file zit en ik een bijbehorende .proto file nodig heb? Waar moet ik die vandaan halen of zijn er andere manieren om dit te doen?

Wat ik al gevonden of geprobeerd heb
Er zijn een aantal mensen op reddit die in het verleden succesvol zijn geweest in zichzelf toegang verschaffen tot de gamedata maar helaas reageren die niet op contact en hebben in recente tijd geen activiteit op reddit.

Ik heb ook geprobeerd m.b.v. NetCapture het netwerkverkeer te onderscheppen en te kijken of daar de data die ik nodig heb in een leesbaar formaat voorbij komt maar dat is niet het geval.

Ik zit nu dus een beetje vast en dacht laat ik eens kijken of een paar slimme medetweakers mij verder kunnen helpen.

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD

Alle reacties


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
Ik heb geprobeerd m.b.v. van protoc het te openen maar dusver zonder success. Aan de hand van een stackflow topic geprobeerd met de gewone manier en een manier waar de eerste 4 bytes worden overslagen maar in beide gevallen
code:
1
Failed to parse input.



code:
1
2
3
4
Server@Server:~/msl pb> cat client_gamedata_2148_80633ca3476749fa40d2eb3ad59adcb1.pb | protoc --decode_raw
Failed to parse input.
Server@Server:~/msl pb> dd bs=1 skip=4 if=client_gamedata_2148_80633ca3476749fa40d2eb3ad59adcb1.pb 2>/dev/null | protoc --decode_raw
Failed to parse input.


Ik noemde het openen in notepad++ voornamelijk omdat dit bij de gamemaster file van Pokémon Go (ook unity/protobuff) wel tot semi-leesbare tekst leid. Het lijkt erop dat die van MSL anders in elkaar steekt.

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
Het zijn overigens ook meerdere bestanden maar ik zie dat checkfiletype i.i.g voor alle bestanden op "MIME Type: application/octet-stream
Suggested file extension(s): bin dms lha lzh exe class so dll img iso"
uitkomt.
Ik het zojuist een kijkje genomen met een hex editor. Iets wat ik nog nooit eerder heb gedaan overigens en ook daar wordt ik niet veel wijzer van alhoewel ik ook geen idee heb waar ik naar kijk dus ik zul nog eens wat verder googlen.

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
md5 checks out file is zoals die ook gebruikt wordt op de telefoon zelf.
Ik gebruik overigens libprotoc 3.6.1. Ik kwam inderdaad ook een aantal .dlls tegen in de apk die inderdaad naar protobuf-net lijken te verwijzen (dacht dat .dlls enkel on windows werden gebruikt?)

Dat gaat even duren voordat ik alles daarvoor geinstalleerd heb. Ik zal vast nog een update posten, waarschijnlijk niet vandaag. Bedankt voor het meedenken iedereen :)

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
De Protocol.dll die in de game verscheept wordt met de Hex editor geopend en die lijkt interessante data te bevatten. Voorbeeldjes:

code:
1
ProtoBuf.DataFormat, protobuf-net, Version=2.0.0.668, Culture=neutral, PublicKeyToken=257b51d87d2e4d67

Een public key.

code:
1
mscorlib�Object�System�.ctor�protobuf-net�IExtension�ProtoBuf�Extensible�GetExtensionObject�String�Empty�List`1�System.Collections.Generic�Protocol�<Module>

Één of andere <Module> die in een collection generic wordt gestopt? (Eeuwen geleden dat ik iets met .net heb gedaan)

En in Protocol.Serializer.dll
code:
1
Module>�Protocol�Serializer�ProtoWriter�ProtoBuf�WriteFieldHeader�WireType�WriteInt32�AbusingType�ThrowEnumException�ProtoReader�ReadInt32�Type�System�GetTypeFromHandle�RuntimeTypeHandle�AccountMarketType�AccountOSType�AccountPlatformType�AccountPushSetting�AccountType�AppStore�ArenaCandidateType�BattleEndResultType�BattleType�BoosterChangeCause�BoosterType�CaptureFestivalLuckyTicketChangeCause�CaptureFestivalType�ChangeClanMemberGradeType�ClanApplyResult�ClanApplyState�ClanBattleSeasonState�ClanBattleType�ClanLeaveCase�ClanMemberGrade�ClanMonsterSlotIndex�



Wellicht dat i.p.v. een .proto één van deze DLLs of wellicht beide worden gebruikt om dat doel te vervullen?

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 02-07 20:02
Het is een online spel, maar via reddit (en authors die niet op messages reageren) weet ik dat de data wel lokaal wordt opgeslagen en in welke folder.
Wellicht een unity dingetje? Pokémon Go doet dit namelijk ook en is ook in unity gemaakt.
Het is niet ipv een .proto, het is in combinatie met een .proto (model).
Ik heb zojuist een youtube video gevolgd/meegetypt in visual studio en zonder een .proto bestand te maken een simpel object serialized/deserialized - ik denk niet dat ik die nodig ga hebben. 2 decennia geleden dat ik C#/Visual Studio heb gebruikt haha.

Afijn, ik heb JetBrains Dotpeek gedownload en in de Protocol.Serializer.dll van het spel kom ik inderdaad [ProtoContract]s tegen.


Dus vermoedelijk als ik in dotpeek export to project doe, daar mijn eigen code omheen schrijf die Serializer.Deserialize uitvoert dat ik de data verkrijg die ik wil hebben. En vervolgens nog wat andere stappen moet uitvoeren om de boel naar een logischer formaat om te zetten (opslaan in sqlite of json b.v.). Geen flauw idee of me dat gaat lukken maar wie niet waagt wie niet wint nietwaar?

* Xthemes.us is een beetje overwelmt, gamemaster file voor Pokémon Go in json formaat van Github downloaden was een stuk simpeler!

MSI GX640 - 8GB RAM, Radeon 5970, 80GB SSD

Pagina: 1


OnePlus 7 Pro (8GB intern) Nintendo Switch Lite LG OLED C9 Google Pixel 3a XL FIFA 19 Samsung Galaxy S10 Sony PlayStation 5 AMD

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True