=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过来。 Android混淆、反编译以及反破解的简单回顾 搜索下,发现文章相关文档好多好多。就简单点,不赘述了== 一、Android混淆 1)概述 新建Android工程,根目录下会有个proguard.cfg。简单的混淆,你只需要在project.properties内加入一行“proguard.config=proguard.cfg”即可。

注意:在签名发布apk时才会混淆,直接Run As在bin目录下的apk是不被混淆的。签名发布:右键工程->Android Tools->Export Signed Application Package…

如何生成签名,可以参考《Android数字签名学习笔记》。

2)外部jar 未混淆过的,只加个类库声明就好。例如,用到“SDK目录\ extras\android\support\v4\ android-support-v4.jar”时,可以在-keep前加如下内容即可:
            
  1. -dontwarnandroid.support.**
  2. -libraryjarslib/android-support-v4.jar
第一行,表示去除警告,第二行是声明jar(jar包拷到工程内了,所以是相对目录==)。 这样混淆后,引用的jar包也会一起被混淆。 如果用的第三方jar包是被混淆过的,或你不想混淆,则用-keep去除即可。例如,之前android-support-v4.jar,如果不需要混淆它的话,可以增加这么一句:
            
  1. -keepclassandroid.support.v4.**{
  2. *;
  3. }
此时的话,jar包就不会被混淆了^^。 更详细的使用方法,请参看小节3。 3) Proguard 1. 在手册的样例中,有两篇即是讲述Android的,如下:

Manual->Examples->A simple Android activity&A complete Android application

2. 用法的内容,则在: Manual-> Usage。用于学习或查看各命令都是做什么的用。 中文相关的话,可以参考下述网址,呼呼~ http://www.cnitblog.com/zouzheng/archive/2011/01.html 4)可能问题 4.1)新建工程下没有proguard.cfg 你的环境太老了吧==。 ProGuard是2.2才加的?记得我起初低于2.2的混淆时,要从2.2工程下把proguard.cfg拷过去。当时建2.1的目录下是没proguard.cfg的。 不过现在建立个1.5都是有这个文件的。 二、Android反编译 1)概述 apktool+ dex2jar+ jd-gui。超链接是主页,不了解的可以看看介绍,再转至Downloads。 具体做什么用的或如何操作,参看小节2。 当然,和之前《 批处理安装&卸载apk》一样,小子懒人一个T^T。又是批处理(没sh的……): easyTool.bat
            
  1. @echooff
  2. titleAPK反编译[byJoin]
  3. remapktool目录
  4. setp_at="E:\zhao\environment\decompile\apktool"
  5. remdex2jar目录
  6. setp_dj="E:\zhao\environment\decompile\dex2jar-0.0.9.8"
  7. remdex2jar后缀
  8. setsuffix=_dex2jar.jar
  9. if"%~1"==""echo请将apk直接拖放至bat文件!&goto:over
  10. rem增加apktool路径
  11. setpath=%p_at%;%p_dj%;%path%
  12. setlocalenabledelayedexpansion
  13. if/i"%~x1"==".apk"(
  14. echoapktool处理"%~nx1"中...
  15. apktoold"%~1""%~dpn1"
  16. echodex2jar处理"%~nx1"中...
  17. dex2jar.bat"%~1"
  18. remdex2jar执行后直接结束了==
  19. echo移动文件"%~n1!suffix!"中...
  20. )else(
  21. echo文件类型错误:不支持%~x1!
  22. )
  23. :over
  24. echo.
  25. @pause>nul
保存成bat,修改下apktool目录&dex2jar目录,将apk拖上去即可。会有一个“同名”文件夹和一个“同名_dex2jar.jar”的文件。文件夹是apktool生成的资源,jar则是dex2jar反编译出的代码。然后用jd-gui打开jar即可。 注意:dex2jar需要用最新的,可以直接用于apk。代码增加了zip解压,不再需要手动了,不清楚哪个版本开始的==。才发现的,bat也刚升级了下。 2)更多 看这篇文章就可以了: android反编译小结。 三、Android反破解 不废话,参见“看雪学院->Android软件安全-> APK反破解技术小结”。 那位版主现总结了四篇文章,如下: 《APK反破解之一:AndroidJava混淆(ProGuard)》 《APK反破解之二:AndroidAPK签名比对》 《APK反破解之三:NDK编译.so动态库》 《APK反破解之四:Android代码动态加载技术》 还有一些回复和摘录,如下: 1)可以介绍一下openssl工具,挺好用的。 2)以下为一段整合的回复: -> 呵呵~!代码混淆能避免被别人破解吗? -> 不能,只是会增加别人破解的难度。如果要防别人破解的话,最好的方法是使用NDK,用C、C++写的代码,用NDK编成so库,用JNI进行调用! -> SO库文件包含符号,调试也比java代码方便,所以某种意义上说逆向so里面的nativecode比逆向java还容易。 -> OpenSource成就了GNUTool-chain.ELF里面符号表是“一等公民”.所以默认选项生成的目标文件里面带符号,虽然可以通过选项分离符号,但是很多时候都会忽略了这一点。 不过我相信OpenSource模式才是未来软件工程的王道。 3)可以多关注dalvik是怎么实现java对JNI调用的。其中会涉及到怎么定位一个nativefunc,有文章可做。 4)Dalvik虚拟机类加载机制的SDK类 DexClassLoader:

A class loader that loads classes from.jarand.apkfiles containing aclasses.dexentry.

PathClassLoader:

Provides a simpleClassLoaderimplementation that operates on a list of files and directories in the local file system, but does not attempt to load classes from the network.

四、后记 我用Proguard觉得最大的好处不在于混淆,而在于压缩了代码,apk整整能瘦一圈呢^^

五、补充——反编译odex文件

没关注过ROM,在反编译4.0系统framework.jar定制SDK时,才发现odex这个东西==。 这里也就直接以这举例了^^

1. 下载baksmali-1.3.2.jar & smali-1.3.2.jar

http://code.google.com/p/smali/downloads/list 2. 模拟器导出整个/system/framework/ baksmali反编译是自动找5个核心的BOOTCLASSPATH,当然某些可能会涉及其他的CLASSPATH需要指定-c再添加。 总之全部弄出来得了,ROM的话也一样吧?不同公司应该会涉及自己的一些包,就这边加吧? 3. 把两个jar放进导出的framework目录 4. 进入framework目录 5. 以下命令进行反编译啦~

java -Xmx512m -jar baksmali-1.3.2.jar -x framework.odex -o out(反编译进out目录)

java -Xmx512M -jar smali-1.3.2.jar -o classes.dex out(重新生成classes.dex)

第一条命令的话,现版本-a默认为14。出UNEXPECTED TOP-LEVEL EXCEPTION,可能是这出错,记得指定正确。-c,默认会找5个核心CLASSPATH,其他自己指定了。

6. 继而的话,可以用来整成一个apk,或继续dex2jar反编译咯~ 参考网址: 1) Android ROM中Odex文件的作用及介绍 apk生成odex & 合并odex和少dex的apk为完整apk。 2) baksmali的官方使用说明 当然用这两个jar时,可以先-h看参数说明也差不多。

更多相关文章

  1. Android(安卓)Studio多渠道打包和代码混淆教程
  2. Android内核编译图文教程(HTC G10 Ubuntu 11.04)
  3. Android(安卓)cocos2d-x开发(三)之创建Android工程和编译
  4. Android杂谈---res目录说明和android单位
  5. 第2.3节 android目录中manifest的介绍
  6. Android混淆问题
  7. MTK Android滑盖或翻盖处理驱动
  8. Unable to recreate missing debug keystore解决办法
  9. 丧心病狂的Android混淆文件生成器

随机推荐

  1. android创建隐藏文件或者文件夹,并对其读
  2. Android ListView 滑动背景为黑色的解决
  3. Android工程目录介绍
  4. Android基础教程(八)之仿百度谷歌搜索自
  5. Android 项目开发填坑记 - 使用 MultiDex
  6. Android API中隐藏的类使用(例如IWindowM
  7. Android避免多次弹出Toast提示
  8. Android是怎样调用硬件加速的
  9. Android解析xml文件
  10. Android Studio 及日常常用命令