Android高级混淆和代码保护技术

---------

有了代码混淆还不够,我们需要更多技巧来保护我们的代码,特别是对于需要做混淆但又需要暴露许多 API 的 SDK 开发者来说。混淆是基础,代码安全是意识。

首先我们要知道我们混淆代码是如何被攻破的,其实对于反编译者来说,最简单的入手点就是字符串搜索,我们硬编码留在代码里的字符串值都会在反编译过程中被原样恢复,因此这是我们首要关注对象。避免被通过字符串攻破,我们应该做到以下几点:

一,不要硬编码写入字符串值,即使你不得不这么做,也至少应该另起一个类,比如叫做HardStrings,用于静态存放这些硬编码的字符串。这样反编译者只能搜索到你这个常量类,而较难以搜索到这些字符串常量被哪里引用。

二,在 release 混淆过程中删除 Log 代码,使用 -assumenosideeffects 这个配置项可以帮我们在编译成 APK 之前把日志代码全部删掉,这么做不仅有助于提升性能,而且日志代码往往会保留很多我们的意图和许多可被反编译的字符串:

  1. -assumenosideeffects class android.util.Log {
  2. public static boolean isLoggable(java.lang.String, int);
  3. public static int d(...);
  4. public static int w(...);
  5. public static int v(...);
  6. public static int i(...);
  7. }

三,对于你不得不留下的一些硬编码和日志内容,可以采用编码形式替换,如 你可以规定 "4001" 代表某种错误,而不是在你的代码里写入这个错误的具体描述字符串。这么做的话,你需要有个地方记下这些编码映射的内容,关于此有个技巧:你可以再创建一个常量类,其内容是一堆静态字符串对象,针对上面那个例子,你可以把真正的错误信息作为一个字符串变量的名字,而把它的值写成一个编码,如下:

  1. public static final String SHOULD_REGISTER_FIRST_ERROR = "ssrrffe";

这样当你在看没混淆的代码引用这个静态变量,你能够一目了然它的意思。而反编译者看到的则是:

  1. public static final String abc = "ssrrffe";

命名看不懂,值也看不懂。

四,把 AppKey 之类特别敏感的字符串内容藏在 native so 文件中。

关于字符串技巧的内容差不多就这样了,能做到这些就不错了,还有一些极端做法不多说,为了阻碍黑客阅读,自己也变得非常麻烦,双刃剑,这不是我们想要的结果。

然后我们讲另一个混淆后代码的软肋,就是一些我们不得不 keep 的内容,如果是闭源 SDK 开发者,需要 keep 的内容将会更多,几乎只要是 public 的类、变量,方法,全部要 keep,那么针对这个问题,我们该怎么办?介绍一个方法:

给这些需要 keep 的内容设置委托者,然后将委托者投入大海之中。

很玄乎吧?哈哈,这么讲有助于记忆。其实和我们在混淆章节说的藏叶于林的思想是一样的。如果一个类不得不 keep,那就把它所做的全部内容都转交给一个 private 或 internal 的类对象去完成,这个委托类对象代码可以完全混淆,然后你再把这个委托类通过混淆工具藏在大量的代码之中,这样就足够给反编译者带来了很大的麻烦,相比直接获取逻辑代码,这么做以后要找到实体的逻辑代码将费劲得多。

因此,如果你知道有这么一个方式,其实你完全可以不使用饿了么提供的那个 Activity 和 View 混淆工具,也能很好地保护你的 Activity 和 View。

不过一般情况我们无需所有内容都保护,只要把关键、核心内容委托出去就可以了。

最后的最后,我们还需要做的就是防止反编译者重新打包,全方位绝人之路呀,能做的就是在代码中加入签名验证,并做双向依赖。关于此我写过一个类似阿里黑匣子的东西,能够在 native 检查签名和加解密内容,后续也有计划整理开源,这里暂且就不多说了。

除此之外,我专门写过一篇叫作《Android 密钥保护和 C/S 网络传输安全理论指南》 的文章,感兴趣可以之后移步阅读。

总之,代码安全和混淆是一个意识加技巧的问题,但都不难,掌握以上内容就已经十分好了。分享到此结束,如有疑问或问题欢迎来信交流。

android 代码保护 高级混淆相关推荐

  1. 文件不混淆_Python代码保护 | pyc 混淆从入门到工具实现

    之前接触到 Python 逆向相关的一些 CTF 题目(最近一次是某符的 game),有的给出 Python 的伪指令,还有的直接给了一个被替换过指令的 pyc 文件,于是学习了一下Python 的字 ...

  2. int定义源码 python_Python代码保护 | pyc 混淆从入门到工具实现

    之前接触到 Python 逆向相关的一些 CTF 题目(最近一次是某符的 game),有的给出 Python 的伪指令,还有的直接给了一个被替换过指令的 pyc 文件,于是学习了一下Python 的字 ...

  3. Android高级混淆和代码保护技术

    本文讲的是 Android高级混淆和代码保护技术, 这是一篇关于 Android 代码保护的文章,旨在介绍代码混淆.防止逆向工程的各种高级技巧.大家都很忙,我也赶着回去继续开发我的新应用,因此话不多说 ...

  4. Android 高级混淆和代码保护技术

    转载自@drakeet Android大牛的博客 http://drakeet.me/android-advanced-proguard-and-security/ Android 高级混淆和代码保护 ...

  5. Android代码混淆方法,Android 代码混淆零基础入门

    内容提要 本篇文章主要有三个部分,让读者读完后能自己写规则混淆项目 对Android代码怎么开启混淆做一个简单的介绍. 对混淆规则做一个简单介绍: 在混淆过后Crash日志反推代码工具retrace. ...

  6. android studio 混淆jar,android studio如何生成混淆代码的jar

    释放双眼,带上耳机,听听看~! 今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android s ...

  7. android studio如何生成混淆代码的jar

    今天,简单讲讲android里如何在生成jar包时,同时对jar包的代码进行混淆,避免别人看到核心代码. 之前,我对领导说我打包生成的SDK,别人使用android studio导入后可以看所有的源码 ...

  8. android 代码混淆模板

    #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubli ...

  9. Android代码混淆

    作为一名技术开发人员,为了保护源代码,阻止反向工程我们势必会接触到代码混淆.代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为,代码混淆可以用于程序源代码, ...

最新文章

  1. 在C++项目中引入Lua(AlphaGo使用的方案)
  2. 上周热点回顾(9.7-9.13)
  3. 华为p4用鸿蒙系统吗_华为mate40是鸿蒙系统吗
  4. 求生2本地服务器怎么修改参数,《求生之路2》服务器指令及难度参数设置(难度篇)...
  5. java求圆弧切线_两个圆的公切线
  6. android之appwidget(一)简单appwidget
  7. JavaScript之爆肝汇总【万字长文❤值得收藏】
  8. 人工智能AI - 学习/实践
  9. Tapestry5单元测试
  10. 差分进化算法_差分进化算法入门及实例应用
  11. HIS(Hospital Information System,医院信息系统)简介
  12. maya 2017 linux 下载,Maya插件下载 Maya神级特效优化插件Soup For Maya 2017-2019 Win/Mac/Linux安装版 下载-脚本之家...
  13. YOLO系列模型,yolov3-yolov7全方位对比实验参照,包括参数量Params,计算量GFLOPs,复杂度,mAP以及FPS等参照
  14. 第7章 区块链开发平台:超级账本
  15. 解决element 表单验证不通过的俩大坑
  16. AirDrop显示名字的修改问题
  17. ubuntu下全角半角切换
  18. 常见中文字体英文名称以及windows默认字体类型
  19. linux 运行QQ /Tim(超简单)
  20. 区块链技术以太坊简介

热门文章

  1. css响应式网页设计:自适应屏幕宽度、移动页面开发技巧
  2. 服务器怎么分盘?Windows系统服务器分盘操作方法
  3. 联想 M4400 升级无线网卡 -- 根据白名单升级网卡
  4. 大数据时代来临了,你需要了解什么是大数据
  5. CC2530的中断操作----按键控制led灯亮灭
  6. 真真正正解决VScode不能安装插件问题、无法连接到应用商城问题
  7. conda加速器mamba使用
  8. php中的数据库操作和字符串操作session与cookie操作,php中的数据库操作和字符串操作session与cookie操作...
  9. 前端开发常见的缩写词中英文对照
  10. 禅道发信配置(网易企业邮箱)