目的
事の発端は、新しくお下がりされた Android 端末である。
標準音楽プレイヤーであるところのWALKMAN様が、私には激しく使いづらい。
前の端末に入っていた標準プレイヤーもイマイチ残念な子だったが、
そっちのほうがまだ良かった。
私が満足できるアプリも(無料では)存在しないようだ。
ならば自分で作るしかない。
しかしちゃんとした Android アプリは作ったことがない。
サンプルだのプロトタイプだのばかりである。
一から作るのは敷居が高い。
そうだ、前の端末の標準プレイヤーの作りを参考にさせてもらおう!
作業環境は windows7。
前の Android 端末はナイショ(使用規約的な意味で)。
準備
参考にしたページは以下。
Androidアプリケーションのリバースエンジニアリング | JUMPERZ.NET Blog
・参考にしたいアプリを前の端末から持ってくる
/system/apk 以下にいた。
少なくとも、*.apk, *.odex のセットが必要。
他に /system/framework も全部PCにコピーしておく。
・リバースエンジニアリング用ツールたちをDL
JDK
smali
baksmali
dex2jar
jad
smali と baksmali は以下から jar を落とす。
Downloads - smali - An assembler/disassembler for Android's dex format - Google Project Hosting
dex2jar は以下。
Downloads - dex2jar - Tools to work with android .dex and java .class files - Google Project Hosting
jad はこちら。
JAD Java Decompiler Download Mirror
apkを解凍
フツウにzip解凍すれば良い。
./myapk/ などをテキトウに作成して配置。
odex → smali
DOS窓で以下を実行。
.\myapk\smali\ 以下に各種ファイルが作成される。
-d の後のは、 /system/framework をコピーしたディレクトリ。
> java -jar baksmali.jar -a 9 -x appli.odex -o .\myapk\smali\ -d .\framework
引数なしで実行するとヘルプが出るので参考にする。
jar や -d の後のディレクトリなどは、ちゃんとパスが解決できるように指定すること。
-a の後の API-Level はこちらで調べた。
AndroidのバージョンとAPIレベルの対応関係
smali ファイルなんか見てもわからないので、作業を続けて *.java にしていく。
smali → dex
dex2jar に掛けるために、いったんdexにする。
.\myapk\smali\ 以下のファイルを dex に変換。
> java -jar smali.jar -o .\myapk\appli.dex .\myapk\smali\
dex → jar
.\myapk\appli_dex2jar が作成される。
> dex2jar.sh .\myapk\appli.dex
jar → class
.\myapk\class などを作って、フツウにzip解凍
class → java
.\myapk\class 以下を再帰的にデコンパイルして
*.java というファイル名にして、.\myapk\src ディレクトリに出力。
ディレクトリ構造をそのまま保持してくれるのは嬉しい。
> jad -o -r -sjava -d.\myapk\src .\myapk\class\**\*.class
「Couldn't fully decompile method ...」とか
たくさんのエラーが出るけど、
自分で作るための参考にするだけで、
大まかにわかれば良いので、これでおk。
↧
Androidアプリをリバースエンジニアリングしてみる
↧