Commit graph

36 commits

Author SHA1 Message Date
okhsunrog
35b3dcdf50 build: align native cdylib on 16 KiB; unify kmod/zygisk build scripts
Two related changes that ship together because they touch the same
build-script + docs surface and were verified together on-device.

16 KiB alignment
  - zygisk/build.rs: pass `-Wl,-z,max-page-size=16384` to lld so the
    cdylib's LOAD segments line up on 16 KiB pages. NDK r28+ already
    does this by default, but the flag keeps r27 builds compatible.
  - lsposed/native/build.rs: new file, same flag, for libvpnhide_checks.so.
  - docs/development.md: bumped the NDK requirement to r28+ and noted
    the 16 KiB rationale.

Verified via `llvm-readelf -l`: both libvpnhide_zygisk.so and
libvpnhide_checks.so now show `Align 0x4000` on every LOAD segment.

Unified build entry points
  - kmod/build.py replaces kmod/build-zip.py. Single script that
    auto-detects whether to build natively (we're inside the DDK image
    or `--kdir` was passed) or to spawn `ghcr.io/ylarod/ddk-min` via
    podman/docker. CI uses the same script with `--inside-container`.
  - zygisk/build-zip.py renamed to zygisk/build.py for symmetry; logic
    unchanged.
  - kmod/BUILDING.md rewritten — local build is now one command:
    `./kmod/build.py --kmi android14-6.1` (or `--all`). The old
    hand-rolled podman/docker recipes are gone.
  - .github/workflows/ci.yml updated to call the new entry points.
    The DDK image tag in CI now has a comment pointing at
    `DDK_IMAGE_TAG` in kmod/build.py as the source of truth.
  - README.{md,en.md}, kmod/README.md, zygisk/README.md, docs/releasing.md,
    scripts/build_lib.py: reference updates.
  - README.en.md: also fixes a "bacame" typo and tightens the Windows
    zygisk-build note (the aux.rs / libgit2 issue is still real).

Verified end-to-end on Pixel 8 Pro (husky, android14-6.1, Android 16):
APK installs, kmod + zygisk modules load, all 26 self-checks PASS in
Enforcing, 22/26 PASS in Permissive (the same 4 by-design FAILs as
before — kmod doesn't cover those paths in Permissive).
2026-04-26 23:26:30 +03:00
okhsunrog
8025be14cc docs: align README and dev guide with current code and CI
Six unrelated drift fixes that accumulated since they were last
synced. Each is independent of the rest:

* README{.en,}.md — kmod claim "filters /proc/net/*" trimmed to
  /proc/net/route. The other /proc/net files are SELinux-blocked
  for untrusted apps and the coverage table already says so.

* kmod/README.md — hook table and architecture note updated from
  dev_ifconf to sock_ioctl. dev_ifconf gets inlined by Clang LTO
  on GKI 5.10 so the kretprobe silently never fires; sock_ioctl
  has been the actual hook target since the vpnhide_kmod.c fix.

* zygisk/README.md — five inline hooks now, not four (recv was
  added separately because bionic's recv tail-calls recvfrom).
  Also clarified pre_app_specialize runs in the forked child, not
  zygote, matching the lifecycle block in lib.rs.

* docs/development.md — JDK requirement matches CI image (17, not
  21); document ANDROID_NDK_ROOT quirk for Gobley; CI lint list
  expanded to match what ci.yml actually runs.

* docs/development.md + lsposed/README.md — explain Gobley (the
  Gradle plugin pair that builds lsposed/native/ and bundles the
  .so + UniFFI Kotlin bindings into the APK). Previously absent
  from all *.md.
2026-04-26 15:32:30 +03:00
Horizon
cf4e72fa01
fix(build): port build scripts to Python to allow Windows contributors to build subprojects (#83)
* Rewrite build-version and all build-zip bash scripts to python

* Add executable permissions to python build scripts

* Use python build script for kmod in CI

* Fix

* Enhance kmod build script, add/fix docs, CI edits

* Delete remaining build-zip bash scripts

* Delete remaining build-zip bash scripts
2026-04-25 19:53:15 +03:00
okhsunrog
f8cb33c991 docs: make Russian README primary, English secondary
Rename README.ru.md -> README.md and the previous README.md -> README.en.md.
Target audience is primarily Russian-speaking. Update language-switcher
links in both files.
2026-04-18 23:50:23 +03:00
okhsunrog
820afa7a55 docs: refresh README screenshots and install docs 2026-04-15 20:21:00 +03:00
okhsunrog
e1d4859e7f docs: update README for protection modes 2026-04-15 20:09:36 +03:00
okhsunrog
7f410432d4 Fix license badge: use static MIT badge 2026-04-14 03:48:08 +03:00
okhsunrog
ac597680dc Add Star History chart to README 2026-04-14 03:47:31 +03:00
okhsunrog
56c83f0fc3 Add badges to README 2026-04-14 03:44:58 +03:00
okhsunrog
5aadb0165b Rename APK artifact from vpnhide-lsposed to vpnhide 2026-04-14 03:00:10 +03:00
okhsunrog
7e9c1def9c Add screenshots to README and rename branding to assets 2026-04-14 00:46:02 +03:00
okhsunrog
f66ef2e638 Update README for new dashboard UI and fix CI lint
- Rewrite install instructions: app-first flow with Dashboard recommendation
- Document per-app L/K/Z layer toggles and Zygisk caveat
- Describe full diagnostics system (module status, LSPosed config validation,
  version mismatch detection, native install recommendation, live protection
  checks)
- Add shell configuration in collapsible section for advanced users
- Sync EN and RU versions
- Fix signing config crash when keystore.properties is missing (CI lint job)
2026-04-13 20:58:47 +03:00
okhsunrog
9ba7bfb127 refactor: drop WebUI and action.sh from kmod and zygisk modules
The VPN Hide app is now the sole UI for target management. WebUI was
KernelSU-Next-only and redundant since the app works on both KSU and
Magisk. Remove webroot/, action.sh, and all references across docs,
install scripts, module descriptions, and code comments.
2026-04-13 16:28:39 +03:00
okhsunrog
fc21377d6e docs: remove test-app references from READMEs, update component descriptions 2026-04-13 16:17:10 +03:00
okhsunrog
9c129dac1c feat: add chameleon mascot branding and app icon
- Add branding/ directory with logo.png and icon-512.png
- Replace default app icon with chameleon-in-hoodie adaptive icon
  (all densities: mdpi through xxxhdpi + monochrome)
- Update both READMEs with centered logo and title (floppa-vpn style)
2026-04-13 16:09:27 +03:00
okhsunrog
4cf494a2f9 docs: update detection coverage table — add MTU, routes, expand ioctl to all SIOCGIF* 2026-04-13 02:53:44 +03:00
okhsunrog
f8c5317868 docs: improve GKI generation instructions with Settings path 2026-04-13 01:33:33 +03:00
okhsunrog
94ea1ebe6e docs: rename title to VPN Hide 2026-04-13 01:29:06 +03:00
okhsunrog
6468615e44 docs: expand comparison section with two-layer architecture details 2026-04-13 01:26:44 +03:00
okhsunrog
0ee2fb2a70 docs: mention MirPay, T-Bank, Alfa-Bank instead of SDK names, fix corrupted chars 2026-04-13 01:24:22 +03:00
okhsunrog
3d04e8b6e1 docs: add comparison with NoVPNDetect alternatives to both READMEs 2026-04-13 01:21:43 +03:00
okhsunrog
face64a8d0 docs: add Russian README 2026-04-13 00:58:45 +03:00
okhsunrog
4c9e437330 docs: clarify root grant differs between Magisk and KernelSU-Next 2026-04-12 05:37:07 +03:00
okhsunrog
9f101f66e8 docs: mention root access for VPN Hide app, explain reboot requirement
The app needs root (su) to write target files. LSPosed hooks are
injected into system_server at boot, so a reboot is required after
enabling the module — system_server must restart with hooks active.
2026-04-12 05:30:14 +03:00
okhsunrog
1ee26e1de8 docs: add VPN Hide app as primary target management method
The lsposed APK now includes a Compose target picker UI that works
with both kmod and zygisk on any root solution. Update all READMEs
to recommend the app over WebUI (which is KernelSU-only).
2026-04-12 03:17:59 +03:00
okhsunrog
41e2086549 docs: add getAllNetworks() to coverage table, update check count to 24 2026-04-12 01:11:23 +03:00
okhsunrog
9019869e7d docs: add links to component READMEs 2026-04-11 23:29:53 +03:00
okhsunrog
a61df0729c docs: recommend force-stop after changing target apps 2026-04-11 23:24:47 +03:00
okhsunrog
c8ab6933e8 docs: fix Pixel GKI generation info 2026-04-11 23:20:58 +03:00
okhsunrog
03d91e7f73 docs: clarify kmod as recommended, explain GKI ≠ Android version 2026-04-11 23:15:05 +03:00
okhsunrog
edb77d20db docs: restructure README for new users, add install instructions 2026-04-11 23:11:48 +03:00
okhsunrog
5eaebd0a12 license: unify entire project under MIT 2026-04-11 21:58:07 +03:00
okhsunrog
a49c8bfea7 docs: add detection coverage table, update component descriptions 2026-04-11 20:41:24 +03:00
okhsunrog
60b3235dc0 docs: redesign README hierarchy for monorepo
Root README is now the single source for shared content (verified
against, split tunneling, threat model, component overview). Sub-READMEs
focus on component-specific technical details and link back to root.

- Remove ~700 lines of duplicated content across sub-READMEs
- Update all cross-references to use monorepo relative paths
- Add test-app to components table
- Update zygisk README: mark openat/recvmsg/SIOCGIFCONF as implemented
- Fix stale links to archived repos
2026-04-11 16:20:33 +03:00
okhsunrog
ca23630e57 refactor: remove commercial app names, rewrite test app in Compose
- Remove specific commercial app/bank names from all READMEs, comments,
  and log messages to avoid legal issues. Open-source detection tools
  (RKNHardering, YourVPNDead) are kept with links.
- Rewrite test-app in Jetpack Compose with Material3 dynamic colors,
  edge-to-edge, system dark/light theme support.
- Make test UI more verbose with detailed result cards.
- Add full logcat output for all checks (tag: VPNHideTest) for
  automated testing by AI agents.
- Fix 16KB page alignment for Android 15+.
2026-04-11 16:09:31 +03:00
okhsunrog
12daca5c1a monorepo: combine vpnhide-zygisk, vpnhide (lsposed), and vpnhide-kmod
Unified repository for the complete Android VPN-hiding stack:
- zygisk/ — Rust Zygisk module (inline libc hooks via shadowhook)
- lsposed/ — Kotlin LSPosed module (Java API + system_server hooks)
- kmod/ — C kernel module (kretprobe hooks, invisible to anti-tamper)

CI workflows use path filters to build only the changed component.
2026-04-11 15:01:49 +03:00