This article is for education purpose only, I did this to gain some real life experience, won’t provide the modded apk. If you want the premium features I recommend to buy a license due it’s low price.

Wo Mic is developed by Wolicheng Tech to bridge a phone’s microphone to a pc what doesn’t have any microhone connected.

There’s 2 things behind a paywall:

  • Volume changing
  • No ADS

Download

Volume changing

Open the original app and try to increase or decrease the volume, it says “Volume adjustment is a premium feature. Subscribe now?”, this is our starting point.

In jadx-gui open the apk and search for the string Volume adjustment is and we find a reference in res/values/string.xml, open it. The string is stored in the info_volume_premium_feature variable, check where is it used with string search again. In the MainActivity it’s assigned to the string variable.

public final void C(int i) {
    c.c.a.c cVar = this.s;
    if (cVar.f) {
        cVar.e(i);
        if (this.z) {
            VoiceService.this.f.m = i;
        }
        Toast.makeText(this, "New volume level: " + i, 0).show();
        return;
    }
    cVar.e(5);
    if (this.u) {
        return;
    }
    String string = getString(R.string.info_volume_premium_feature);
    ...
}

By default cVar.f is false, because we don’t have an active license. It would be hard to patch the whole premium checking. The thing we do is changing if (cVar.f) {} to if (!cVar.f) {}.

First decompile the apk.

apktool d app-release-4_7_1.apk

Then search for the if statement in smali source code.

$ cd app-release-4_7_1 && grep -rwn 'New volume level:'
smali/com/wo/voice2/MainActivity.smali:848:    const-string v1, "New volume level: "

It’s in line 848, a bit above we see 2 if-eqz, these are the if statements, we will need the first one. if-eqz is if equal basically, we want the opposite, so we change if-eqz to if-nez which is if not equal, so we get the premium feature if we don’t have an active license.
This is how it should look now:

.line 2
iget-boolean v1, v0, Lc/c/a/c;->f:Z

const/4 v2, 0x0

if-nez v1, :cond_1

.line 3
invoke-virtual {v0, p1}, Lc/c/a/c;->e(I)V

.line 4
iget-boolean v0, p0, Lcom/wo/voice2/MainActivity;->z:Z

if-eqz v0, :cond_0

We’re done with the half of the work. In the hamburger menu we can change the volume now.

No Ads

Coming soon™

Install

Build

apktool b app-release-4_7_1 -o mod_app-release-4_7_1.apk

Keygen

keytool -genkey -v -keystore mod-app-release-4_7_1.keystore -alias mod_app-release-4_7_1 -keyalg RSA -keysize 2048 -validity 10000

Keygen is required to sign the apk, the password must be more than 6 characters, but can be dummy, because we won’t use it anywhere else.

Sign

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mod-app-release-4_7_1 mod_app-release-4_7_1.apk mod_app-release-4_7_1

Just press enter everywhere where it ask for information, except where the prompt is [no]:, here we have to type yes.

Install

adb install mod_app-release-4_7_1.apk

Happy hacking!