`

android代码混淆以及如何判断一个apk代码是否被混淆过

阅读更多

1、proguard原理

      java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:

    一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆

 

    二、删除无效的代码

 

    三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)

 

缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。

   一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)

  

   二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂

 

   三、java元素名称是配置文件中配置好的

 

所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。

 

  2、proguard配置

 

    -dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。

 

   -keep指定的类和类成员被保留作为入口

 

  -keepclassmembes指定的类成员被保留。

 

 -keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。

 

3、 proguard问题和风险

 

     代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题:

 

     一、混淆错误,用第三方库的时候,必须要告诉proguard不要检查,否则proguard无法报错。

 

     二、运行错误,当code不能混淆的时候,我们必须要正确配置,否则app在运行的时候会出错。

 

     三、调试苦难,出错了,错误堆栈是混淆后的代码,自己也看不懂了。

 

4、 常见的不能混淆的android code

 

     一、android系统组件,系统组件有固定的方法被app调用。

     二、被android resource文件引用到的,名字已经固定,也不能混淆,比如自定义的View。

     三、android parcelable,需要使用android序列化。

     四、其他android官方建议不混淆的,如:android.app.backup.BackupAngentHelper,android.preference.Preference,com.android.vending.licensing.ILicensingService

     五、java序列化方法,系统序列化需要固定的方法

     六、本地方法,不能修改本地方法名

    七、annotations注释

    八、数据库驱动

    九、有些resource文件

    十、用到反射的地方

    总结:Android的四大组件,第三方jar包不能混淆

5、如何测试一个apk的代码是否被混淆过

 

    方案一:

         一、 下载dex2jar包,解压

         二、把apk包的后缀名改为.zip

         三、把apk压解压拿到classes.dex文件,并放到dex2jar所在的目录下

         四、运行命令dex2jar.exe  classes.dex

         五、下载jd-gui

         六、把jar包加载到jd.gui,查看源码,源码中的类名,方法名,变量名是否已经改变

 

   方法二:

      一、下载apktool工具

      二、运行apktool.bat d xxx.apk,把apk反编译成smali

      三、如果想要进一步查看源码,可下载smali2java

      四、使用smali文件的文件名进行分析,如果存在1个或1个以上的资源类的smali文件,就可以证明该apk没有被混淆过。如下图所示:

     

 备注:是apk的核心代码下的资源文件在混淆后不应该出现上述文件,反之则说明该apk没有进行混淆;使用方案一也是要进入核心代码

 

6、作为一个测试不仅检测自己的apk是否被混淆过,而且要测试是否混淆成功,且混淆正确

 

    1、安装被混淆过的apk,进行功能测试

    2、查看混淆好的系统,是否仍保留:Android系统组件,自定义View,Android Parcelable,Android R文件等不能被混淆的文件

 

  • 大小: 48.3 KB
分享到:
评论

相关推荐

    android apk代码混淆

    android 代码混淆自己目前项目所用,真实有效

    Android代码混淆前后分析

    Android代码混淆前后分析

    安卓APK混淆加固重签名工具1.6.0

    3.支持DEX代码混淆,可以针对APK字节码进行多种混淆,字符串加密,指令乱序等功能 4.支持资源混淆,可以对APK包内部的资源文件进行混淆处理 5.支持增加包体积,可以随意增加APK包的体积 6.处理后的APK可以有效保护...

    AndroidAPK及JAR包的代码混淆.pdf

    AndroidAPK及JAR包的代码混淆.pdf

    Android APK及导出JAR包的代码混淆

    Android APK和导出JAR包的代码混淆,自己实践的结果 ,很详细

    Android APK反编译及代码混淆详解(附图)

    在学习Android开发的过程中,往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行...

    详解Android代码混淆实战

    什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。如果开启了混淆,Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,...

    Android如何防止apk程序被反编译

    proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。 下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用

    android混淆编译代码 防止反编译

    Android如何防止apk程序被反编译 亲自测试 完美混淆

    Android代码-安卓res资源混淆器

    安卓apk安装包res混淆器 可以将apk安装包res目录内的文件重命名为0.png、1.png、a.9.png、A.xml...可一定程度上减少安装包体积 使用方法:拖apk文件到AndroidResProguard.bat,成功将生成xxx_r.apk,xxx_mapping....

    Android资源文件混淆工具

    通过输入一个apk文件和签名文件,输出相关的配置文件及资源文件被混淆的apk(带签名),注意是资源文件混淆不是代码混淆噢.

    Android-apk

    只是把java代码混淆了,xml和资源文件、图片并没有混淆,有些应用反编译后java代码用jd-ui根本都无法打开 Android-apk的反编译步骤: 注意:反编译的前提是:开发者没有使用proguard(java代码混淆的工具)。

    apk自定义混淆字典集合.zip

    任选其中一个字典进行自定混淆配置即可,以proguard-1il.txt字典为例,在proguard-rules.pro文件中添加以下代码: -obfuscationdictionary ../proguard-1il.txt -packageobfuscationdictionary ../proguard-1il.txt...

    APK体积优化(附Android Studio操作指引)

    4.1 代码混淆 4.2 利用Lint查找无用代码 5. Zip格式优化 6. classes.dex优化 7. lib优化 8. 参考资料 1. 压缩APK体积的意义 随着项目的不断迭代,功能越来越多,构建出来的apk文件的大小也会越来越大,这样会导致在...

    zxing.java源码解析-Confusion:Android代码混淆

    Android代码混淆 1.什么是代码混淆: Android SDK 自带了混淆工具Proguard。它位于SDK根目录\tools\proguard下面。如果开启了混淆, Proguard默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三...

    Android studio 混淆配置详解

    studio 使用Proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。 功能:Shrinking(压缩)、Optimization(优化)、Obfuscattion(混淆)、Preverification(预校验)四个操作。 优点: 1.删除项目无用的...

    android_最新_反编译工具.7z

    准备一个测试apk(eclipse或androidstudio打包,混淆文件为eclipse或androidstudio默认带的),如Test_android.apk,复制一个副本重命名为Test_android.zip,然后解压,你就可以看到一些东西了,不过这种方式看到的大...

    Android代码混淆的写法总结

    Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目... minifyEnabled ture //是否开启代码混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro

    Android应用开发之代码混淆

    结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段。  混淆器被集成在android 构建系统中,所以你...

    Android代码-Android

    因此,为了方便公司或者自己的开发,抽空准备整理出一个比较完善的库,方便以后开发可以随时拉取代码。如果你对这部分的代码感兴趣,欢迎引入使用,如果引用过程中发现遇到什么闪退,麻烦在Github上给我提个issue,...

Global site tag (gtag.js) - Google Analytics