プログラミング系のネタをまとめていきます。

アプリの解析手順(smali)


adb pull [端末内のアプリ(xxx.apk)] xxx.apk
apktool d xxx.apk xxx                                  --- xxx.apkをxxxディレクトリに decode

smaliコードとして、プログラムをいじれます。

apktool b xxx xxx2.apk                                 --- ビルドして xxx2.apk 作成
jarsigner -verbose -keystore xxx.keystore xxx2.apk xxx --- 署名
zipalign -v 4 xxx2.apk xxx3.apk                        --- 最適化
adb install -r xxx3.apk                                --- 端末に(上書き)インストール

apktool d, apktool b でエラーが発生する場合


以下の様なエラーが発生しました。

>apktool d xxxxx.apk xxxxx
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: C:\Users\[ユーザー]\apktool\framework\1.apk
I: Loaded.
W: Could not decode attr value, using undecoded value instead: ns=android, name=largeHeap, value=0xffffffff
I: Decoding file-resources...
W: Could not decode attr value, using undecoded value instead: ns=android, name=state_activated, value=0xffffffff
W: Could not decode attr value, using undecoded value instead: ns=android, name=actionViewClass, value=0x0000000b
Exception in thread "main" java.lang.NullPointerException
        at java.io.Writer.write(Unknown Source)
        at brut.androlib.res.util.ExtMXSerializer.writeAttributeValue(ExtMXSerializer.java:38)

デコード、ビルド時に、framework.apk的なものが必要らしいです。

framework.apkの取得についてはこちらを参考にしました。
https://code.google.com/p/android-apktool/wiki/Fra...

自分の端末から
/system/framework/framework-res.apk
を拾ってきて 1.apk にリネームして上記パスに配置。
これでデコード、ビルドが成功しました。

smaliについて


アセンブラに近い中間言語的なものでしょうか。
読めなくはないですが、結構たいへんです。
一応、参考サイトを挙げておきます。

アプリの解析(jd-gui)


apkからdexファイルを取り出して、javaソースコードに変換する手順です。

必要なツール

手順


1. apkファイルを解凍して classes.dex を取得。
  zipファイルなので、普通に解凍できます。

2. dexをjarへコンバート。
dex2jar.bat classes.dex

3. jarを jd-gui で開く。
  このツール上でソースを確認できますが、Fileメニューからjavaファイルとして保存することも出来ます。

Menu

メインコンテンツ

プログラミング

機器

Macツール

各種情報

Wiki内検索

おまかせリンク

Androidアプリ

AdSense

技術書


管理人/副管理人のみ編集できます