A reupload of the SnapTools Private Repository. Unfortunately a fresh repository is required as there were many commits with private information such as developer keys and certificates.
Check out the SnapTools Website for a brief rundown of the project!
I will be going through the project and adding additional javadocs as the project deserves a more professional format. If there is any specific code or file that you wish for me to clear up, please feel free to Open An Issue thread and I'll do my best to provide information on the topic, however be sure to check out the Points Of Interest section below for the more important systems in the app.
It should be noted that this source is not intended to be built directly into a directly functional APK, it will require adjustments as certain required files have been redacted due to containing private information (Such as google_services.json, RedactedClasses, and the certificates located in the Debug and Release Assets folders)
A user created promotional video by John Luke
The entry point for Xposed based code. Todo: Add more comments.
Responsible for managing the loading and injecting of ModulePacks.
The interface between the framework and the dynamically loaded ModulePackImpl code.
An implementation of ModulePack with the loading and injection systems in place to manage the internal hooking code.
Responsible for efficiently generating and caching references to Hooks and HookClasses.
The majority of the application initialisation and EventBus subscriptions.
The following are some support plugins that I created with the intent of automating or making workflow easier. If people are interested I will make separate repositories for these plugins.
- StringEncryptorPlugin - A plugin that provides an Encrypt Strings function in the right click menu (And can also be bound to a key). This function will automatically replace string literals with the decryptString(...) function (Or reverse an already encrypted string), however the encryption key has been hardcoded into the plugin as it was only intended for personal use. If this library is sought after, let me know and I'll fix it up!
- ApkVersionPlugin - A plugin that scans for @FrameworkVersion(versionInt) annotations on methods and displays an error to the developer when there are no conditional checks for when the build version of the app is higher than the build version of the method being called. Again, this has hardcoded values as I never anticipated making the plugin public source. If this is something that interests you, let me know and I'll do what I can!
- MappingMerger - As proguard doesn't offer the ability to maintain static and incremental obfuscation, I had to create my own scripts to automatically merge the previously generated proguard file with the pre-proguard mappings file (The file that tells proguard what to name each function) and have the ability to re-include any lost mappings from previous builds as proguard strips out unused mappings that we may need for alternate builds. An implementation (Although crude) can be seen HERE
Finally I would like to take a short moment to say that I have enjoyed every moment of this project thoroughly, even though at times it can be extremely stressful. The community, the friends I've made, and the things I've learnt from this venture has been truly exceptional and hopefully it has been as enjoyable for those that got to experience it as it was for me.