2013年11月9日土曜日

APKとjarを解体する

こんにちは, 最近iOSとAndroidとJava Server系を行ったり来たりする日々が続いている開発者です。 今回筆者がはまった問題は以下の2つです
  1. 3rdパーティー提供のライブラリ(.jar)の中身が知りたい
  2. 自分で作成したapkが正しく作成されているかを確認
1は, まああまりよろしくないリバースエンジニアリングなわけですが... Bugなのか, 自分が悪いのかどうしてもわからなかったので少し 見させていただきました, それ以外の用途はないですよ。 2は, Androidのproguardをかけたときにまったく動かなくなって こちらが元記事(APK Analysis(English)) 筆者の別ブログです APK Anaysis is English post. If you want to read in English, please access this. さて本題です。

内容

  • APKの中身を見る(構成)
  • jarを解体そしてコードを見る
  • APKの中身をみる(コードも)

APKの中身を見る(構成)

apk というのは, 実はただのzipです。.zipに拡張子を変更して, 解凍すると構成するファイルはだいたい見えます これだけではよくわからないので, 解析ツールを使います apktoolというのがあります。 Windows, Linux, Mac バージョンそれぞれあります。私は, Macバージョンで試してみました。 ダウンロードして解凍すると, それぞれ, スクリプト がありますのでそれを利用します
./apktool decode xxx.apk
Macの場合 これで, フォルダに展開されます, 中身はこんな感じです
xxx
| - AndroidManifest.xml
| - apktoolyml
| - assets
| - lib
| - res
| - smali

jarを解体そしてコードを見る

.jar というのはただのzipであるのは, よく知られています。 jarが構成するクラスファイルを閲覧するには, javaのコマンドを使います。
jar -tf xxx.jar
xxx.jar が jarファイル しかしこれではソースの中身は見れません。そこでデコンパイルします Java Decompilerというツールがありまして, jarを取り込んで解析してくれます。 JD-GUIなど, GUIツールもあります。 JD-GUIの使い方は非常に簡単なので, 特にここでは触れません。

JD-GUIを使用した例です(Mac OS X) これでjarファイルのソースはばっちり見えます。

APKの中身をみる(コードも)

さて, はじめの方法ではファイル構成は見えても肝心のコードは見えません。 apktoolを使ってもコードは無理です。 そこで, apk内にあるdexをjarに変換して, JD-GUIでjarを展開することで, ソースをみます

Steps

  • dex2jar を使ってclass.dexをjarに変換
  • Java Decompileを利用してjarを読み込む

dexをjarに変換

先ほど, apk をzip にして解凍しました。その時に, class.dexというファイルが生成されています dexの詳しい説明は省きます, Dalvikが読み込むための形式とでもいいましょうか dex2jarは, dexをjarに変換するツールです, ダウンロードして解凍すると スクリプトとjarがあります。Windows, Linux, Macで動作します
./dex2jar.sh classes.dex
これで, カレントディレクトリに, jarファイルが生成されますので, あとはJava Decompileで閲覧できます ※それにしてもproguardはやっかいなやつです(ぼやき)

0 件のコメント:

コメントを投稿