PCrypt renames, encrypts, transpiles to native, and virtualizes your crown-jewel logic — in a single upload. Decompilers emit spaghetti. Crackers hit a per-build VM. Your code just runs.
No credit card · runs locally or in your CI · output still passes your tests
Same method, six layers deep — each tab is what a decompiler actually recovers at that protection level.
public boolean checkLicense(String key) {
long h = -3750763034362895579L;
for (int i = 0; i < key.length(); ++i) {
h = (h ^ (long)key.charAt(i)) * 0x100000001B3L;
}
if (h == 0x8D39ACB12EE3F7L) {
this.unlocked = true;
return true;
}
System.out.println("Invalid license key");
return false;
}
public boolean a(String string) {
long l = -3750763034362895579L;
for (int i = 0; i < string.length(); ++i) {
l = (l ^ (long)string.charAt(i)) * 0x100000001B3L;
}
if (l == 0x8D39ACB12EE3F7L) {
this.a = true;
return true;
}
System.out.println("Invalid license key");
return false;
}
public boolean l(String I) {
long l2 = -3750763034362895579L ^ pcrypt.Nk.l0;
for (int i2 = 0; i2 < I.length(); ++i2) {
l2 = (l2 ^ (long)I.charAt(i2)) * ((1099511628211L - pcrypt.Nk.l1) + pcrypt.Nk.l1);
}
if (l2 == ((39816997182238L ^ pcrypt.Nk.l0) + pcrypt.Nk.l1)) {
this.lI = true;
return true;
}
System.out.println(pcrypt.Sd.d("ßñÇá¶©÷¬âµª", 1769481216));
return false;
}
public boolean a(String string) {
long l = b.a(0x6F3A);
if ((Op.a * (Op.a + 1) & 1) != 0) {
System.out.println((int)(Op.a ^ Op.b) * Op.c);
}
int n = 0;
while ((Op.b ^ Op.b) == 0) {
if (n >= (int)invokedynamic length(string) /*BSM pcrypt/Ih*/) break;
long ch = (long)(char)invokedynamic charAt(string, n) /*BSM pcrypt/Ih*/;
l = (l ^ ch) * 0x100000001B3L;
++n;
}
if ((Op.c - Op.c) != 0 || l != b.a(0x41D8)) {
System.out.println(b.a(0x2E91));
return false;
}
invokedynamic unlocked(this, true) /*BSM pcrypt/Fh*/;
return true;
}
/*
* Decompiled with CFR 0.152.
*/
static {
Rt.load(a.class.getClassLoader()); // pcrypt/Rt -> System.load(native lib)
}
/*
* No Code attribute: body transpiled to native, nothing left to decompile.
*/
public native boolean checkLicense(String var1);
// In libpcrypt-windows-x64.dll (companion, regenerated per build):
// - symbols stripped; no Java_..._checkLicense export (JNI_OnLoad RegisterNatives)
// - real entry point is pcf_3af9c1e7d204, a meaningless hashed name
// - all name/string bytes XOR'd under a volatile per-build key, decoded on use
// JADX still shows: public native boolean checkLicense(String) -- body lives in the .so:
static jlong pc_vrun(JNIEnv* env, const int* _e, int _n, jlong* L) {
jlong S[256]; int sp = 0, pc = 0;
int _p[4096];
for (int _i = 0; _i < _n; _i++)
_p[_i] = _e[_i] ^ 1986091307 ^ (int)((unsigned)_i * 2654435761u); // position-dependent decrypt
const int* p = _p;
for (;;) { int op = p[pc++]; switch (op) {
case 211: S[sp++] = L[p[pc++]]; break; // LLOAD (#211)
case 47: { unsigned long long b=S[--sp], a=S[--sp]; S[sp++]=(jlong)((a ^ b) + 2ull*(a & b)); } break; // LADD as MBA
case 308: { unsigned long long b=S[--sp], a=S[--sp]; S[sp++]=(jlong)(a * b); } break; // LMUL (#308)
case 173: { jlong t=p[pc++]; if (S[--sp]==S[--sp]) pc=(int)t; } break; // LCMP+branch fused
case 96: { if (sp>=1) S[sp-1] = S[sp-1]*0x9e3779b1LL+1; } break; // DECOY - never reached
default: return 0; } }
}
Each method gets exactly as much protection as it needs — hot code stays fast, crown jewels get the full treatment.
Selected methods are compiled to a bespoke instruction set — randomized opcodes, polymorphic handlers, MBA-obfuscated arithmetic and decoy handlers — executed by a native interpreter inside a stripped, encrypted shared library.
/* dispatch — per-build randomized + polymorphic */ switch (op) { case 311: // IADD (variant A) S[sp-2] = (S[sp-2]^S[sp-1]) + 2*(S[sp-2]&S[sp-1]); break; case 47: // IADD (variant B — same result) S[sp-2] = (S[sp-2]|S[sp-1]) + (S[sp-2]&S[sp-1]); break; case 512: /* decoy — never executed */ break; }
Upload a jar and watch a decompiler give up. Free tier, no card.