• Android proguard代码混淆


    1. 为什么要代码混淆?

    Android的安装文件是apk格式。APK是AndroidPackage的缩写。是由android sdk编译的工程打包生成的安装程序文件。

    Apk其实是zip文件,但是后缀名被改成了.apk,通过解压就可以看到其中的文件。

    Classes.dex和AndroidManifest.xml都可以直接看见了。

    Dex文件是DalvikVM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。

    先看看 AndroidManifest.xml,用记事本打开后发现是乱码。再打开res文件夹下的layout的xml文件,发现也是乱码。

    再来看.dex文件,dex文件是可以转化成jar文件的,而jar文件同样是可以解压打开的。

    工具准备:

    apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件

    源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的jar包源代码

    dex2jar 和 jdgui 最新版本下载,分别见google code:

    dex2jar(google code)jdgui(google code)

    1. 首先,把dex转化成jar文件

    将classes.dex文件复制到dex2jar.bat所在文件夹(dex2jar-0.0.7-SNAPSHOT),在cmd下进入所在文件夹

    进入cmd,进入所在盘符,比如输入 d: ,然后回车

    输入cd和空格,然后把dex2jar-0.0.7-SNAPSHOT文件夹拖入黑框,回车即可

    输入命令:dex2jar.bat classes.dex 回车

    同目录下生成classes_dex2jar.jar。

    1. 进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了

    不混淆果然很可怕,代码都被看光啦。。

    二.Android代码混淆过程

    打开下的project.properties文件,

    网上说的方法是,将proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt这行的注释去掉,然后生成包就行。

    但是我自己做的时候发现这样是不行,我把这行代码放到target=android-10之后然后再生成包即可完成混淆。

    在项目文件夹下右键,android tools->export unsigned application package,即可生成未签名的包。

    类名和变量变成了a,b,c,d这种无法理解的名称,保护了代码的安全。

    三.带第三方lib的项目混淆过程

    Arcgis for android项目代码peoguard混淆 ,项目中包含第三方包和so文件

    1. -keep classcom.baidu.mapapi.** { *; }  
    2. -keep classcom.google.protobuf.** { *; }  
    3. -keep public class* extends com.google.protobuf.** { *; }  

    使用eclipse的Android Tools导出Application Package时,Proguard就会自动启用

    Debug模式编译,不会触发ProGuard,因为它会使得调试更加复杂累赘。

    四.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件

    如果是只是汉化软件,这将特别有用。

    首先还是下载工具,这次用到的是apktool

    下载地址:http://code.google.com/p/android-apktool/downloads/list

    下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)

    具体步骤:

    将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar

    在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:*.apk C:*文件夹,如下图:

     

    命令行解释:apktool   d   [apk文件 ]   [输出文件夹]

    反编译的文件如下(AndroidManifest.xml为例):

    特别注意:你要反编译的文件一定要放在C盘的根目录里

    将反编译完的文件重新打包成apk,很简单,输入apktool b c:***文件夹(你编译出来文件夹)即可,命令如下:

     

    打包apk后的文件在目录C:HelloAndroid下,生成了两个文件夹:

    build

    dist

    其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok

     

    注:本android反编译教程,是在Windows 7  Ultimate  64bit ,测试通过

     

     

     

     

     

     

  • 相关阅读:
    [NOIP2011]选择客栈
    [学习笔记]字符串的一些基本操作
    [学习笔记]树链剖分
    [宁波集训]0827Day1
    [POI2015]LOG(树状数组)
    [学习笔记]树形dp
    货车运输(最大生成树+倍增LCA)
    POJ 3617 Best Cow Line 贪心算法
    C++ STL next_permutation() prev_permutation(a,a+n)用法。
    POJ 2386 Lake Counting dfs
  • 原文地址:https://www.cnblogs.com/wangcan/p/3477840.html
Copyright © 2020-2023  润新知