摘要: ProGuard的作用: 1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 2.创建的程序和程序库很难使用反向工程. 3.所以它能删除来自源文件中的没有调用的代码 4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件. 参数: -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_path} 指定要处理的应用程序jar,war,ear和目录 -outjars {class_path} 指... 阅读全文
posted @ 2014-01-17 13:11 非子墨 阅读(518) 评论(0) 推荐(0) 编辑
摘要: ProGuard outputs thefollowing files after it runs:dump.txt···描述apk文件中所有类文件的内部结构PrintStream ps = createPrintStream(configuration.dump);try{ programClassPool.classesAccept(new ClassPrinter(ps));}mapping.txt···列出了类、方法、成员的原貌与混淆后的映射表。在收到错误报告时,可以用它翻译混淆后的堆栈信息。-printmappingseed 阅读全文
posted @ 2014-01-17 12:37 非子墨 阅读(565) 评论(0) 推荐(0) 编辑
摘要: 这次我们回顾一下函数的定义,在此之前,如我们学习结构化编程一样,任何语言都脱离不了某种范式,我们先从这些范式入手。首先是条件判断。具体的结构是:if condition;then command;elif condition;then commands;else command;ficondition的编写可以通过test命令或者是[]算子。比如test $m -eq 0 或者是[ $m -eq 0 ]接着是迭代:迭代的集合类数据以逗号或者是空格分割data="data1 data2"迭代的for语句是for item in $datado statements;done; 阅读全文
posted @ 2014-01-17 13:14 非子墨 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 看了,情不自禁希望重新学习我曾经忽视的linux的shell脚本编程。我并不是随波逐流,也不是那种顽固的技术党,只是很纯粹的想了解这么技术,如果你有什么好的想法,也可以跟我交流,下面是我的微博地址:http://weibo.com/1752090185/profile?rightmod=1&wvr=5&mod=personinfo如果你有跟我一样的学习热情,不妨跟我一块学习下去。先说变量的定义:变量的定义非常的简单,就是变量名=变量值,中间不加空格。如果你加上空格,那么shell会认为这个是一个命令而不是一个语句。而你在引用变量的 时候可以通过$变量名的方式来引用。其实你也可以 阅读全文
posted @ 2014-01-17 13:13 非子墨 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 本章我们讲Proguard非常重要的一个步骤:混淆Obfuscator混淆的目的很明显,是为了混淆语义。我们能轻车熟路的找到混淆的源头:Obfuscator 的execute方法我们来看一下就行混淆器给我们设置了怎样的访问者:ClassVisitor memberInfoLinker = configuration.useUniqueClassMemberNames ? (ClassVisitor)new AllMemberVisitor(new MethodLinker()) : (ClassVisitor)new BottomClassFilter(new MethodLinker()); 阅读全文
posted @ 2014-01-17 12:42 非子墨 阅读(1022) 评论(0) 推荐(0) 编辑
摘要: 目前,我们读了Proguard的代码,相信已经开始对访问者模式和装饰器模式有很深的理解,现在我们再带着这两个模式认真的回顾下代码,因为只有这样,我们才能更好的进行下面的代码阅读。但是如果你还带着疑问,不妨看下前面的章节,或者看一些有关设计模式的书体会一下。我们回到我们熟悉的入口Proguard类的execute方法中:第一部分:读取(readinput)InputReader.execute:ClassFilter filter = new ClassFilter(new ClassReader(false,configuration.skipNonPublicLibraryClasses, 阅读全文
posted @ 2014-01-17 12:41 非子墨 阅读(614) 评论(0) 推荐(0) 编辑
摘要: 本章节我们绕回来讲Keep参数,也就是ConfigurationParser 这个类。ConfigurationParser这个类是非常重要的类,如果你已经开始看源码,你会发现所有的类和功能都围着它来转,本章节我们来揭开它的地一层面纱。else if (ConfigurationConstants.KEEP_OPTION.startsWith(nextWord)) configuration.keep = parseKeepClassSpecificationArguments( configuration.keep, true, false, false); else i... 阅读全文
posted @ 2014-01-17 12:40 非子墨 阅读(963) 评论(0) 推荐(0) 编辑
摘要: 上一次我们讲了seed文件,这次我们说压缩,对应的输出文件是usage,可以通过命令-printusage usage.txt来配置压缩的目的是为了删除一些我们不使用的类和方法,从而达到字节码压缩的目的。这里我贴出我的微博:http://weibo.com/1752090185/profile?rightmod=1&wvr=5&mod=personinfo有意向可以加我。直接切入主题吧,压缩是用Shrinker来实现的压缩功能,看过我之前的分析,应该对这种写法并不陌生,这种写法我还没有发现它不好的地方,姑且我们就默认这种写法吧。一样我们找execute方法。我不知道大家对访问者 阅读全文
posted @ 2014-01-17 12:39 非子墨 阅读(737) 评论(0) 推荐(0) 编辑
摘要: Seed文件就是保持住的类文件,直白一点就是不被混淆的文件,他主要是通过printSeeds() 方法实现这里我们要引入一个类ClassVisitor 。这个我们要区分ClassPoolVisitorClassPoolVisitor可以看成是ClassVisitor的组合,也就是说我们单纯看代码实现的时候可以只关注ClassVisitor。先看下seed的输出文件:1:com.test.Test2:com.test.Test: java.lang.String publicP3:com.test.Test: com.test.Test2 test24:com.test.Test: Test() 阅读全文
posted @ 2014-01-17 12:38 非子墨 阅读(1133) 评论(0) 推荐(0) 编辑
摘要: Proguard是Android中经常用的混淆工具,当然你也可以采用其他的混淆工具。但我这边谈到的只是Proguard。大多数人了解Proguard大都通过文档,但是我这次决定从源码入手,分析Proguard。我个人觉得Proguard的源码写的还是非常的出 彩的,当然你可能跟我有不一样的品味,我也不做深究。我这边只想说明一点,那就是,如果你想从这几篇文章里面试图不通过源码就弄懂文章的主体意思,我觉得 你还是绕路吧。下载的网址我就不找了,相信跟我有相同爱好的开源爱好者都不会因为这个而放弃。文章中可能有些地方不当或者语句不通顺的地方敬请见谅。有错 误直接指出,当然如果你要从其他点来分析,补充说明 阅读全文
posted @ 2014-01-17 12:32 非子墨 阅读(1379) 评论(0) 推荐(0) 编辑