Tomoya's Blog

Androidアプリのソースコードを解析する方法

June 12, 2020 • ☕️ 1 min read

新プロジェクトで開発するアプリの構想を練るために、類似したAndroidアプリの中身を調べた時の手順をここにまとめる。

必要なツール

  • adb
  • JDK
  • AndroidStudio
  • de2jar
  • Jad

上記のツールをあらかじめインストールしておかないと、リバースエンジニアリングは難しい。

手順

まず、adb(Android Debug Bridge)コマンドを使う場面が何回かあるので、windowsでadbコマンドを使えるようにする方法を参考にadbコマンドを使用可能にする。

(環境変数でパスを通すときに、~~~/sdk/platform-toolsのようなパスになっているか注意)

次に、実際に解析したいアプリが入っているAndroidスマホの設定画面から機種の情報のページを探し、その中のビルド番号の部分を7回タップする。すると開発者モードとなって、設定のどこかに開発者オプション、そしてUSBデバッグというような設定が現れるはずなのでオンにする。あとは作業するPCにそのスマホを接続すれば準備OK。

うまく接続されたら、コマンドプロンプトもしくはターミナルでadb shell pm list packages -fというコマンドを実行。そのスマホに入っているAndroidアプリのapkファイルが全て表示される。その中から解析したいアプリを見つけたら、adb pull ${解析するアプリのapkファイルの絶対パス}を実行。カレントディレクトリにapkファイルが抽出される。無事にapkファイルが手に入ったら、拡張子をapkからzipに変更して解凍しておく。

中には以下のようなものが入っているはず。(参考:Android アプリ解析基礎 その2 -PC編-

  • AndroidManifest.xml - アプリのコンポーネントやパーミッションを記述するファイル
  • classes.dex - 実行ファイル本体
  • META-INF - apkファイルの署名情報
  • res - アプリのリソース(画像等)
  • resources.arsc - リソースのメタ情報

重要なのは、classes.dexである。しかし、dexのままだと中身を確認できないのでdex2jarを使ってjarファイルを生成する。こちらでインストールできる。パスを通すか、作業するディレクトリに解凍したものを入れておこう。

mac、Linuxなら、

d2j-dex2jar.sh classes.dex

Windowsなら、

d2j-dex2jar.bat classes.dex

というコマンドでdexからjarへ変換できるはず。無理なら、おそらくchomdコマンドで権限を与えるか、dex2jarやdexファイルの場所が異なることが原因だと考えられる。

無事にエラーもなく変換が完了したら、最後にJadというツールを使用してjarファイルをデコンパイルする。こちらの記事を参考にJadをインストールしたら、dex2jarの時と同じ要領でパスを通すなりしてJadを使えるようにする。

Jadコマンドが使えることが確認できたら、jad -s java -d src -r classes-dex2jar\**\*.class(classes-dex2jar**\の部分は状況に応じて変更)というコマンドで.classで終わっていたファイルがデコンパイルされた.javaファイルが新しく作成されるsrc/の中に生成される。

こうして作られたsrc/フォルダを、AndroidStudioや使い慣れたお好きなエディタでじっくり解析していく。

Tomoya


Relative Posts:

Memo for using Powershell

June 25, 2020

How to analyze Android app source code

June 12, 2020

Tomoya Sonokui

To output what I learn from things, and brush up both English & Japanese writing skills. 日々感じたことや学んだことを日本語と英語でアウトプットするための技術系ブログ

RotateLinkImg-iconRotateLinkImg-iconRotateLinkImg-icon