Try UpShield for free

Harden your Android code withUpShield

Disguise variables and functions, encrypt sensitive strings, obscure logic with control flow flattening, and insert misleading dead code-all to make reverse engineering nearly impossible.

Code Obfuscation

Shield your logic from reverse engineering

Upshield transforms your Android code with advanced obfuscation-renaming variables, encrypting strings, and flattening control flow-to make your app unreadable to attackers without affecting performance.

android.java
/*
This file was obfuscated with UpShield. For more;
https://byterialab.com/
*/

package a;

import android.content.Context;
import android.content.pm.ApplicationInfo;

public final class _c9f2a4e07 {

    private static final int[] _f1b3c0d9 = { 0x7A3F19C5, 0x2E6D85B1, 0x4F92A07D, 0xB3C1F45E, 0x19E2D8A3, 0x6D40BF27 };
    private static final int[] _f9c20e6a = { 0x58A3D91F, 0x0E4C77B2, 0x7D2A6F40, 0xC15B3E89, 0x3C6EF205, 0x1F77D4E0 };
    private static final int _f4e8a1c2 = ((0x2C2E << 1) ^ 0x5A41);
    private static final int _f6b1d840 = ((0x1AF0 << 1) ^ 0x73E5);
    private static long _f0a77b51 = 0x4F92A07DB3C1F45EL;
    private static int _f2e90c17 = 0x58A3D91F;

    static {
        int _v0 = _f4e8a1c2 ^ _f6b1d840;
        for (int _v1 = 0; _v1 < (_v0 & 7); _v1++) {
            _f2e90c17 = (_f2e90c17 >>> 1) ^ ((_f2e90c17 & 1) * 0xA2349C6B);
        }
        if ((_f2e90c17 | 1) == (_f2e90c17 & ~1)) { _f0a77b51 = ~_f0a77b51; }
    }

    private static int _m8d2e44b1(int _p3f9c0a17, double _p7c12a4b9) {
        int slot7733 = _p3f9c0a17;
        for (int _v0 = 0; _v0 < (slot7733 & 7); _v0++) {
            slot7733 = (slot7733 >>> 1) ^ ((slot7733 & 1) * 0xA2349C6B);
        }
        if ((slot7733 ^ 0x53E8B107) == ~(slot7733 ^ 0x53E8B107)) {
            return (int) _p7c12a4b9;
        }
        return Integer.rotateLeft(slot7733, 3) ^ (_f1b3c0d9[slot7733 & 5] - 0x11);
    }

    public static boolean _k4be77f21(Context _p3f9c0a17) {
        int _v0 = 0x37B1;
        boolean _v2 = false;
        int node4821 = (_p3f9c0a17 == null) ? 0x19 : 0x2E;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x1D88: {
                    int iter3290 = node4821 ^ 0x6D40BF27;
                    iter3290 = (iter3290 & 0x91B3E5A4) | (iter3290 & ~0x91B3E5A4);
                    if ((iter3290 | 1) == (iter3290 & ~1)) { _v2 = !_v2; }
                    _v0 = 0x37B1; break;
                }
                case 0x6622: {
                    int chunk1907 = _f9c20e6a[(node4821 ^ 0x3) & 5];
                    chunk1907 = Integer.rotateLeft(chunk1907, 4) - (node4821 | 0x7);
                    long delta2240 = 1L;
                    for (int _v3 = 1; _v3 < (chunk1907 & 5) + 1; _v3++) {
                        delta2240 = (delta2240 * 0x7D2A6F40L) % 0x7FFFFFFFL;
                    }
                    if ((delta2240 & 1L) == ((delta2240 & 1L) ^ 1L)) { node4821 = (int) delta2240; }
                    _v0 = 0x1D88; break;
                }
                case 0x489D: {
                    java.lang.StringBuilder frame5103 = new java.lang.StringBuilder();
                    frame5103.append("u").append((node4821 | _f6b1d840) - (node4821 & _f6b1d840)).reverse();
                    if (frame5103.length() < 0) { node4821 = frame5103.length(); }
                    int token8821 = (node4821 > 0) ? (node4821 + ~0x11 + 1) : (~node4821 + 1);
                    int delta3140 = (token8821 | node4821) - (token8821 & node4821);
                    if ((delta3140 ^ 0x2B) == ~(delta3140 ^ 0x2B)) { _v2 = !_v2; }
                    _v0 = 0x6622; break;
                }
                case 0x37B1: {
                    _v2 = _w7731c0();
                    int tally2901 = (node4821 * 0x2E6D85B1) + 0x39E7;
                    if ((tally2901 ^ 0x1F77) == ~(tally2901 ^ 0x1F77)) { _v2 = !_v2; }
                    _v0 = 0x2A0F; break;
                }
                case 0x2A0F: {
                    _v2 = _v2 || _w2204a8(_p3f9c0a17);
                    long mod1180 = 1L;
                    for (int _v3 = 1; _v3 < (node4821 & 7) + 1; _v3++) {
                        mod1180 = (mod1180 * 0x6D40BF27L) % 0x7FFFFFFFL;
                    }
                    if ((mod1180 & 1L) == ((mod1180 & 1L) ^ 1L)) { _v2 = !_v2; }
                    _v0 = 0x0C53; break;
                }
                case 0x4416: {
                    int carry4410 = 0x91B3E5A4;
                    for (int _v3 = 0; _v3 < (node4821 & 15); _v3++) {
                        carry4410 = (carry4410 >>> 1) ^ ((carry4410 & 1) * 0xA2349C6B);
                    }
                    if ((carry4410 | 1) == (carry4410 & ~1)) { node4821 = carry4410; }
                    _v2 = _v2 || _k5f1b9d70();
                    _v0 = 0x0000; break;
                }
                case 0x0C53: {
                    _v2 = _v2 || _k2a8c0e44();
                    _v0 = 0x4416; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _k1c0a9b22() {
        int _v0 = 0x6E20;
        boolean _v2 = false;
        while (_v0 != 0x0000) {
            if (_v0 == 0x6E20) {
                _v2 = android.os.Debug.isDebuggerConnected();
                int bias7720 = (_h0() | 3) - (_h0() & 3);
                if ((bias7720 ^ 0x7F) == ~(bias7720 ^ 0x7F)) { _v2 = !_v2; }
                _v0 = 0x55C1;
            } else if (_v0 == 0x2F09) {
                int pick5512 = (_h1(7) > _h1(3)) ? _h1(7) : _h1(3);
                if ((pick5512 | 1) < (pick5512 & ~1)) { _v2 = !_v2; }
                _v0 = 0x55C1;
            } else if (_v0 == 0x55C1) {
                _v2 = _v2 || android.os.Debug.waitingForDebugger();
                _v0 = 0x0000;
            } else {
                _v0 = 0x0000;
            }
        }
        return _v2;
    }

    private static boolean _k7d3e5f08(Context _p3f9c0a17) {
        int _v0 = 0x12FE;
        boolean _v2 = false;
        int _v3 = 0;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x12FE: {
                    _v3 = _p3f9c0a17.getApplicationInfo().flags;
                    java.lang.StringBuilder frame3301 = new java.lang.StringBuilder();
                    frame3301.append("z").append(_v3).reverse();
                    if (frame3301.length() < 0) { _v3 = frame3301.length(); }
                    _v0 = 0x39B5; break;
                }
                case 0x2614: {
                    int carry8810 = Integer.rotateLeft(_v3, 5);
                    carry8810 = (carry8810 | 0x2E6D85B1) - (carry8810 & 0x2E6D85B1);
                    if ((carry8810 ^ 0x4C13) == ~(carry8810 ^ 0x4C13)) { _v3 = carry8810; }
                    _v0 = 0x39B5; break;
                }
                case 0x39B5: {
                    _v2 = ((_v3 & ApplicationInfo.FLAG_DEBUGGABLE) ^ 0) != (0 & 0x7FFFFFFF);
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static int _h0() { return _f1b3c0d9[(_f4e8a1c2 ^ 0x3) & 5]; }

    private static int _h1(int _p0) { return _f1b3c0d9[_p0 & 5] ^ _f4e8a1c2; }

    private static boolean _k2a8c0e44() {
        int _v0 = 0x0B7E;
        boolean _v2 = false;
        StackTraceElement[] _v4 = Thread.currentThread().getStackTrace();
        int _v5 = 0;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x4D31: {
                    try {
                        java.lang.Class _vc = java.lang.Class.forName("java.lang.Integer");
                        int _vh = _vc.getName().length();
                        if ((_vh ^ 0x3C19) == ~(_vh ^ 0x3C19)) { _v5 = _vh; }
                    } catch (Throwable _ignore) { }
                    _v0 = 0x0B7E; break;
                }
                case 0x0B7E: {
                    _v0 = (_v5 < _v4.length) ? 0x3A90 : 0x1FE4;
                    break;
                }
                case 0x3A90: {
                    StackTraceElement _v6 = _v4[_v5];
                    if (_v6.getClassName().contains(_w0a1b2c3d("k3Hf9Qa2bZ0xVc7Lm8Td4We6Yf1Ug5Rh==", -1039781823, 84512, 3, 17, 44))) {
                        _v2 = true; _v0 = 0x1FE4; break;
                    }
                    _v5 = _v5 + 1;
                    _v0 = 0x0B7E; break;
                }
                case 0x1FE4: {
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _k5f1b9d70() {
        int _v0 = 0x70A1;
        boolean _v2 = false;
        java.io.BufferedReader _v3 = null;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x70A1: {
                    try {
                        java.lang.Process _v4 = Runtime.getRuntime().exec(new String[] {
                            _w0a1b2c3d("Qm5Xa0Lp7Td9Vc2Ze4Yf==", 148, 264, 1, 0, 0),
                            _w0a1b2c3d("Lk9Zd==", 401, 929, 4, 7, 2)
                        });
                        _v3 = new java.io.BufferedReader(new java.io.InputStreamReader(_v4.getInputStream()));
                        _v0 = 0x5C18; break;
                    } catch (Throwable _vt) {
                        int carry4002 = 0x91B3E5A4;
                        for (int _v5 = 0; _v5 < (carry4002 & 7); _v5++) {
                            carry4002 = (carry4002 >>> 1) ^ ((carry4002 & 1) * 0xA2349C6B);
                        }
                        if ((carry4002 | 1) == (carry4002 & ~1)) { _v2 = !_v2; }
                        _v0 = 0x0000; break;
                    }
                }
                case 0x5C18: {
                    try {
                        String _v6;
                        while ((_v6 = _v3.readLine()) != null) {
                            boolean _v7 = _v6.contains(_w0a1b2c3d("Ze4Yf1Ug5Rh==", 399, 431, 2, 5, 9))
                                       || _v6.contains(_w0a1b2c3d("Td9Vc==", 401, 929, 0, 0, 0));
                            if (_v7) { _v2 = true; break; }
                            int tally9020 = 1;
                            for (int _v8 = 1; _v8 < 4; _v8++) { tally9020 = (tally9020 * 0x6D40BF27) ^ _v8; }
                            if ((tally9020 & 1) == ((tally9020 & 1) ^ 1)) { _v2 = !_v2; }
                        }
                        _v3.close();
                    } catch (Throwable _vt) { }
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _w7731c0() { return _wcc1042(); }

    private static boolean _wcc1042() { return _w9a0233(); }

    private static boolean _w9a0233() { return _k1c0a9b22(); }

    private static boolean _w2204a8(Context _p0) { return _wd1e6f4(_p0); }

    private static boolean _wd1e6f4(Context _p0) { return _we3b07a(_p0); }

    private static boolean _we3b07a(Context _p0) { return _k7d3e5f08(_p0); }

    static String _w0a1b2c3d(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        int _rk = _p1 ^ Integer.rotateLeft(_p4 ^ _p5, 5) ^ 0x7A3F19C5;
        int _rs = _p2 ^ Integer.rotateLeft(_p1, 11) ^ 0x2E6D85B1;
        return _p0j(_p0, _rk, _rs, (_p3 & 0x7) % 6, _p4, _p5);
    }

    private static String _p0j(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        int _hi = Integer.rotateLeft(_p1, 7) - ((_f2e90c17 | 0x3C6EF205) - (_f2e90c17 & 0x3C6EF205));
        int _lo = _p2 ^ Integer.rotateLeft(_p4 ^ _p5, 5) ^ 0x0E4C77B2;
        if ((_hi | 1) == (_hi & ~1)) { _lo = ~_lo; }
        return _l0c(_p0, _hi ^ _p1, _lo, _p3, _p4, _p5);
    }

    private static String _l0c(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        switch (_p3) {
            case 0: return _e03(_p0, _p1, _p2, _p4, _p5);
            case 1: return _e03(_p0, _p2, _p1, _p5, _p4);
            case 2: return _h14(_p0, _p1, _p2, _p4 ^ _p5);
            case 3: return _h14(_p0, _p1 + _p2, _p2 - _p1, _p4);
            case 4: return _u3a9f1c._e36(_p0, _p1 ^ _p2, _p4, _p5);
            default: return _u3a9f1c._h25(_p0, _p1, _p2 ^ _p4, _p5);
        }
    }

    private static String _e03(String _p0, int _p1, int _p2, int _p4, int _p5) {
        try {
            byte[] _vb = _us(_p0);
            int _q0 = _sk(_p1, _p2, _p4, _p5);
            for (int _vi = 0; _vi < _vb.length; _vi++) {
                int _q1 = _q0 ^ _mb(_p1, (_vi + 2) & 7) ^ _mb(_p2, (_vi ^ 0x5) & 12);
                _vb[_vi] = (byte) ((_vb[_vi] ^ _q1) + (_vi & 3));
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static String _h14(String _p0, int _p1, int _p2, int _p4) {
        try {
            byte[] _vb = _us(_p0);
            int _q0 = _sk(_p1, _p2, _p4, _p1 ^ _p2);
            for (int _vi = _vb.length - 1; _vi >= 0; _vi--) {
                int _q1 = _q0 ^ _mb(_p2, (_vi * 5 + 1) & 13);
                int _t = (_vb[_vi] & 0xFF) ^ _q1;
                _vb[_vi] = (byte) (((_t << 4) | (_t >>> 4)) & 0xFF);
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static int _sk(int _a, int _b, int _c, int _d) {
        int _s = 0x4F92A07D + (_a | 1) * 0x6D40BF27;
        _s = (_s ^ (_b * 0x8C5E1A93)) + Integer.rotateLeft(_c, 5);
        _s = (_s - Integer.rotateLeft(_d, 22)) ^ (_s >>> 9);
        return _s * 0x58A3D91F;
    }

    private static int _mb(int _k, int _i) { return Integer.rotateLeft(_k, _i) & 0xFF; }

    private static byte[] _us(String _e) {
        return android.util.Base64.decode(_e, android.util.Base64.DEFAULT);
    }

    private static double _m3c0188a2(int _p3f9c0a17, double _p7c12a4b9) {
        double tally6610 = _p7c12a4b9;
        for (int _v0 = 0; _v0 < (_p3f9c0a17 & 3); _v0++) {
            tally6610 = (tally6610 * 1.0000001d) + (_p3f9c0a17 & 1);
        }
        int frame5521 = (int) tally6610;
        if ((frame5521 | 1) < (frame5521 & ~1)) { return -tally6610; }
        return tally6610 + _f0a77b51;
    }

    private static int _m5a91c33(int _p3f9c0a17) {
        int slot2071 = _p3f9c0a17 ^ _f9c20e6a[_p3f9c0a17 & 5];
        slot2071 = (slot2071 + ~_f6b1d840 + 1);
        for (int _v0 = 0; _v0 < (slot2071 & 3); _v0++) {
            slot2071 = Integer.rotateLeft(slot2071, 7) ^ _f1b3c0d9[_v0 & 5];
        }
        if ((slot2071 | 1) < (slot2071 & ~1)) { return ~slot2071; }
        return slot2071;
    }

    private _c9f2a4e07() { }
}

final class _u3a9f1c {

    private static final int[] _f3d80b94 = { 0xC15B3E89, 0x3C6EF205, 0x7D2A6F40, 0x0E4C77B2 };
    private static int _f71c0a52 = 0x2E6D85B1;

    static String _e36(String _p0, int _p1, int _p2, int _p3) {
        try {
            byte[] _vb = _ub(_p0);
            int _q0 = _sk2(_p1, _p2, _p3);
            for (int _vi = 0; _vi < _vb.length; _vi++) {
                int _t = (_vb[_vi] & 0xFF) ^ _mb2(_q0, (_vi + 4) & 9) ^ _mb2(_p1, (_vi ^ 0x6) & 14);
                _vb[_vi] = (byte) (_t + (_vi & 5));
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    static String _h25(String _p0, int _p1, int _p2, int _p3) {
        try {
            byte[] _vb = _ub(_p0);
            int _q0 = _sk2(_p2, _p1, _p3 ^ _p1);
            for (int _vi = _vb.length - 1; _vi >= 0; _vi--) {
                int _t = (_vb[_vi] & 0xFF) ^ _mb2(_p2, (_vi * 5 + 2) & 11);
                _t = ((_t >>> 3) | (_t << 5)) & 0xFF;
                _vb[_vi] = (byte) _t;
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static int _sk2(int _a, int _b, int _c) {
        int _s = 0xC15B3E89 ^ ((_a | 1) * 0x0E4C77B2);
        _s = (_s + Integer.rotateLeft(_b, 6)) ^ (_c * 0x7D2A6F40);
        _s = (_s ^ (_s >>> 14)) - Integer.rotateLeft(_s, 25);
        return _s ^ _f71c0a52;
    }

    private static int _mb2(int _k, int _i) { return Integer.rotateLeft(_k, _i + 1) & 0xFF; }

    private static byte[] _ub(String _e) {
        return android.util.Base64.decode(_e, android.util.Base64.DEFAULT);
    }

    static int _w4f12c0(int _p0, int _p1) {
        int carry7240 = _p0;
        for (int _v0 = 0; _v0 < (_p1 & 7); _v0++) {
            carry7240 = (carry7240 >>> 1) ^ ((carry7240 & 1) * 0xA2349C6B);
        }
        if ((carry7240 ^ 0x4D17) == ~(carry7240 ^ 0x4D17)) { return ~carry7240; }
        return Integer.rotateLeft(carry7240, 6) ^ (_f3d80b94[_p1 & 3] - 0x29);
    }

    private _u3a9f1c() { }
}
obfuscated.java
/*
This file was obfuscated with UpShield. For more;
https://byterialab.com/
*/

package a;

import android.content.Context;
import android.content.pm.ApplicationInfo;

public final class _c9f2a4e07 {

    private static final int[] _f1b3c0d9 = { 0x7A3F19C5, 0x2E6D85B1, 0x4F92A07D, 0xB3C1F45E, 0x19E2D8A3, 0x6D40BF27 };
    private static final int[] _f9c20e6a = { 0x58A3D91F, 0x0E4C77B2, 0x7D2A6F40, 0xC15B3E89, 0x3C6EF205, 0x1F77D4E0 };
    private static final int _f4e8a1c2 = ((0x2C2E << 1) ^ 0x5A41);
    private static final int _f6b1d840 = ((0x1AF0 << 1) ^ 0x73E5);
    private static long _f0a77b51 = 0x4F92A07DB3C1F45EL;
    private static int _f2e90c17 = 0x58A3D91F;

    static {
        int _v0 = _f4e8a1c2 ^ _f6b1d840;
        for (int _v1 = 0; _v1 < (_v0 & 7); _v1++) {
            _f2e90c17 = (_f2e90c17 >>> 1) ^ ((_f2e90c17 & 1) * 0xA2349C6B);
        }
        if ((_f2e90c17 | 1) == (_f2e90c17 & ~1)) { _f0a77b51 = ~_f0a77b51; }
    }

    private static int _m8d2e44b1(int _p3f9c0a17, double _p7c12a4b9) {
        int slot7733 = _p3f9c0a17;
        for (int _v0 = 0; _v0 < (slot7733 & 7); _v0++) {
            slot7733 = (slot7733 >>> 1) ^ ((slot7733 & 1) * 0xA2349C6B);
        }
        if ((slot7733 ^ 0x53E8B107) == ~(slot7733 ^ 0x53E8B107)) {
            return (int) _p7c12a4b9;
        }
        return Integer.rotateLeft(slot7733, 3) ^ (_f1b3c0d9[slot7733 & 5] - 0x11);
    }

    public static boolean _k4be77f21(Context _p3f9c0a17) {
        int _v0 = 0x37B1;
        boolean _v2 = false;
        int node4821 = (_p3f9c0a17 == null) ? 0x19 : 0x2E;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x1D88: {
                    int iter3290 = node4821 ^ 0x6D40BF27;
                    iter3290 = (iter3290 & 0x91B3E5A4) | (iter3290 & ~0x91B3E5A4);
                    if ((iter3290 | 1) == (iter3290 & ~1)) { _v2 = !_v2; }
                    _v0 = 0x37B1; break;
                }
                case 0x6622: {
                    int chunk1907 = _f9c20e6a[(node4821 ^ 0x3) & 5];
                    chunk1907 = Integer.rotateLeft(chunk1907, 4) - (node4821 | 0x7);
                    long delta2240 = 1L;
                    for (int _v3 = 1; _v3 < (chunk1907 & 5) + 1; _v3++) {
                        delta2240 = (delta2240 * 0x7D2A6F40L) % 0x7FFFFFFFL;
                    }
                    if ((delta2240 & 1L) == ((delta2240 & 1L) ^ 1L)) { node4821 = (int) delta2240; }
                    _v0 = 0x1D88; break;
                }
                case 0x489D: {
                    java.lang.StringBuilder frame5103 = new java.lang.StringBuilder();
                    frame5103.append("u").append((node4821 | _f6b1d840) - (node4821 & _f6b1d840)).reverse();
                    if (frame5103.length() < 0) { node4821 = frame5103.length(); }
                    int token8821 = (node4821 > 0) ? (node4821 + ~0x11 + 1) : (~node4821 + 1);
                    int delta3140 = (token8821 | node4821) - (token8821 & node4821);
                    if ((delta3140 ^ 0x2B) == ~(delta3140 ^ 0x2B)) { _v2 = !_v2; }
                    _v0 = 0x6622; break;
                }
                case 0x37B1: {
                    _v2 = _w7731c0();
                    int tally2901 = (node4821 * 0x2E6D85B1) + 0x39E7;
                    if ((tally2901 ^ 0x1F77) == ~(tally2901 ^ 0x1F77)) { _v2 = !_v2; }
                    _v0 = 0x2A0F; break;
                }
                case 0x2A0F: {
                    _v2 = _v2 || _w2204a8(_p3f9c0a17);
                    long mod1180 = 1L;
                    for (int _v3 = 1; _v3 < (node4821 & 7) + 1; _v3++) {
                        mod1180 = (mod1180 * 0x6D40BF27L) % 0x7FFFFFFFL;
                    }
                    if ((mod1180 & 1L) == ((mod1180 & 1L) ^ 1L)) { _v2 = !_v2; }
                    _v0 = 0x0C53; break;
                }
                case 0x4416: {
                    int carry4410 = 0x91B3E5A4;
                    for (int _v3 = 0; _v3 < (node4821 & 15); _v3++) {
                        carry4410 = (carry4410 >>> 1) ^ ((carry4410 & 1) * 0xA2349C6B);
                    }
                    if ((carry4410 | 1) == (carry4410 & ~1)) { node4821 = carry4410; }
                    _v2 = _v2 || _k5f1b9d70();
                    _v0 = 0x0000; break;
                }
                case 0x0C53: {
                    _v2 = _v2 || _k2a8c0e44();
                    _v0 = 0x4416; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _k1c0a9b22() {
        int _v0 = 0x6E20;
        boolean _v2 = false;
        while (_v0 != 0x0000) {
            if (_v0 == 0x6E20) {
                _v2 = android.os.Debug.isDebuggerConnected();
                int bias7720 = (_h0() | 3) - (_h0() & 3);
                if ((bias7720 ^ 0x7F) == ~(bias7720 ^ 0x7F)) { _v2 = !_v2; }
                _v0 = 0x55C1;
            } else if (_v0 == 0x2F09) {
                int pick5512 = (_h1(7) > _h1(3)) ? _h1(7) : _h1(3);
                if ((pick5512 | 1) < (pick5512 & ~1)) { _v2 = !_v2; }
                _v0 = 0x55C1;
            } else if (_v0 == 0x55C1) {
                _v2 = _v2 || android.os.Debug.waitingForDebugger();
                _v0 = 0x0000;
            } else {
                _v0 = 0x0000;
            }
        }
        return _v2;
    }

    private static boolean _k7d3e5f08(Context _p3f9c0a17) {
        int _v0 = 0x12FE;
        boolean _v2 = false;
        int _v3 = 0;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x12FE: {
                    _v3 = _p3f9c0a17.getApplicationInfo().flags;
                    java.lang.StringBuilder frame3301 = new java.lang.StringBuilder();
                    frame3301.append("z").append(_v3).reverse();
                    if (frame3301.length() < 0) { _v3 = frame3301.length(); }
                    _v0 = 0x39B5; break;
                }
                case 0x2614: {
                    int carry8810 = Integer.rotateLeft(_v3, 5);
                    carry8810 = (carry8810 | 0x2E6D85B1) - (carry8810 & 0x2E6D85B1);
                    if ((carry8810 ^ 0x4C13) == ~(carry8810 ^ 0x4C13)) { _v3 = carry8810; }
                    _v0 = 0x39B5; break;
                }
                case 0x39B5: {
                    _v2 = ((_v3 & ApplicationInfo.FLAG_DEBUGGABLE) ^ 0) != (0 & 0x7FFFFFFF);
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static int _h0() { return _f1b3c0d9[(_f4e8a1c2 ^ 0x3) & 5]; }

    private static int _h1(int _p0) { return _f1b3c0d9[_p0 & 5] ^ _f4e8a1c2; }

    private static boolean _k2a8c0e44() {
        int _v0 = 0x0B7E;
        boolean _v2 = false;
        StackTraceElement[] _v4 = Thread.currentThread().getStackTrace();
        int _v5 = 0;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x4D31: {
                    try {
                        java.lang.Class _vc = java.lang.Class.forName("java.lang.Integer");
                        int _vh = _vc.getName().length();
                        if ((_vh ^ 0x3C19) == ~(_vh ^ 0x3C19)) { _v5 = _vh; }
                    } catch (Throwable _ignore) { }
                    _v0 = 0x0B7E; break;
                }
                case 0x0B7E: {
                    _v0 = (_v5 < _v4.length) ? 0x3A90 : 0x1FE4;
                    break;
                }
                case 0x3A90: {
                    StackTraceElement _v6 = _v4[_v5];
                    if (_v6.getClassName().contains(_w0a1b2c3d("k3Hf9Qa2bZ0xVc7Lm8Td4We6Yf1Ug5Rh==", -1039781823, 84512, 3, 17, 44))) {
                        _v2 = true; _v0 = 0x1FE4; break;
                    }
                    _v5 = _v5 + 1;
                    _v0 = 0x0B7E; break;
                }
                case 0x1FE4: {
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _k5f1b9d70() {
        int _v0 = 0x70A1;
        boolean _v2 = false;
        java.io.BufferedReader _v3 = null;
        while (_v0 != 0x0000) {
            switch (_v0) {
                case 0x70A1: {
                    try {
                        java.lang.Process _v4 = Runtime.getRuntime().exec(new String[] {
                            _w0a1b2c3d("Qm5Xa0Lp7Td9Vc2Ze4Yf==", 148, 264, 1, 0, 0),
                            _w0a1b2c3d("Lk9Zd==", 401, 929, 4, 7, 2)
                        });
                        _v3 = new java.io.BufferedReader(new java.io.InputStreamReader(_v4.getInputStream()));
                        _v0 = 0x5C18; break;
                    } catch (Throwable _vt) {
                        int carry4002 = 0x91B3E5A4;
                        for (int _v5 = 0; _v5 < (carry4002 & 7); _v5++) {
                            carry4002 = (carry4002 >>> 1) ^ ((carry4002 & 1) * 0xA2349C6B);
                        }
                        if ((carry4002 | 1) == (carry4002 & ~1)) { _v2 = !_v2; }
                        _v0 = 0x0000; break;
                    }
                }
                case 0x5C18: {
                    try {
                        String _v6;
                        while ((_v6 = _v3.readLine()) != null) {
                            boolean _v7 = _v6.contains(_w0a1b2c3d("Ze4Yf1Ug5Rh==", 399, 431, 2, 5, 9))
                                       || _v6.contains(_w0a1b2c3d("Td9Vc==", 401, 929, 0, 0, 0));
                            if (_v7) { _v2 = true; break; }
                            int tally9020 = 1;
                            for (int _v8 = 1; _v8 < 4; _v8++) { tally9020 = (tally9020 * 0x6D40BF27) ^ _v8; }
                            if ((tally9020 & 1) == ((tally9020 & 1) ^ 1)) { _v2 = !_v2; }
                        }
                        _v3.close();
                    } catch (Throwable _vt) { }
                    _v0 = 0x0000; break;
                }
                default: { _v0 = 0x0000; break; }
            }
        }
        return _v2;
    }

    private static boolean _w7731c0() { return _wcc1042(); }

    private static boolean _wcc1042() { return _w9a0233(); }

    private static boolean _w9a0233() { return _k1c0a9b22(); }

    private static boolean _w2204a8(Context _p0) { return _wd1e6f4(_p0); }

    private static boolean _wd1e6f4(Context _p0) { return _we3b07a(_p0); }

    private static boolean _we3b07a(Context _p0) { return _k7d3e5f08(_p0); }

    static String _w0a1b2c3d(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        int _rk = _p1 ^ Integer.rotateLeft(_p4 ^ _p5, 5) ^ 0x7A3F19C5;
        int _rs = _p2 ^ Integer.rotateLeft(_p1, 11) ^ 0x2E6D85B1;
        return _p0j(_p0, _rk, _rs, (_p3 & 0x7) % 6, _p4, _p5);
    }

    private static String _p0j(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        int _hi = Integer.rotateLeft(_p1, 7) - ((_f2e90c17 | 0x3C6EF205) - (_f2e90c17 & 0x3C6EF205));
        int _lo = _p2 ^ Integer.rotateLeft(_p4 ^ _p5, 5) ^ 0x0E4C77B2;
        if ((_hi | 1) == (_hi & ~1)) { _lo = ~_lo; }
        return _l0c(_p0, _hi ^ _p1, _lo, _p3, _p4, _p5);
    }

    private static String _l0c(String _p0, int _p1, int _p2, int _p3, int _p4, int _p5) {
        switch (_p3) {
            case 0: return _e03(_p0, _p1, _p2, _p4, _p5);
            case 1: return _e03(_p0, _p2, _p1, _p5, _p4);
            case 2: return _h14(_p0, _p1, _p2, _p4 ^ _p5);
            case 3: return _h14(_p0, _p1 + _p2, _p2 - _p1, _p4);
            case 4: return _u3a9f1c._e36(_p0, _p1 ^ _p2, _p4, _p5);
            default: return _u3a9f1c._h25(_p0, _p1, _p2 ^ _p4, _p5);
        }
    }

    private static String _e03(String _p0, int _p1, int _p2, int _p4, int _p5) {
        try {
            byte[] _vb = _us(_p0);
            int _q0 = _sk(_p1, _p2, _p4, _p5);
            for (int _vi = 0; _vi < _vb.length; _vi++) {
                int _q1 = _q0 ^ _mb(_p1, (_vi + 2) & 7) ^ _mb(_p2, (_vi ^ 0x5) & 12);
                _vb[_vi] = (byte) ((_vb[_vi] ^ _q1) + (_vi & 3));
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static String _h14(String _p0, int _p1, int _p2, int _p4) {
        try {
            byte[] _vb = _us(_p0);
            int _q0 = _sk(_p1, _p2, _p4, _p1 ^ _p2);
            for (int _vi = _vb.length - 1; _vi >= 0; _vi--) {
                int _q1 = _q0 ^ _mb(_p2, (_vi * 5 + 1) & 13);
                int _t = (_vb[_vi] & 0xFF) ^ _q1;
                _vb[_vi] = (byte) (((_t << 4) | (_t >>> 4)) & 0xFF);
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static int _sk(int _a, int _b, int _c, int _d) {
        int _s = 0x4F92A07D + (_a | 1) * 0x6D40BF27;
        _s = (_s ^ (_b * 0x8C5E1A93)) + Integer.rotateLeft(_c, 5);
        _s = (_s - Integer.rotateLeft(_d, 22)) ^ (_s >>> 9);
        return _s * 0x58A3D91F;
    }

    private static int _mb(int _k, int _i) { return Integer.rotateLeft(_k, _i) & 0xFF; }

    private static byte[] _us(String _e) {
        return android.util.Base64.decode(_e, android.util.Base64.DEFAULT);
    }

    private static double _m3c0188a2(int _p3f9c0a17, double _p7c12a4b9) {
        double tally6610 = _p7c12a4b9;
        for (int _v0 = 0; _v0 < (_p3f9c0a17 & 3); _v0++) {
            tally6610 = (tally6610 * 1.0000001d) + (_p3f9c0a17 & 1);
        }
        int frame5521 = (int) tally6610;
        if ((frame5521 | 1) < (frame5521 & ~1)) { return -tally6610; }
        return tally6610 + _f0a77b51;
    }

    private static int _m5a91c33(int _p3f9c0a17) {
        int slot2071 = _p3f9c0a17 ^ _f9c20e6a[_p3f9c0a17 & 5];
        slot2071 = (slot2071 + ~_f6b1d840 + 1);
        for (int _v0 = 0; _v0 < (slot2071 & 3); _v0++) {
            slot2071 = Integer.rotateLeft(slot2071, 7) ^ _f1b3c0d9[_v0 & 5];
        }
        if ((slot2071 | 1) < (slot2071 & ~1)) { return ~slot2071; }
        return slot2071;
    }

    private _c9f2a4e07() { }
}

final class _u3a9f1c {

    private static final int[] _f3d80b94 = { 0xC15B3E89, 0x3C6EF205, 0x7D2A6F40, 0x0E4C77B2 };
    private static int _f71c0a52 = 0x2E6D85B1;

    static String _e36(String _p0, int _p1, int _p2, int _p3) {
        try {
            byte[] _vb = _ub(_p0);
            int _q0 = _sk2(_p1, _p2, _p3);
            for (int _vi = 0; _vi < _vb.length; _vi++) {
                int _t = (_vb[_vi] & 0xFF) ^ _mb2(_q0, (_vi + 4) & 9) ^ _mb2(_p1, (_vi ^ 0x6) & 14);
                _vb[_vi] = (byte) (_t + (_vi & 5));
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    static String _h25(String _p0, int _p1, int _p2, int _p3) {
        try {
            byte[] _vb = _ub(_p0);
            int _q0 = _sk2(_p2, _p1, _p3 ^ _p1);
            for (int _vi = _vb.length - 1; _vi >= 0; _vi--) {
                int _t = (_vb[_vi] & 0xFF) ^ _mb2(_p2, (_vi * 5 + 2) & 11);
                _t = ((_t >>> 3) | (_t << 5)) & 0xFF;
                _vb[_vi] = (byte) _t;
            }
            return new String(_vb, java.nio.charset.StandardCharsets.UTF_8);
        } catch (Throwable _vt) { return _p0; }
    }

    private static int _sk2(int _a, int _b, int _c) {
        int _s = 0xC15B3E89 ^ ((_a | 1) * 0x0E4C77B2);
        _s = (_s + Integer.rotateLeft(_b, 6)) ^ (_c * 0x7D2A6F40);
        _s = (_s ^ (_s >>> 14)) - Integer.rotateLeft(_s, 25);
        return _s ^ _f71c0a52;
    }

    private static int _mb2(int _k, int _i) { return Integer.rotateLeft(_k, _i + 1) & 0xFF; }

    private static byte[] _ub(String _e) {
        return android.util.Base64.decode(_e, android.util.Base64.DEFAULT);
    }

    static int _w4f12c0(int _p0, int _p1) {
        int carry7240 = _p0;
        for (int _v0 = 0; _v0 < (_p1 & 7); _v0++) {
            carry7240 = (carry7240 >>> 1) ^ ((carry7240 & 1) * 0xA2349C6B);
        }
        if ((carry7240 ^ 0x4D17) == ~(carry7240 ^ 0x4D17)) { return ~carry7240; }
        return Integer.rotateLeft(carry7240, 6) ^ (_f3d80b94[_p1 & 3] - 0x29);
    }

    private _u3a9f1c() { }
}

Obfuscation-Driven Security

Make Your Code Unreadable

Upshield scrambles your Android app code with advanced obfuscation-encrypting strings, renaming symbols, and flattening logic-to block reverse engineering before it starts.

Integrate Upshield

Add the Upshield obfuscation module to your Android build process to begin protecting your code.

2

Apply Obfuscation Rules

Configure your obfuscation settings-rename symbols, encrypt strings, flatten logic, and inject dead code with ease.

3

Build & Ship Securely

Compile your app with hardened code that’s resilient to reverse engineering, tampering, and static analysis.

Step 1

Proven Protection

Lock down your Android code

Upshield defends your app at the code level with powerful obfuscation-guarding against reverse engineering, tampering, and static analysis with ease.

Advanced Code Obfuscation

Confuse and restructure code to make reverse engineering virtually impossible, without affecting performance or readability post-build.

Dynamic Encryption Layers

Apply multiple layers of encryption that adapt at runtime, making static analysis tools ineffective against your codebase.

Anti-Tamper Technology

Detect and neutralize unauthorized modifications or tampering attempts to preserve app integrity and trust.

Runtime Threat Detection

Monitor app behavior in real time to automatically flag or block debuggers, emulators, and root access.

Intelligent Signature Masking

Obscure app fingerprints and prevent identification by automated scanners or malware classification engines.

Lightning-Fast Integration

Integrate UpShield in minutes with a simple CLI or Gradle plugin. Zero bloat, maximum impact.

Dynamic Encryption

Bulletproof your app

UpShield is the fastest, most powerful obfuscation tool on the market-built to stop reverse engineering, block tampering, and keep your code safe in the wild.

Frequently Asked Questions

Everything you need to know about our platform

Still not convinced?

We're here to help you!