Android のオープン性は、リバースエンジニアにとって好ましい環境であり、iOS にはない大きな利点を提供します。Android はオープンソースであるため、Android Open Source Project (AOSP) でソースコードを調べて、OS とその標準ツールを好きなように変更できます。市販の標準的なデバイスでも、開発者モードの有効化やアプリのサイドローディングなど、面倒な作業なしに実行できます。SDK に同梱されている強力なツールから、利用可能な幅広いリバースエンジニアリングツールまで、作業を楽にする便利なものが数多くあります。
しかし、Android 特有の課題もいくつかあります。たとえば、Java バイトコードとネイティブコードの両方を扱う必要があるかもしれません。Java Native Interface (JNI) はリバースエンジニアリングを混乱させるために意図的に使用されることがあります (公平を期すために言うと、パフォーマンスの向上やレガシーコードのサポートなど、JNI を使用する正当な理由もあります)。開発者は、データや機能を「隠す」ためにネイティブレイヤーを使用することがあり、実行が二つのレイヤーを頻繁に行き来するようにアプリを構成することもあります。
Java ベースの Android 環境と、Android のベースとなっている Linux OS とカーネルの両方についての実務知識が少なくとも必要でしょう。また、Java 仮想マシンで動作するバイトコードと、ネイティブコードの両方を扱うための適切なツールセットも必要です。
Last updated 4 days ago