  Quantum copy protection, introduced by Aaronson, enables giving out a quantum
program-description that cannot be meaningfully duplicated. Despite over a
decade of study, copy protection is only known to be possible for a very
limited class of programs. As our first contribution, we show how to achieve
"best-possible" copy protection for all programs. We do this by introducing
quantum state indistinguishability obfuscation (qsiO), a notion of obfuscation
for quantum descriptions of classical programs. We show that applying qsiO to a
program immediately achieves best-possible copy protection. Our second
contribution is to show that, assuming injective one-way functions exist, qsiO
is concrete copy protection for a large family of puncturable programs --
significantly expanding the class of copy-protectable programs. A key tool in
our proof is a new variant of unclonable encryption (UE) that we call coupled
unclonable encryption (cUE). While constructing UE in the standard model
remains an important open problem, we are able to build cUE from one-way
functions. If we additionally assume the existence of UE, then we can further
expand the class of puncturable programs for which qsiO is copy protection.
Finally, we construct qsiO relative to an efficient quantum oracle.
