• Android混淆、反编译以及反破解的简单回顾


    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过来。
    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目录 extrasandroidsupportv4 android-support-v4.jar”时,可以在-keep前加如下内容即可:
    1. -dontwarn android.support.** 
    2. -libraryjars lib/android-support-v4.jar 
             第一行,表示去除警告,第二行是声明jar(jar包拷到工程内了,所以是相对目录==)。
             这样混淆后,引用的jar包也会一起被混淆。
     
             如果用的第三方jar包是被混淆过的,或你不想混淆,则用-keep去除即可。例如,之前android-support-v4.jar,如果不需要混淆它的话,可以增加这么一句:
    1. -keep class android.support.v4.** { 
    2.         *; 
             此时的话,jar包就不会被混淆了^^。
     
             更详细的使用方法,请参看小节3。
     
    1. 在手册的样例中,有两篇即是讲述Android的,如下:

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

    2. 用法的内容,则在:Manual->Usage。用于学习或查看各命令都是做什么的用。
     
    中文相关的话,可以参考下述网址,呼呼~
     
    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. @echo off 
    2. title APK反编译[by Join
    3.  
    4. rem apktool目录 
    5. set p_at="E:zhaoenvironmentdecompileapktool" 
    6. rem dex2jar目录 
    7. set p_dj="E:zhaoenvironmentdecompiledex2jar-0.0.9.8" 
    8. rem dex2jar后缀 
    9. set suffix=_dex2jar.jar 
    10.  
    11. if "%~1"=="" echo 请将apk直接拖放至bat文件!&goto :over 
    12.  
    13. rem 增加apktool路径 
    14. set path=%p_at%;%p_dj%;%path% 
    15.  
    16. setlocal enabledelayedexpansion 
    17. if /i "%~x1"==".apk" ( 
    18.   echo apktool处理"%~nx1"中... 
    19.   apktool d "%~1" "%~dpn1" 
    20.   echo dex2jar处理"%~nx1"中... 
    21.   dex2jar.bat "%~1" 
    22.   rem dex2jar执行后直接结束了== 
    23.   echo 移动文件"%~n1!suffix!"中... 
    24. else ( 
    25.   echo 文件类型错误:不支持%~x1! 
    26.  
    27. :over 
    28. echo. 
    29. @pause>nul 
             保存成bat,修改下apktool目录&dex2jar目录,将apk拖上去即可。会有一个“同名”文件夹和一个“同名_dex2jar.jar”的文件。文件夹是apktool生成的资源,jar则是dex2jar反编译出的代码。然后用jd-gui打开jar即可。
             注意:dex2jar需要用最新的,可以直接用于apk。代码增加了zip解压,不再需要手动了,不清楚哪个版本开始的==。才发现的,bat也刚升级了下。
     
    2)更多
             看这篇文章就可以了:android反编译小结
     
    三、Android反破解
             不废话,参见“看雪学院->Android软件安全->APK反破解技术小结”。
             那位版主现总结了四篇文章,如下:
     
             还有一些回复和摘录,如下:
     
    1)可以介绍一下openssl工具,挺好用的。
     
    2) 以下为一段整合的回复:
    -> 呵呵~!代码混淆能避免被别人破解吗?
    -> 不能,只是会增加别人破解的难度。如果要防别人破解的话,最好的方法是使用NDK,用C、C++写的代码,用NDK编成so库,用JNI进行调用!
    -> SO库文件包含符号, 调试也比java代码方便, 所以某种意义上说逆向so里面的native code比逆向java还容易。
    -> Open Source 成就了 GNU Tool-chain. ELF里面符号表是“一等公民”. 所以默认选项生成的目标文件里面带符号,虽然可以通过选项分离符号,但是很多时候都会忽略了这一点。
    不过我相信Open Source模式才是未来软件工程的王道。
     
    3)可以多关注dalvik是怎么实现java对JNI调用的。其中会涉及到怎么定位一个native func,有文章可做。
     
    4)Dalvik虚拟机类加载机制的SDK类

             A class loader that loads classes from .jar and .apk files containing a classes.dex entry. 

             Provides a simple ClassLoader implementation 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

    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反编译咯~
     
             参考网址:
                       apk生成odex & 合并odex和少dex的apk为完整apk。
                       当然用这两个jar时,可以先-h看参数说明也差不多。
  • 相关阅读:
    putty GB18030乱码
    iptables小复习
    编译安装 openswan-2.6.34
    Windows常用的命令
    MySql实现远程连接
    防盗链
    java判断一个类是否公共类
    oracle sql性能
    状态模式让我们远离战战兢兢
    LVM管理
  • 原文地址:https://www.cnblogs.com/new0801/p/6175892.html
Copyright © 2020-2023  润新知