Skip to content

Instantly share code, notes, and snippets.

@jpzhu
Last active August 29, 2015 13:57
Show Gist options
  • Save jpzhu/9775399 to your computer and use it in GitHub Desktop.
Save jpzhu/9775399 to your computer and use it in GitHub Desktop.
Java Dalvik 编译,反编译。

编译Java文件

javac Hello.java # 或指定版本
javac -source 1.6 -target 1.6 Hello.java

将.class文件转换成.dex文件(source build/envsetup.sh,并lunch后能看到dx命令)

dx --dex --output=Hello.dex Hello.class

查看.class文件的字节码

javap -c -classpath . Hello

查看.dex文件的字节码(dexdump和dex一样,路径在out/host/linux-x86/bin/)

dexdump -d Hello.dex

有两种.dex反汇编工具BakSmali(out/host/linux-x86/framework/baksmali.jar)和Dedexer,用法分别如下.

java -jar baksmali -o baksmaliout Hello.dex
java -jar ddx.jar -o ddxout Hello.dex

破解步骤

工具apktool,下载地址 http://code.google.com/p/android-apktool

反编译.apk文件

apktool d crackme02.apk outdir

修改outdir目录下的smali代码

重新编译apk文件

apktool b outdir

为新编译的.apk文件进行签名

签名需要用到signapk.jar,testkey.x509.pem,testkey.pk8等文件,这些文件可以在build/target/product/security/,out/host/linux-x86/framework/signapk.jar等地方找到),执行命令如下

java -jar signapk.jar testkey.x509.pem testkey.pk8 crackme02.apk signed.apk
signed.apk就是最后可以安装的apk文件。

未方便随时调用,将apktool和signapk都做成脚本,放到bin目录中

##file:apktool 将apktool.jar拷贝到和脚本同目录

#!/bin/sh
APKTOOL_DIR=$(dirname $0)
java -jar $APKTOOL_DIR/apktool.jar $*

##file:signapk 签名需要用到signapk.jar,testkey.x509.pem,testkey.pk8等文件拷贝到和脚本同目录

#!/bin/sh
SIGNAPK_DIR=$(dirname $0)
java -jar $SIGNAPK_DIR/signapk.jar $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 $*  
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment