Unfortunately this will only work for textures, but it's the main use case we have anyways. The "new" future-proof method is using Nox with Ninja Ripper. Ninja Ripper hooks into Nox and reads its DirectX context, able to grab models, shaders, and textures, and spits them out as DirectX-compliant(?) assets. From there, you can use GIMP to read the DDS files, and flip them vertically.
We can still look towards decryption through snooping Assembly-CSharp.dll, but that's just to provide a smaller amount of convenience. With this new way, we don't have to bother compressing, transferring, unbundling, and sifting through Unity cached asset bundles, but instead, directly get to the goodies. In theory, this can also work with Utage, as they're already rendered too :upside_down:
Note: I necessarily won't write a guide, as my experience is very straightforward without any real modifications. However, this doesn't seem to work for others. Because of how little I did to get it working, I can't offer much advice on getting it working.
LF> New Methods
I guess here's where I'll write down my thoughts on asset extraction.
From release / creation of the wiki up until Valentines 2017 I think, our (Raku and I's) method of adding character portraits and icons were then same as the wikiwikis: just taking screenshots and cropping them. It wasn't a big deal, we didn't think we needed anything better. Then asset extraction paved the way to a higher quality wiki; no more need for uglies around the portraits, no more need for dealing with different resolution creating different scaling and messing with the dithering in the portraits. Sometimes we were able to grab more than what was available at the time (unused or abandoned assets, unreleased units too) due to how caching used to work where it downloads everything. Soon that changed to where only some things can get pre-cached, but, in short, it just ends up caching on demand rather than pre-caching. We still were able to dig in and grab things we want.
Fast forward to this morning; new gacha, new units, new things to rip. However, it seems the app now uses a "new" (unused for the game until now) method for caching assets, where it'll download an encrypted string, and in-app will decrypt it. It's sorta like Utage but apparently it's even in Unity's documentation here: . Seems like a brick wall to me, where even UAE won't do anything about it except just extracting the raw bytes itself. I believe somewhere on UAE's GitHub was mentioned to "feed" it the game's Assembly-CSharp.dll, and from there it can use the specific decrypt method in the dll. Seems relatively simple, as DevXUnity seems to be able to read all the way down to function headers and sometimes one-lined return statements. The demo seems to be able to recognize them fine, but I'm not too confident they can extract it, especially for a one-time-use program for a minimum of $100 or so shekels. I don't mind forking it over, but for something that may work seems kinda sketchy. But, it may let me completely decompile the game and read more than just one decryption function and, in theory, be able to run it on Windows, or any other things. The sky's the limit if it does work.
In short, assets are locked away, probably related to me foolishly Tweeting about internal assets, even though it's quite odd that LW will notice tweets of internal filenames, but not the wiki where assets and voice clips are plastered almost everywhere. I hope this isn't the end of asset extraction; it really ruins my morale for playing the game too and running the wiki, seeing that I can't provide the level of quality I have with actual assets rather than lame screenshots.
If anyone else has an idea, much less working method, much less even reads this, please let us know. I might end up burning the entire day scrambling over trying to get this to work.
To also put my thoughts into one place:
- https://github.com/DerPopo/UABE/issues/169 -> references needing Assembly-CSharp.dll
- http://devxdevelopment.com/ -> is able to at least get a peak at Assembly-CSharp.dll
- https://github.com/0xd4d/dnSpy -> allegedly can hook into C# calls
- https://www.alanzucconi.com/2015/09/02/a-practical-tutorial-to-hack-and-protect-unity-games/ -> mentions both diving into Assembly-CSharp.dll and a (probably simpler) way to just grab the geometry (hopefully it also grabs textures) itself.
The method seems to be:
- fork over money, cross fingers that Assembly-CSharp.dll is able to contain the decrypt function call, doing dubious and morally gray actions
- somehow magically intercept a bunch of calls on Android as referenced in the GitHub issue, going through the hell of finding a way to do it and where to hook and crossing fingers it works