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: 19-10 14:08
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


  • Creepy
  • Registratie: juni 2001
  • Laatst online: 17:24

Creepy

Moderator Devschuur®

Tactical Espionage Splatterer

Je gaat mij niet vertellen dat je gezocht hebt hoe je een protobuf bestand moet openen...... als je dat doet kom je een hoop zaken tegen zoals https://github.com/protocolbuffers/protobuf/issues/4232

RobIII wijzigde deze reactie 12-06-2019 16:47 (1%)

We're building self-driving cars, but we haven't even figured out how to make sure vacuum cleaners don't join botnets.


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 19-10 14:08
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


Acties:
  • +1Henk 'm!

  • DukeBox
  • Registratie: april 2000
  • Laatst online: 17:46

DukeBox

Voor je 't weet wist je 't nie

Begin op zijn minst eens met een hex editor.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • +1Henk 'm!

  • alex3305
  • Registratie: januari 2004
  • Laatst online: 12-11 18:27
Indedaad wat @DukeBox zegt en probeer ook eens het file commando onder Linux of eventueel een website zoals http://checkfiletype.com/ . Dat je zeker weet dat je met protobuf te maken hebt. Het zou mij namelijk niet verbazen als de bestanden ingepakt, geëncrypt zijn of eventueel padding hebben. Dan hoeft extensie niet alles te zeggen.

  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 19-10 14:08
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


  • Freeaqingme
  • Registratie: april 2006
  • Laatst online: 18:42
je laat zien dat je die .pb file in een text editor opent. Kan het zijn dat ergens onderweg een proces die binary file vernacheld heeft? Maak eens een md5sum van die file op je telefoon, en doe datzelfde eens met wat je aan protoc voert?

Heb je wel de laatste versie van protoc (iig eentje die protobuf3 ondersteunt)?

Edit: De hex-editor zal niet heel veel uithalen. Bij protobuf is alles in principe gecomprimeerd, dus je kijkt naar een gecomprimeerde binaire file. Knappe jongen die daar iets mee kan doen met een hex-editor.

Freeaqingme wijzigde deze reactie 12-06-2019 16:53 (24%)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • +1Henk 'm!

  • NotAFarmer
  • Registratie: april 2018
  • Laatst online: 08-11 09:55
Ik heb zelf even de apk gedownload van het spelletje en er wordt gebruik gemaakt van protobuf-net (https://github.com/mgravell/protobuf-net)

Ik weet niet of protoc compatible is met protobuf-net. Maar ik hoop dat ik je zoektoch hiermee toch een beetje in goede banen kan leiden.

  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 19-10 14:08
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


Acties:
  • +1Henk 'm!

  • .oisyn
  • Registratie: september 2000
  • Nu online

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

NotAFarmer schreef op woensdag 12 juni 2019 @ 17:00:
Ik heb zelf even de apk gedownload van het spelletje en er wordt gebruik gemaakt van protobuf-net (https://github.com/mgravell/protobuf-net)

Ik weet niet of protoc compatible is met protobuf-net. Maar ik hoop dat ik je zoektoch hiermee toch een beetje in goede banen kan leiden.
Van die site:
protobuf-net is a contract based serializer for .NET code, that happens to write data in the "protocol buffers" serialization format engineered by Google
Het formaat lijkt me dus wel hetzelfde. Maar misschien dat de app zelf er ook nog iets mee doet.

We were doomed from the start. I guess all that remains now is for the captain to go down with the ship.
- That's surprisingly noble of you, sir.
No, it's noble of you, Kif! As of now, you're in command. Congratulations, Captain!


Acties:
  • +1Henk 'm!

  • EddoH
  • Registratie: maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Hou er rekening mee dat je niet veel met de gedecodeerde data kunt zonder uitgebreide reverse-engineering. Zonder .proto file mis je veldnamen en andere info, en zie je niet veel meer dat een hele sloot aan values met hun field index.

Overigens : https://protogen.marcgravell.com/decode

  • Hydra
  • Registratie: september 2000
  • Laatst online: 17:35
Vanuit de .proto file wordt (in dit geval waarschijnlijk Java) code gegenereerd die de mapping tussen het binaire transportformaat en de door de app gebruikte (Java) code doet. De makkelijkste manier om hier gebruik van te maken is de code te decompilen. Zonder de .proto file weet je niet hoe je dat binaire formaat moet interpreteren, en daar zonder code achterkomen is erg veel trial and error.

https://niels.nu


  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 19-10 14:08
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


Acties:
  • +1Henk 'm!

  • RobIII
  • Registratie: december 2001
  • Laatst online: 18:18

RobIII

Moderator Devschuur®

^ Romeinse 3 ja!

:X Nee hoor ;) Een publickeytoken ;) Dat is gewoon meta-data (een hash van een public key) voor het laden van een (signed / "strong named") assembly en om te controleren of de juiste versie van de assembly dan geladen is.
Xthemes.us schreef op vrijdag 14 juni 2019 @ 17:19:
Wellicht dat i.p.v. een .proto één van deze DLLs of wellicht beide worden gebruikt om dat doel te vervullen?
Dat zou kunnen. Als je 't spul eens door reflector, ILSpy, dotPeek o.i.d. gooit?

RobIII wijzigde deze reactie 14-06-2019 17:35 (63%)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Gomez12
  • Registratie: maart 2001
  • Laatst online: 17:02
Xthemes.us schreef op vrijdag 14 juni 2019 @ 17:19:
De Protocol.dll die in de game verscheept wordt met de Hex editor geopend en die lijkt interessante data te bevatten.
...
En in Protocol.Serializer.dll
...
Wellicht dat i.p.v. een .proto één van deze DLLs of wellicht beide worden gebruikt om dat doel te vervullen?
Het is niet ipv een .proto, het is in combinatie met een .proto (model).

Wat ik vermoed dat je hier gewoon aan het bekijken bent naar gewoon de dll's van protobuf.net, oftewel redelijk irrelevant want je kan die source gewoon op GitHub vinden.

Is het überhaupt wel een offline game, of zal de data die je zoekt niet gewoon server-side staan? Daar zou ik het namelijk neerzetten zodat je het kan bijstellen als dat nodig is...

  • Xthemes.us
  • Registratie: juli 2004
  • Laatst online: 19-10 14:08
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


  • .oisyn
  • Registratie: september 2000
  • Nu online

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Hoe dan ook is de data bewerkt, want wat ik erover gelezen heb kan data niet met een 0x24 beginnen. Een deflate stream is op zich mogelijk, maar ik heb niet verder gekeken dan de eerste byte.

.oisyn wijzigde deze reactie 14-06-2019 21:38 (31%)

We were doomed from the start. I guess all that remains now is for the captain to go down with the ship.
- That's surprisingly noble of you, sir.
No, it's noble of you, Kif! As of now, you're in command. Congratulations, Captain!


  • Freeaqingme
  • Registratie: april 2006
  • Laatst online: 18:42
@.oisyn puur uit nieuwsgierigheid, heb je daar een bron van?

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • +1Henk 'm!

  • .oisyn
  • Registratie: september 2000
  • Nu online

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

@Freeaqingme Google's eigen docs over het protocol. De onderste 3 bits (0b100) is het wire type. Laat 4 nou net een deprecated type zijn en bovendien een einde van iets.

.edit: ah hier: https://developers.google.com/protocol-buffers/docs/encoding
4 is het eind van een group

.oisyn wijzigde deze reactie 14-06-2019 23:15 (23%)

We were doomed from the start. I guess all that remains now is for the captain to go down with the ship.
- That's surprisingly noble of you, sir.
No, it's noble of you, Kif! As of now, you're in command. Congratulations, Captain!

Pagina: 1


Apple iPhone 11 Nintendo Switch Lite LG OLED C9 Google Pixel 4 FIFA 20 Samsung Galaxy S10 Sony PlayStation 5 Elektrische auto

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True