4.0 KiB
4.0 KiB
STATE.md — Symfonium/Symphonium Patch State
Status: SYMPHONIUM 14.1.0 WORKING ✓ — License + Crypto + Telemetry all bypassed
Target version
| Version | APK | Status |
|---|---|---|
| Symphonium 14.1.0 (mobile) | Symphonium 14.1.apk |
Working — license + crypto + telemetry bypassed |
Patch layers applied (v4 — 14.1.0)
Working directory: apktool_output_v4/, build script: patch_v4.py
1. License gate class: smali/nh3.smali (FirebaseManager)
| Method | Purpose | Patch stub |
|---|---|---|
m() |
Main license gate — all paths converge, sets hg5.y flag |
Returns true, sets hg5.y = true |
b() |
KeyCheck — Base64 "S2V5Y2hlY2s=" → "KeyCheck", compares hex hash | Returns Boolean.TRUE |
c() |
RSA decryption validation | Returns null |
d() |
Firebase initialization ("Problem getting instance") | Returns null — fixes beta popup |
h() |
Firebase Remote Config check, triggers error state → beta UI + VolumeShaper mute | Returns Integer(0) |
j() |
Date check (contains "2099") for infinite license | Returns Boolean.TRUE |
k() |
License state check (46=IAB, 62/67=date-based) | Returns Boolean.TRUE |
r() |
License expiration date formatter | Returns null |
2. Native crypto: smali/app/symfonik/crypto/internal/LibSymfonikWrapper.smali
b() method stub:
- Stores handler param in static field
c - Calls
System.loadLibrary("symfonik")in try/catch (loadslibsymfonik.sofor nativeget()/set()) - Sets loaded flag
b = Boolean.TRUE - Posts init callback via handler
Lrc5.a
Critical: field types change per version. For v4 (14.1.0):
HandlerInitializable$handler$1.a→La04(wasLr60in v3)HandlerInitializable$handler$1implements →Lvz3(wasLsa3in v3)- Handler class →
Lrc5(wasLa35in v3) Lqlconstructor arg →0x14(was0x1cin v3)
3. Telemetry nuke
| System | Smali | Method | Patch |
|---|---|---|---|
| Firebase Analytics | FirebaseAnalytics.smali |
a() logEvent / setCurrentScreen() |
Returns void (no-op) |
| Matomo/Piwik | oa2.smali |
b() dispatch |
Returns void (no-op) |
| Crashlytics | b70.smali |
j() settings fetch |
Returns null |
| Firebase Installations | vg3.smali |
c() HTTP connection |
Returns null |
4. Config
| File | Change |
|---|---|
apktool.yml |
minSdkVersion 32 → 26 (for v2+v3 signing) |
NOT YET PATCHED
- VolumeShaper — audio fade-out DRM not yet bypassed in v4
- AndroidManifest.xml —
requiredSplitTypesnot yet removed
Build commands
# Decompile
java -Xmx4G -jar apktool.jar d "Symphonium 14.1.apk" -o apktool_output_v4/
# Patch
python3 patch_v4.py
# Cleanup bak files
find apktool_output_v4/ -name '*.smali.bak' -delete
# Rebuild
java -Xmx4G -jar apktool.jar b apktool_output_v4/ -o patched_v4_unsigned.apk
# Sign
java -jar uber-apk-signer.jar --apks patched_v4_unsigned.apk \
--ks patch-keystore.jks --ksAlias symfonium \
--ksPass android --ksKeyPass android
Crash fixes applied
| # | Error | Root cause | Fix |
|---|---|---|---|
| 1 | NoSuchFieldError: No field a of type Lr60 in HandlerInitializable$handler$1 |
Field type changed: Lr60 → La04; Lql init arg 0x1c → 0x14 |
Updated stub field ref and constant |
| 2 | UnsatisfiedLinkError: get() native method |
Stub was missing System.loadLibrary("symfonik") |
Added try/catch loadLibrary block |
Signing
uber-apk-signer.jar— signing toolpatch-keystore.jks— primary (alias:symfonium, pass:android)my-release-key.jks— alternative
Known remaining issues
- Rapid skip exits player — pre-existing app bug (concurrency/race condition). Workaround: skip at normal pace.
- VolumeShaper not patched on v4 — audio fade-out DRM may activate.
Prior versions (archived)
- Symphonium 13.6.5a — class:
m9/a0, flag:ws/a.v, handler:La35 - Symfonium TV 14.0.0 — class:
za3, flag:r65.y - Symfonium 2.1.0 — not patched