「ほっ」と。キャンペーン

Androidアプリをリバースエンジニアリングしてみる

目的


事の発端は、新しくお下がりされた 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。
[PR]
Commented by ムムリク at 2014-08-05 10:05 x
なんと、こんな技があるのですね。
Commented by xiaoxia at 2014-08-05 18:56
■ムムリクさま
コンパイルって暗号化的な意味もあると思っていたのですが、こんなことができてしまって良いのか知らん?という気もしますよね…
by xiaoxia | 2014-07-31 17:55 | ソフトウェア | Comments(2)

ダメ女プログラマ&主婦&腐女子&バイオリン弾き


by 小霞