ほんの少しだけなら編集できるかもしれない?smaliファイル
smaliとは
AndroidのアプリはJavaというプログラミング言語で作成されています。
Javaプログラムをコンパイルして機械語に変換し、画像などのリソースと合わせてapkというパッケージにすることでAndroidにインストールすることのできるアプリになります。
apkファイルの構成
AndroidManifest.xml
META-INF(署名ファイル)
res(画像等のリソース)
classes.dex(プログラム)
resources.arsc(言語等のリソース)
Apktoolを使ってapkファイルを展開するとプログラム部分のclasses.dexが展開されsmaliファイルに分かれます。
つまり、smaliファイルとはJavaをコンパイルした後の機械語の状態のファイルなのです。
smaliファイルを作ってみる
必要なもの
- JDK7
- android-sdk/build-toolsにあるdx.jar
- baksmali.jar
HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
以下のコマンドでHelloWorld.java→classes.dex→HelloWorld.smaliに変換します。
> javac -source 7 HelloWorld.java
> java -jar dx.jar --dex --output=classes.dex HelloWorld.class
> java -jar baksmali.jar classes.dex
HelloWorld.smali
.class public LHelloWorld;
.super Ljava/lang/Object;
.source "HelloWorld.java"
# direct methods
.method public constructor ()V
.registers 1
.prologue
.line 1
invoke-direct {p0}, Ljava/lang/Object;->()V
return-void
.end method
.method public static main([Ljava/lang/String;)V
.registers 3
.prologue
.line 3
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 4
return-void
.end method
smaliファイルを編集する
アプリの動作を変更したい場合は
Apktoolを使って展開した後にできるsmaliフォルダ内にあるファイルを編集します。
しかし、smaliファイルは機械語です。編集するには機械語を理解しないとできませんが、とても分かりづらいです。
smali機械語解説サイトhttp://pallergabor.uw.hu/androidblog/dalvik_opcodes.html(英語)
smali解読に使えそうなツール
以下の様なツールを使って見比べながら解読すると分かりやすいかもしれません。
smali2java
apkファイルを読み込んでjavaファイルを表示するツールです。
直接書き換えて保存することはできません。
http://forum.xda-developers.com/showthread.php?t=2430413
java2smali
作成したjavaプログラムを直接smaliにコンパイルできます。
IntelliJ IDEAというプログラミング補助ツールのプラグインです。
https://github.com/ollide/intellij-java2smali
0 件のコメント :
コメントを投稿
当ブログの内容は私感を含むため確実性は保証できかねます。