Android反编译跟代码安全

Android反编译和代码安全

 

反编译工具
经过一轮的Google,找到了不少方法,当然有其中闻波老师提到的apktool,但是反编译出来的结果,只是一行一行的Java指令,如果Java不是很熟悉的话(like me),没办法看呀。
反复折腾,终于找到了强大的组合dex2jar+jdgui。

详细可以看 ‍http://lytsing.org/wiki/android/decompile.html

三步教你apk反编译
0.准备java环境和反编译工具(dex2jar, jd-gui),下载你准备反编译的apk文件;
1.用解压缩软件打开apk文件,把里面的文件解压到一个目录;
2.运行dex2jar进行反编译;把classes.dex复制到与dex2jar相同的目录,在cmd下运行dex2jar classes.dex;其实用apktool反编译就行了,前面的工具编译后xml文件不能查看
3.打开jd-gui,把反编译出来的jar拖进去就可以看到java源代码了。
Android反编译跟代码安全
声明:反编译仅供学习之用,请勿作恶。

除了这个,还有layout目录下的二进制xml文件,可以使用AXMLPrinter工具将其转换为可读的xml文件,工具下载地址:http://code.google.com/p/android4me/downloads/list, 使用很简单:

java -jar AXMLPrinter2.jar AndroidManifest.xml AndroidManifest2.xml

很多xml一个个转化很麻烦,这样的工作,当然是用shell完成了。

$ cd res

$

for file in */*.xml; do java -jar AXMLPrinter2.jar $file > temp; echo $file; mv temp $file -f; done

如何防止自己的apk被反编译
当然是代码加密或者代码混淆了。
相应的工具有:ant, proguard
方法各式各样,这个要发挥自己的想象力和创造力了。

附上:

android应用开发杂谈

原文 http://blog.rebill.info/archives/techparty-back-talk-about-the-android-code-security.html

 

 

附:我的做法是用apktool反编译,附件中有上面链接博客封装的apktool反编译软件,用jd-gui浏览jar文件

 

目前反编译classes.dex比较好的另一个工具是 Dedexer,可以下载已经编译好的jar文件ddx1.11.jar.

mkdir src java -jar ddx1.11.jar --helpjava -jar ddx1.11.jar -o -D -r -d src classes.dex

然后在src目录下,又生成一坨东西。

注意: ddx1.11.jar 对应java 1.6版本,我用 1.5.0_18,就会遇到

[deli@athena tools-common]$ java -jar ddx1.11.jar Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

也可以下载源代码自行编译。

进入 src/com/himsn 目录

[deli@athena himsn]$ grep -i 7F080000 *

R$string.ddx:.field public static final app_name I = 2131230720 ; 0x7f080000

好家伙,回前面提到的 @7F080000,原来在 R$string。其他xml文件出现神秘的字符,grep 一下,就出来了。 xml还有其他神秘数字, 比如

<ImageView> android:scaleType="3"

这个3是啥意思? 开始我是用最原始的方式,我深信,一切尽在ApiDemos中,结果在ApiDemos的反编译文件里grep,一般80%都可以找到,然后跟源代码对比,就出来了。

android:scaleType="3" 就是android:scaleType="fitCenter" 类似的

| android:scaleType="7"| android:scaleType="centerInside"

android:scaleType="6" android:scaleType="centerCrop"
android:ellipsize="4" android:ellipsize="marquee"
android:ellipsize="3" android:ellipsize="end"

后面发现用eclipse打开xml layout文件,在属性选项里,点击,在下拉菜单,都有相应的数字,从0开始,那么就好办多了。

还有一些情况,比如

android:textColor="?android:01010036" android:textColor="?android:01010212"

这个比较好办,看到有android字样,就知道是系统定义的常量,在android sdk Reference android.R.xxx 页面搜索01010036,找到:

"?android:01010036" 对应 "?android:attr/textColorSecondary" "?android:01010212" 对应 "?android:attr/textColorTertiary"

 

原文:http://hi.baidu.com/zhizhesky/blog/item/1b77fc03eb599afc09fa93ea.html

另一篇:http://morry.iteye.com/blog/776718