Start native protection with loading and ABI

Map ELF, JNI, architectures, dependencies, and critical functions before selecting controls.

Core answer

SO hardening must account for ELF readability, exported symbols, strings and constants, JNI entry points, load order, and ABI compatibility. A strategy must be bound to real native dependencies and target architectures, or added strength can become application launch and compatibility risk.

Provide the application stack, critical paths, and compatibility range for a focused protection recommendation.

Layered Yudun mobile application security visual
SO, ELF, and native protection

Separate the problems that can block a release

Protection strength and runtime stability must be judged together. Locate exploitable paths first, then choose controls, compatibility checks, and acceptance conditions.

Common pain points

  • SO hardening and SO VMP
  • ELF symbols and native constants
  • JNI and dynamic library loading
  • ABI, NDK, and ARM64 compatibility

Decisions to make together

  • Hiding symbols does not protect strings, constants, or control flow
  • Protecting application launch and frequently executed paths can amplify stability risk
  • Every target ABI needs its own runtime evidence

A practical three-step approach

Native security value must be judged with load stability. A strategy that cannot explain ABI and dependency boundaries is not ready for release.
Read the full technical guide
  1. 01

    Map loading

    List primary and dependent libraries, JNI registration, and initialization order before changing protection.

  2. 02

    Select carriers

    Separate exported symbols, strings, constants, protocol handling, and high-value functions by risk.

  3. 03

    Cover architectures

    Build and regress each target ABI, system range, and third-party native dependency.

Latest technical articles

Original guidance for real engineering problems, with a direct answer, practical checks, decision points, and explicit limits.

Browse all articles

Common questions

Answers cover public methods and conditions only. Project conclusions depend on the actual release candidate and agreed verification scope.

Can SO hardening affect JNI calls?

Yes. Registration, symbol visibility, load order, and third-party dependencies require verification on every target architecture.

Is removing symbols enough to protect an SO?

No. It removes one class of clues. Strings, constants, control flow, loading, and runtime material remain separate concerns.

Why is ABI a hard gate?

ABIs differ in instructions, linking, and dependencies. Results from another architecture cannot establish compatibility.

Which functions should SO VMP cover?

Prioritize valuable native functions with clear inputs, outputs, and independent regression paths. Avoid blanket coverage of initialization and frequently executed paths.

Further reading and technical basis

These primary references help verify platform behavior and security boundaries. They support the analysis instead of replacing it.

  1. Android NDK ABI guide

    Native architectures, ABI packaging, and compatibility

  2. Android security best practices

    Android application security design and release boundaries

  3. OWASP MASVS

    Mobile application security controls and verification scope

  4. Android app signing

    Signing identity, upgrade continuity, and release integrity

  5. Play Integrity API

    Server-side decisions and the limits of application integrity signals