Android Exploit Development

Native memory bugs, ARM64, JNI and privilege escalation on real cloud Android devices.

20 lessons ยท CHF 9.90 one-time

20 lessons ยท knowledge checks ยท final exam ยท verifiable certificate ยท Mobile Elite (device lab coming soon)

Buy now ยท CHF 9.90 Open in the course reader

Frequently asked questions

What is Android exploit development?

It is the discipline of attacking memory in Android's native code โ€” C/C++ libraries reached through JNI, system daemons and the kernel โ€” rather than app logic. A memory-corruption bug in the right place can give arbitrary code execution and cross the app sandbox, far beyond what a logic flaw achieves.

Why is the JNI boundary where native bugs concentrate?

Because JNI is where untrusted data crosses from the bounds-checked Java runtime into raw C pointers with no bounds checks. Length fields, offsets and buffers that were safe in Java become the programmer's responsibility in C, so mistakes there turn into memory corruption.

What mitigations must an Android exploit defeat?

Four dominate on modern ARM64: ASLR randomises addresses so you need an info leak; NX (W^X) blocks executing injected code so you reuse existing code via ROP; stack canaries detect stack smashing; and PAC/CFI sign or constrain indirect branches. Each raises the bar and dictates which bug primitives you need.

Does every crash mean an exploitable bug?

No. Most crashes are not exploitable, or are only exploitable with primitives the mitigations deny. The core skill is triage: reproduce the crash, classify the bug, and judge whether it justifies the hours a reliable chain costs before committing to it.

Is this course safe and legal to practise?

Yes, when you stay in a lab you control. Memory-corruption research must only target software and devices you own or are explicitly authorised to test, and working exploits never leave the lab. The course stops at understanding a reproducible crash, not weaponising it.

How do you read an Android native crash?

Native crashes produce a tombstone, and a summary lands in logcat under the DEBUG tag. Look at the signal, the fault address, the register state and the backtrace. If the program counter or fault address holds your input bytes (such as 0x4141414141414141), you reached control of execution โ€” a strong exploitability signal.

Get the full course

One-time purchase, no subscription. Pay as a guest โ€” no account needed.

Buy now ยท CHF 9.90 Open in the course reader

Course syllabus

Lessons unlock after a single one-time purchase โ€” no subscription. Pricing & FAQ โ†’ ยท All course overviews โ†’