网站首页 > java教程 正文
有的时候,我们想分析一个程序的java层逻辑,进行反编译后,发现代码所有的函数名、变量名、类名等都成了一些杂乱无章的名字,没有任何规律可言,这是怎么回事呢?其实程序是被混淆了。
混淆是什么?
混淆是通过一些工具,对函数名、变量名、类名、字段进行批量重命名。
混淆的例子以及作用
例子:
先来看一下没有被混淆的例子:这是我们自己写的程序,反编译:
发现逻辑很清楚,反编译之后的源码和我们写的代码完全一样,我们写的应用就是一只被宰的羊,谁都可以咬一口。
代码保护的第一步就是混淆,就是对代码动下手脚,让反编译出来的代码不这么容易看懂。
打开andoridkiller工具,以X右为例子
打开一个smail文件夹:
发现里面都变成了这种:这种只是初级的混淆,还有一些可能混淆成外文的。
正常的开发中是不会有这种命名的
随便点进去看一个,虽然有影响的,但是影响不大。
需要借助一个工具:jdax-gui;
看一下这工具能把我们的代码还原成什么程序:
我们可以借助一些工具达到简单的混淆的目的,点击这个
图标,它会把我们的代码重新混淆。
重新打开,这里会对我们的代码重新反编译并且重命名,可以方便我们来区分。
混淆无非就是增加我们的逆向时间,放到jdax-gui里面是为了好看一些,但是整体的逻辑是不会混淆的。
也就说,代码混淆并不能一劳永逸的解决代码保护的问题,只是把读代码的时间变得比开发代码的时间还要长,当然,有些核心代码最好不要放在Java中,有一些非常有毅力的人,还是愿意花这个时间的。
ProGuard介绍以及混淆特点
(1)ProGuard会检测和移除封装中未使用的类、字段、方法和属性,包括自带代码库中未使用的项。
(2)ProGuard还可以优化字节码,移除未使用到的代码指令,以及用短名称混淆其余的类、字段和方法。
今天和大家分享了混淆的概率以及非混淆例子的区别,不知道大家有没有get到重点呢?这也是最简单apk保护策略,非常适合小白来学习,小编也给大家整理了,很多学习的资料视频或关注小编回访1即可领取学习大礼包。
猜你喜欢
- 2024-11-08 Java 程序员排行前 10 的错误,你有没有中?
- 2024-11-08 常见面试题之java系列(面试题目java)
- 2024-11-08 Android混淆相关(apk混淆)
- 2024-11-08 Java零基础知识必备「分层概念」(java分层领域模型 太麻烦)
- 2024-11-08 Java面试题分享(java面试题精选)
- 2024-11-08 Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)
- 2024-11-08 JS加密:JavaScript代码加密混淆(js代码加密原理)
- 2024-11-08 Java一键授权方案 离线授权 日期授权 代码授权 代码混淆
- 2024-11-08 Java 基础 - 类与对象(java中类和对象)
- 2024-11-08 Java开发者易犯错误Top10(java: 错误: 不支持发行版本 7)
你 发表评论:
欢迎- 05-23Java线程池:核心参数与最佳实践
- 05-23深入理解 Java 的线程池原理
- 05-23面试突击34:如何使用线程池执行定时任务?
- 05-23Java线程池核心参数调优指南:掌控并发世界的钥匙
- 05-23Java线程池:优雅管理并发任务的艺术
- 05-23一篇文章快速搞懂Java中常用的四种线程池
- 05-23Java线程池工作原理深度解读:从创建到任务执行的全过程
- 05-23一文看懂:Java线程池任务拒绝机制解析
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)