# Electron app के license check को local patch से बचाएँ

app.asar एक command से unpack हो जाता है, और local license या trial check आमतौर पर एक ही comparison होता है। main, preload और renderer को obfuscate कैसे करें ताकि एक crack आपकी अगली release तक काम न करे।

Source: https://www.afterpack.dev/hi/docs/use-cases/electron-license-logic

एक desktop app अपना JavaScript, license check समेत, user की अपनी disk पर ship करता है, जहाँ उसे आराम से पढ़ा और बदला जा सकता है।

## app.asar unpack हो जाता है, और license gate एक लाइन का बदलाव है

आपका app install करना आपका source install करना है। `app.asar` एक command से unpack हो जाता है, और तब main, preload और renderer disk पर सामान्य, पढ़ने योग्य फ़ाइलें होते हैं। केवल local license gate आमतौर पर एक comparison या एक early return होता है, और उसे पलटना एक लाइन का बदलाव है।

वह बदलाव निजी नहीं रहता। Patch की गई फ़ाइल, या वही बदलाव लागू करने वाली एक छोटी script, crack के रूप में फैलती है और उस release की हर copy पर काम करती है।

## main, preload और renderer में एक ही seed

[`@afterpack/electron`](https://www.afterpack.dev/hi/docs/frameworks/electron) तीनों programs को एक call से obfuscate करता है और उनमें एक ही [`seed`](https://www.afterpack.dev/hi/docs/config#seed) साझा करता है, इसलिए main, preload और renderer एक-दूसरे के साथ consistent निकलते हैं। यही consistency IPC channel के दोनों सिरों को एक ही channel name पर सहमत रखती है।

हर build एक नया seed लेती है, इसलिए हर release अलग आकार में निकलती है। एक release के विरुद्ध लिखा patch या script आपकी ship की गई अगली release पर लागू नहीं होता, और जिसने उसे लिखा उसे check को फिर से एक ऐसी build में खोजना पड़ता है जो उस build जैसी बिल्कुल नहीं दिखती जिस पर उसने काम किया था।

## इसे release build में जोड़ें

[Electron पेज](https://www.afterpack.dev/hi/docs/frameworks/electron) plugin install करने और हर leg को wire करने को कवर करता है। Release build के लिए, पूरे app का posture एक ही जगह पर बढ़ाएँ:

```ts
// electron.vite.config.ts
withAfterpack(config, { preset: "hard" });
```

जब हर leg एक plugin call के बजाय अपने अलग command से build होता है, तो उन commands में [`AFTERPACK_seed`](https://www.afterpack.dev/hi/docs/config#seed) pin करें ताकि legs फिर भी एक ही आकार साझा करें। [एक seed, तीन तरीके](https://www.afterpack.dev/hi/docs/frameworks/electron#one-seed-three-ways) बताता है कि किन toolchains को इसकी ज़रूरत है।

Protection Map, backups और source maps को packaged app से बाहर रखें: `.afterpack/`, `*.backup.*` और `*.map` सभी आपके packager के exclude globs में होने चाहिए, क्योंकि `app.asar` के अंदर एक `.map` आपका मूल source उतनी ही सीधे लौटा देता है जितना unpacked JavaScript देता। [Electron पेज](https://www.afterpack.dev/hi/docs/frameworks/electron) सूचीबद्ध करता है कि plugin किन चीज़ों को build करने से सीधे मना कर देता है।

## जाँचें कि हर leg protected निकला

हर leg अपना [Protection Map](https://www.afterpack.dev/hi/docs/protection-map) `.afterpack/<leg>/` में लिखता है, इसलिए आप main, preload और renderer को अलग-अलग खोलकर देख सकते हैं कि license check वाली फ़ाइल कवर हुई। Package करने से पहले built output पर [`afterpack verify`](https://www.afterpack.dev/hi/docs/cli#afterpack-verify-dir) चलाएँ, एक gate के रूप में जो ऐसी build पकड़ता है जिसमें protection लागू नहीं हुई।

## Offline check की सीमा कहाँ है

हर release पर नया आकार check को बायपास करना चाहने वाले के लिए असली लागत है: एक build के patterns के लिए लिखा गया crack अगले पर टूट जाता है, और आपका publish किया हर update पिछली release के crack को पुराना कर देता है।

Offline check को फिर भी user की मशीन पर सही ढंग से चलना होता है, इसलिए एक release पर पर्याप्त समय मिलने पर उसे खोजा और patch किया जा सकता है। Revenue के लिए अहम किसी भी चीज़ के लिए client-side check को अपने server पर एक call से समर्थन दें।

## आगे

- [Electron](https://www.afterpack.dev/hi/docs/frameworks/electron): install, wiring, support matrix, और plugin किन चीज़ों को build करने से मना करता है।
- [Directives](https://www.afterpack.dev/hi/docs/directives): किसी एक region, जैसे license check, को program के बाकी हिस्से से ज़्यादा मज़बूत mark करना (Pro)।
- [Threat model](https://www.afterpack.dev/hi/docs/threat-model#the-boundary): आपका code चलाने वाला व्यक्ति किन चीज़ों तक पहुँच सकता है।
