android代码混淆和反编译


  1. 用proguard混淆代码

          androidtools

   android sdk 自带 proguard 包,因此用proguard混淆 很简单,只需简单配置下就好


         1.  在 project.properties里开启 proguard :         

  sdk.dir=D:\\android\\tool\\android-sdk-windows_4.0
  proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android.txt:proguard.cfg


           2.  在  proguard.cfg做具体配置

     某些情况下,proguard.cfg文件的缺省配置可以满足需求了。但是,对于混淆器来说,大多数情况做出正确的分析是困难的,并且它或许会删除在它看来是无用的,但对于程序来说却确实需要的代码。一些例子如下:
l 一个仅引用于AndroidManifest.xml文件的类。
l 一个通过JNI调用的方法。
l 动态引用的属性和方法。
缺省的proguard.cfg文件试图覆盖普通的情况,但是你可能碰到类似ClassNotFoundException的异常,这个异常出现在当你的程序去访问一个被混淆器移除了的类的时候。
你可以在proguard.cfg文件中添加-keep这一行来修复这些错误。例如:
-keep public class <MyClass>

-Keep设置有很多可选项和注意地方,所以为了获得更多关于配置信息,强烈推荐你阅读混淆器用户手册。特别有用的有Keep选项综述和举例部分。在混淆器手册问题解决方案部分,介绍了代码在混淆过程中你可能碰到的其他常见问题。

            如 不混淆 某些jia包  等

        -dontwarn cn.jpush.**
        -keep class cn.jpush.** { *; }


       -dontwarn com.unionpay.**
      -keep class com.unionpay.** { *; }


          3.可能出现的错误 :

   

          missing type parameter   at  com.google.gson.b.a.a  

           程序中用到了gson的new typeToken,结果打包成apk发布时,发现抛出异常,解决方法:

       在 proguard.cfg中添加

         -dontobfuscate 
         -dontoptimize

       xx  cannot be resolved to a type

       出现这个错误 就是引用的jar包也被混淆了,找到具体的jar包,设置下 keep即可

       -keep class cn.sharesdk.** { *; }   

     注意 : 如果因为引用包混淆出现的错误 很有可能 不会直接显示,只有程序调用引用包的时候 才会报错,因此混淆后需要充分测试,特别是针对引包,如

                   分享
                    登陆
                    二维码扫描
                    百度地图
                    jpush
                    支付宝
                     银联
         等 需要跑一便看看是否正常。            

 

        4  已发布应用程序的调试注意事项

           保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。
例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。
如何保存mapping.txt文件由你决定。例如,你可以根据版本和构建号来重命名它们,或者连同你的源代码进行版本控制。

        5. 混淆语法:


           

参数: 

-include {filename}    从给定的文件中读取配置参数 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android代码可以通过以下几种方式来防止反编译: 1. 混淆代码:在构建APK时启用代码混淆混淆工具可以重命名类、方法和变量名,删除无用的代码,并对代码进行优化,使得反编译后的代码难以理解。可以在项目的build.gradle文件中配置混淆规则,如启用ProGuard混淆。 2. 加密敏感数据:对于敏感数据,可以使用加密算法进行加密处理,使得反编译后的代码无法直接获取到明文数据。 3. 使用动态加载:将一部分代码或资源以加密形式存储在服务器端,通过动态加载的方式在运行时进行解密和加载。这样可以减少静态分析的可能性。 4. 使用JNI(Java Native Interface):将关键代码使用JNI封装,以本地代码的形式实现,这样可以使得反编译后的代码无法直接获取到关键逻辑。 5. 使用数字签名:为APK文件添加数字签名,确保应用程序的完整性和真实性。如果APK文件被篡改,数字签名将无效,从而防止被恶意修改和破解。 总结起来,通过代码混淆、数据加密、动态加载、使用JNI和数字签名等方式可以有效地提高Android代码的安全性,减少反编译的可能性。但需要注意,这些方法并不能完全防止反编译,只能增加攻击者的难度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Android反编译工具与实践](https://blog.csdn.net/lfdfhl/article/details/129941419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [android 防止反编译 安全加固技术](https://blog.csdn.net/skyjie6/article/details/118388579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值