首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 混淆那些事儿

混淆原理 Java 是一种跨平台、解释型语言,Java 源代码编译成class文件中有大量包含语义变量、方法名信息,很容易被反编译为Java 源代码。...混淆不仅能将代码字段、方法名变为无意义名称,保护代码,也由于移除无用、方法,并使用简短名称对字段、方法进行重命名缩小了程序size。...压缩(Shrink): 侦测并移除代码无用字段、方法、特性(Attribute)。 优化(Optimize): 分析优化字节码。...混淆(Obfuscate): 使用a、b、c、d这样简短而无意义名称,对字段方法进行重命名。 上面三个步骤使代码size更小,更高效,也更难被逆向工程。...>] 例如mac平台下: retrace.sh -verbose mapping.txt obfuscated_trace.txt 默认混淆方案及字段解读 下面结合默认混淆文件内容来解释混淆参数

3.2K50

Scala 基础语法(一)

海量【java大数据面试题+视频资料】整理在公众号,关注后可以下载~ 更多大数据技术欢迎作者一起探讨~ 如果你之前是一 Java 程序员,并了解 Java 语言基础知识,那么你能很快学会 Scala... - 是对象抽象,而对象是具体实例。 方法 - 方法描述基本行为,一个可以包含多个方法。 字段 - 每个对象都有它唯一实例变量集合,即字段。对象属性通过给字段赋值来创建。...保存文件时,应该保存它使用对象名称(记住Scala是区分大小写),并追加".scala"为文件扩展。 (如果文件对象名称不匹配,程序将无法编译)。...Scala 命名规则采用 Java 类似的 camel 命名规则,首字符小写,比如 toString。首字符还是使用大写。此外也应该避免使用以下划线结尾标志符以避免冲突。...Java 一样,在文件头定义包,这种方法就后续所有代码都放在该包

71630
您找到你想要的搜索结果了吗?
是的
没有找到

Eclipse 笔记

这组快捷键可以让你打开你工作区任何一个文件,而你只需要按下文件或mask前几个字母,比如applic*.xml。...它可以列出当前所有方法及属性,你只需输入你想要查询法名,点击enter就能够直接跳转至你想去位置。...今天 Java IDE 提供源码处理功能,Eclipse 也是一样。现在,变量方法重命名变得十分简单,你会习惯于在每次出现更好替代名称时候都做一次重命名。...如果你重命名一个属性,你可以点击 alt+shift+r 两次,这会呼叫出源码处理对话框,可以实现get及set方法自动重命名。...新版Eclipse修改建议做很不错,可以帮你解决很多问题,方法缺失参数,throw/catch exception,未执行方法等等。 Alt+方向键 这也是个节省时间法宝。

45710

proguar在Android混淆用法

混淆器通过删除从未用过代码使用晦涩名字重命名字段方法,对代码进行压缩,优化混淆。结果是一个比較小.apk文件,该文件比較难进行逆向project。...proguard 基本语法 // 保留native方法方法法名包含native方法不变 -keepclasseswithmembernames class {   native<methods...set*(***);   *** get*(); } // 保留继承与Activity以View为参数方法 -keepclassmembers class * extends android.app.Activity...implemenets android.os.Parcelable {   public static final android.os.Parcelanle$Creator *; } // 保留 R$*静态字段字段名...(后者用于native不混淆) 不混淆情况: 1 jni 调用java方法 2 四大组件 3 R文件 4 某些通过反射调用或方法 5 第三jar包(一般情况下不要混淆) 混淆去掉log -assumenosideeffects

92720

代码混淆原理是什么?常见代码混淆方法介绍

二、代码混淆方法 字符串加密:对应用程序中使用到字符串进行加密,防止通过IDA等工具获取关键词定位核心业务代码; 、方法名混淆:将代码、方法名、属性替换为无意义符号,增加代码逆向难度;...三、常见代码混淆方式 常见代码混淆方式包括Java代码混淆、C/C++代码混淆以及h5 脚本混淆等。...ipa guard处理流程包含压缩、优化、混淆、预检四个主要环节,如下图所示: ​ 压缩:检测并移除代码无用字段、方法特性(Attribute); 优化:对字节码进行优化,移除无用指令。...优化代码,非入口节点会加上private/static/final,没有用到参数会被删除,一些方法可能会变成内联代码; 混淆:使用a、b、c、d这样简短而无意义名称,对字段方法进行重命名;...可对IOS ipa 文件代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量等关键代码进行重命名混淆处理,降低代码可读性,增加ipa破解反编译难度。

54130

Java 编程风格军规,看这一篇就够了

来源:谷歌 目录 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc ---- 这份文档是Google Java编程风格规范完整定义。...当且仅当一个Java文件符合此文档规则, 我们才认为它符合GoogleJava编程风格。 与其它编程风格指南一样,这里所讨论不仅仅是编码格式美不美观问题, 同时也讨论一些约定及编码标准。...其他术语说明会偶尔在后面的文档出现。 1.2 指南说明 本文档示例代码并不作为规范。也就是说,虽然示例代码是遵循Google编程风格,但并不意味着这是展现这些代码唯一方式。...示例格式选择不应该被强制定为规则。 源文件基础 2.1 文件文件以其最顶层来命名,大小写敏感,文件扩展名为 .java。 2.2 文件编码:UTF-8 源文件编码格式为UTF-8。...在Google其它编程语言风格中使用特殊前缀或后缀, name_, mName, s_name kName,在Java编程风格中都不再使用。

92540

Google Java 编程风格指南

文件基础 源文件结构 格式 命名约定 编程实践 Javadoc ---- 这份文档是Google Java编程风格规范完整定义。...当且仅当一个Java文件符合此文档规则, 我们才认为它符合GoogleJava编程风格。 与其它编程风格指南一样,这里所讨论不仅仅是编码格式美不美观问题, 同时也讨论一些约定及编码标准。...其他术语说明会偶尔在后面的文档出现。 1.2 指南说明 本文档示例代码并不作为规范。也就是说,虽然示例代码是遵循Google编程风格,但并不意味着这是展现这些代码唯一方式。...示例格式选择不应该被强制定为规则。 源文件基础 2.1 文件文件以其最顶层来命名,大小写敏感,文件扩展名为 .java。 2.2 文件编码:UTF-8 源文件编码格式为UTF-8。...在Google其它编程语言风格中使用特殊前缀或后缀, name_, mName, s_name kName,在Java编程风格中都不再使用。

1K11

Google 出品 Java 编码规范,强烈推荐,权威又科学!

当且仅当一个Java文件符合此文档规则, 我们才认为它符合GoogleJava编程风格。 与其它编程风格指南一样,这里所讨论不仅仅是编码格式美不美观问题, 同时也讨论一些约定及编码标准。...其他术语说明会偶尔在后面的文档出现。 1.2 指南说明 本文档示例代码并不作为规范。也就是说,虽然示例代码是遵循Google编程风格,但并不意味着这是展现这些代码唯一方式。...示例格式选择不应该被强制定为规则。 源文件基础 2.1 文件文件以其最顶层来命名,大小写敏感,文件扩展名为 .java。 2.2 文件编码:UTF-8 源文件编码格式为UTF-8。...3.4 声明 3.4.1 只有一个顶级声明 每个顶级都在一个与它同名文件(当然,还包含 .java后缀)。...在Google其它编程语言风格中使用特殊前缀或后缀, name_, mName, s_name kName,在Java编程风格中都不再使用。

2.5K40

Proguard 常用规则

内部属性对于调试很有用,例如源文件,变量行号被删除。 -printmapping [filename] 指定将旧名称映射到已重命名成员新名称映射。...-repackageclasses [package_name] 指定将所有重命名文件重新打包,方法是将它们移动到单个给定。没有参数或者使用空字符串(’’),该软件包将被完全删除。...在保留方法名称时,这通常很有用,以确保方法参数类型不会重命名。他们签名保持完全不变,并与本地库兼容。...除了方法参数列表不包含参数名称外,字段方法在Java定义非常类似(就像在javadocjavap等其他工具中一样)。...也可以使用短(无包)或使用完整来指定构造函数。Java语言一样,构造函数规范有一个参数列表,但没有返回类型。 访问修饰符成员访问修饰符通常用于限制通配成员。

1.6K20

Google Java编程风格规范(2020年4月原版翻译)

当且仅当一个Java文件符合此文档规则, 我们才认为它符合GoogleJava编程风格。 与其它编程风格指南一样,这里所讨论不仅仅是编码格式美不美观问题, 同时也讨论一些约定及编码标准。...其他术语说明会偶尔在后面的文档出现。 1.2 指南说明 本文档示例代码并不作为规范。也就是说,虽然示例代码是遵循Google编程风格,但并不意味着这是展现这些代码唯一方式。...示例格式选择不应该被强制定为规则。 源文件基础 2.1 文件文件以其最顶层来命名,大小写敏感,文件扩展名为.java。 2.2 文件编码:UTF-8 源文件编码格式为UTF-8。...注意:这一点与Google其它语言编程风格不同(C++JavaScript)。 这条规则也适用于以下“运算符”符号:点分隔符(.)...在Google其它编程语言风格中使用特殊前缀或后缀,name_, mName, s_namekName,在Java编程风格中都不再使用。

1K20

android代码混淆

为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code , 也就是把方法,字段,包这些java 元素名称改成无意义名称,这样代码结构没有变化,还可以运行,但是想弄懂代码架构却很难...proguard 就是这样混淆工具,它可以分析一组class 结构,根据用户配置,然后把这些class 文件可以混淆java 元素混淆掉。...二, 我们代码依赖于系统接口,比如被系统代码调用回调方法,这种情况最复杂。 三, 是我们java 元素名称是在配置文件配置好。...-include {filename}    从给定文件读取配置参数 -basedirectory {directoryname}    指定基础目录为以后相对档案名称 -injars {...{package_name}    重新包装所有重命名文件中放在给定单一包 -dontusemixedcaseclassnames    混淆时不会产生形形色色 -keepattributes

1.5K80

Java基础-语法(上)

本节简单介绍一下java基础语法,了解java语法规范、注释、标识符及修饰符相关内容。 1、语法规范 1)大小写敏感:标识符 Hello 与 hello 是不同。 2):首字母大写。...若由若干单词组成,则每个单词首字母要大写, FirstDemo 。...3)方法名: 驼峰命名:所有的方法名都以小写字母开头,若方法名含有若干单词,则后面的每个单词首字母大写,stringDemo。 见知意:根据所写程序用途含义起名。...源文件后缀为 .java(注意区别源文件字节码文件,字节码文件后缀为 .class,不了解可以看我上一篇文章-运行java) 5)主方法(main方法)入口:public static void...2、注释 2.1 三种注释方式 单行注释:// 多行注释:/* */ 文档注释:/** */ (一般用在、方法变量上面,用来描述其作用) 注:为了美观,一般多行和文本注释首行尾行不写注释信息。

16432

Android 代码混淆

开启混淆 在appbuild.gradle文件如下代码: android { .........-keep 防止成员被移除或者被重命名 -keepnames 防止成员被重命名 -keepclassmembers 防止成员被移除或者被重命名 -keepclassmembersname 防止成员被重命名...-keepclasseswithmembers 防止拥有该成员成员被移除或者被重命名 -keepclasseswithmembernames 防止拥有该成员成员被重命名 通配符 * 匹配任意长度字符...成员(方法)通配符 *** 匹配任意参数类型 成员(方法)通配符 … 匹配任意长度任意类型参数 成员(方法)通配符 匹配方法名,eg....TABLENAME; } -keep class **$Properties { *; } 不混淆第三库(包括jar、aar、依赖) -keep class 第三库包.** { *;} : -

1.3K30

【小家MyBatis】MyBatis基础知识33问(详解面试题)

(2)mybatis通过xml或注解方式将要执行各种statement配置起来,并通过java对象statementsql动态参数进行映射生成最终执行sql语句,最后由mybatis框架执行...7、当实体属性字段名不一样 ,怎么办 ? 第1种: 通过在查询sql语句中定义字段别名,让字段别名实体属性一致。...第2种: 通过来映射字段实体类属性一一对应关系 8、 模糊查询like语句该怎么写? 第1种:在Java代码添加sql通配符。...Dao接口,就是人们常说Mapper接口,接口全限,就是映射文件namespace值,接口法名,就是映射文件MappedStatementid值,接口方法内参数,就是传递给sql参数...③ Mapper接口方法输出参数类型mapper.xml定义每个sqlresultType类型相同 ④ Mapper.xml文件namespace即是mapper接口路径。

99930

Google Java编程风格指南

1 前言 这份文档是Google Java编程风格规范完整定义。当且仅当一个Java文件符合此文档规则,我们才认为它符合GoogleJava编程风格。...其他术语说明,将在文档需要说明地方单独说明。 1.2 指南说明 本文档示例代码并不作为规范。也就是说,虽然示例代码是遵循Google编程风格,但并不意味着这是展现这些代码唯一方式。...示例格式选择不应该被强制定为规则。 2 源文件基础 2.1 文件文件以其最顶层(其中只有一个)来命名,大小写敏感,文件扩展名为.java。...在Google其它编程语言风格中使用特殊前缀或后缀,name_, mName, s_namekName,在Java编程风格中都不再使用。...以命名方式(5.2.2节),后面加个大写T(:RequestT, FooBarT)。

95720

使用 R8 压缩您应用

,选择性内联,移除未使用参数合并来优化代码大小; 重命名标识,即混淆处理 : 使用短名称以及缩短包命名空间; 减少调试信息 : 规范化调试信息并压缩行号信息。...您代码大小也可能比实际需要大,因为冗长代码有时可以提高可读性可维护性: 例如,您可能会尽量使用有意义变量建造者模式 (builder pattern) 来帮助其他人更容易检查理解您代码...在此示例,摇树删除了未使用方法,因为 R8 跟踪过程检测到从任何已知入口都无法到达该方法。 接下来,R8 将标识重命名为较短名称,这些名称在 DEX 文件占用较少空间。...但是,该字段由 Gson 序列化读取,而 Gson 使用反射方式来执行此操作,因此 R8 无法看到此字段已被读取。...public java.lang.String name; } 此规则告诉 R8 不要处理 Person name 字段

1.3K30

Android 混淆打包

代码混淆 代码混淆原因 Java 是一种跨平台、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件。...由于跨平台需要,Java 字节码包括了很多源代码信息,变量、方法名,并且通过这些名称来访问变量方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。...:保留成员防止被混淆,但成员如果没有被引用将被删除 keepclassmembers :只保留成员,防止被混淆移除。...(混淆后生产映射文件 map -> 转化后映射 -printmapping proguardMapping.txt #指定映射文件名称 #指定混淆时算法,后面的参数是一个过滤器 #...(混淆后生产映射文件 map -> 转化后映射 #指定混淆时算法,后面的参数是一个过滤器 #这个过滤器是谷歌推荐算法,一般也不会改变 -optimizations !

1.4K30

Android开发:请你吃一顿史上最全Android混淆大餐

从上面两张图可以看出:经过混淆处理之后,我们 APK 、成员等都被替换为随机、无意义名称,增加了代码阅读理解困难程度,提高了反编译成本。...根据 Java 官方介绍,Proguard 对应具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能工具 它能够检测并删除无用、变量、方法属性 它能够优化字节码并删除未使用指令...它能够将、变量方法名字重命名为无意义名称从而达到混淆效果 最后,它还会校验处理后代码,主要针对 Java 6 及以上版本 Java ME 资源压缩 Android ,编译器为我们提供了另外一项强大功能...JNI 调用Java 方法 当 JNI 调用 Java 方法被混淆后,方法名会变成无意义名称,这就与 C++ 中原本 Java法名不匹配,因而会无法找到所调用方法。...由于方法名名称都经过混淆处理,即使程序发生崩溃问题,也很难定位问题所在。

3.8K30

一篇文章带你领略Android混淆魅力

从上面两张图可以看出:经过混淆处理之后,我们 APK 、成员等都被替换为随机、无意义名称,增加了代码阅读理解困难程度,提高了反编译成本。...根据 Java 官方介绍,Proguard 对应具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能工具 它能够检测并删除无用、变量、方法属性 它能够优化字节码并删除未使用指令...它能够将、变量方法名字重命名为无意义名称从而达到混淆效果 最后,它还会校验处理后代码,主要针对 Java 6 及以上版本 Java ME 2.3 资源压缩 Android ,编译器为我们提供了另外一项强大功能...4.5 JNI 调用Java 方法 当 JNI 调用 Java 方法被混淆后,方法名会变成无意义名称,这就与 C++ 中原本 Java法名不匹配,因而会无法找到所调用方法。...由于方法名名称都经过混淆处理,即使程序发生崩溃问题,也很难定位问题所在。

92920
领券