精华内容
下载资源
问答
  • js, css混淆

    2016-12-08 14:35:00
    原理:调用yuicompressor-2.4.8.jar, 生成混淆后的文件,强大的它能处理css,js。 1,准备一个txt,列出所需要合并的js,如js.txt jquery-1.9.1.min.jsjquery.ui.widget.min.js 2, 建立一个bat文件,内容如下 ...

    原理:调用yuicompressor-2.4.8.jar, 生成混淆后的文件,强大的它能处理css,js。

     

    1,准备一个txt,列出所需要合并的js,如js.txt

    jquery-1.9.1.min.js
    jquery.ui.widget.min.js

     

    2, 建立一个bat文件,内容如下

    for /f %%i in (js.txt) do type %%i >> all.js
    java -jar E:\yuicompressor-2.4.8.jar --type js --charset utf-8 all.js -o min.js
    

    就是这么简单

    转载于:https://www.cnblogs.com/season2009/p/6144854.html

    展开全文
  • 使用gson导致不能混淆的解决办法

    千次阅读 2014-01-09 08:59:31
     原理:解压开混淆后的jar后发现,使用gson.from或者其他方法生成对象时,由于找不到正确的对应类,所以报错了, 我们只要把实现Serialized接口的类不混淆就可以了(因为gson转化过的类必须实现这个接口)。代码...

         由于使用了gson解析json字符串生成对象,导致混淆后的jar包不能正确使用。经过上网查阅资料,找到了正确的混淆方式。

     原理:解压开混淆后的jar后发现,使用gson.from或者其他方法生成对象时,由于找不到正确的对应类,所以报错了,

    我们只要把实现Serialized接口的类不混淆就可以了(因为gson转化过的类必须实现这个接口)。代码如下:



    -keep class com.google.** {
        <fields>;
        <methods>;
    }


    -keepclassmembers class * extends java.io.Serializable {
        static final long serialVersionUID;
        private static final java.io.ObjectStreamField[] serialPersistentFields;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }


    # Gson specific classes
    -keep class sun.misc.Unsafe {
        <fields>;
        <methods>;
    }


    # -keep class com.google.gson.stream.** { *; }  
    # Application classes that will be serialized/deserialized over Gson
    -keep class com.myapp.po.** {
        <fields>;
        <methods>;
    }

    红色部分替换为自己的po包,也就是实现了Serialized接口的类所在的包。代表这些类不进行混淆。


    关于android项目混淆打包注意事项,下面的文章总结也比较全面。

    http://my.eoe.cn/smile_it/archive/3820.html

    展开全文
  • 今天跟大家分享一个微信使用的资源混淆工具,可以混淆资源,更大的好处的可以为...2、利用7z深度压缩先不深究原理,我们来试试怎么用,尝尝鲜。 1、down一个最新AndResGuard的jar包 (解压缩下载的包,打开AndResGuar

    今天跟大家分享一个微信使用的资源混淆工具,可以混淆资源,更大的好处的可以为安装包瘦身。
    相比混淆,很多人应该更关注瘦身,这个工具是怎么达到瘦身的效果呢?
    1、将res/drawable/welcome.png混淆为r/s/a.png
    2、利用7z深度压缩

    先不深究原理,我们来试试怎么用,尝尝鲜。
    1、down一个最新AndResGuard的jar包
    (解压缩下载的包,打开AndResGuard-1.1.7\AndResGuard-1.1.7\tool_output目录)
    2、打开tool_output目录下config.xml,将whitelist标签下的替换为自己id包名,否则无法正常使用。在whitelist的资源默认是不混淆的。
    3、使用cmd命令混淆你的apk
    java -jar AndResGuard-cli-1.1.4.jar yours.apk
    ps.如果遇到zipalign错误,记得要把sdk的build-tools添加入环境变量,这是android打包对齐的一个工具。

    ok,运行无误的话,结果如图:
    这里写图片描述

    点击看大图

    我们看到本次运行使用了16.964s,结果输出在了当前目录的同apk名称的一个文件夹下:
    这里写图片描述

    简单说一下该目录下各文件(夹)的含义:
    1、文件夹temp是初始apk解压得到的
    2、文件夹r是混淆过后的res文件夹,点进去可以看到我们的资源名称已经变成r/s/a的格式了
    3、几个apk都是经过混淆后的apk
    4、一个mapping文件,是混淆前后资源名称的对照
    5、resources.arsc是重新生成的,可以对比一下temp文件夹中同名文件,我实际操作中体积减少了十分之一

    对比一下混淆前后apk的大小:
    这里写图片描述

    进阶用法

    1、使用7zip进一步压缩
    AndResGuard的另一个特点就是支持7Zip打包方式,操作也很简单,还记得之前的config.xml文件么?
    我们在里边打开7zip的开关即可。
    这里写图片描述
    我们给命令加入7zip的路径,如果cmd命令加入了7za可忽略:
    java -jar AndResGuard-cli-1.1.4.jar app-apx-debug.apk -7zip C:\Users\Administrator\Desktop\AndResGuard-1.1.7\
    结果如下:
    这里写图片描述

    点击看大图

    我们可以看到在输出的目录中,多了以7zip为后缀的apk,对比一下几个apk
    这里写图片描述
    可以看到我们的apk的体积进一步的减少了

    2、添加打包的Release.key
    在二次打包的时候,我们需要添加自己的release.key用来发布,我们可以直接在配置文件里设置:
    这里写图片描述

    3、关于白名单
    Whitelist主要是用来设置白名单,由于我们代码中某些资源会通过getIdentifier(需要全局搜索所有用法并添加到白名单)或动态加载等方式,我们并不希望混淆这部分的资源ID。同时对于一些第三方sdk,例如友盟,可能需要将部分资源添加到白名单中。

    –isactive, 是否打开白名单功能;

    –path, 是白名单的项,格式为package_name.R.type.specname,由于一个resources.arsc中可能会有多个包,所以这里要求写全包名。同时支持,?通配符,例如: com.tencent.mm.R.drawable.emoji_、com.tencent.mm.R.drawable.emoji_?;

    注意:1.不能写成com.tencent.mm.R.drawable.emoji.png,即带文件后缀名;2. 通配符代表.+,即a,不能匹配到a;

    上一个例子
    这里写图片描述

    参考资料:
    1、安装包立减1M–微信Android资源混淆打包工具
    2、AndResGuard - github

    展开全文
  •  安卓打包的apk文件可以轻易的使用dex2JAR.bat轻松反编译为java源文件.  这对于很多辛辛苦苦开发的程序员是很沉重的打击呀...  为防止别人破解自己的程序.我们需要添加混淆功能; 什么是混淆? 上面这句话讲...

    问题描述:

         安卓打包的apk文件可以轻易的使用dex2JAR.bat轻松反编译为java源文件.

        这对于很多辛辛苦苦开发的程序员是很沉重的打击呀...

                 为防止别人破解自己的程序.我们需要添加混淆功能;

    什么是混淆? 上面这句话讲了.这是一个可以防止别人"破解"的东东

          


    先写下教程.告诉怎么弄.最后在说原理



    1. 解决方案:

    2.3版本以上在eclipse自动生成的default.properties文件中

    加上一句“proguard.config=proguard.cfg”

    可以对代码进行混淆,反编译后是很难看懂的。



     混淆后.破解的程序源码会是这样子的..你的程序会被替换成这么一堆没意义的字符替代




      就算看自己的程序.估计也不明白在说什么. 最少我看不懂...



    2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可。


    关于使用第三方的包的问题.


    Android - proguard混淆器使用,有引用第三方jar包的时候报错:

    You may need to specify additional libraryjars (using '-libraryjars')

    处理方法:在proguard.cfg文件顶部加入

    -libraryjarslibs/umeng-sdk.jar

    -dontwarn com.motorola.**

    -keep class com.motorola.** { *;}

    说明:-dontwarn和-keep结合参数使用来保持第三方库中的类而不乱,

             -dontwarn com.motorola.**

            意思是保持com.motorola.**这个包里面的所有类和所有方法而不混淆

            -keep class com.motorola.** { *;}

                  意思是ProGuard不要警告找不到com.motorola.**这个包里面的类的相关引用。对应包名改成你对应的jar包顶层package  

     详细可以查看官方文档 http://developer.android.com/tools/help/proguard.html



    如果你使用了第三方的库.那么就需要在proguard.cfg里面加多  

    -dontwarn com.motorola.**

    -keep class com.motorola.** { *;}

    这样类型的话..我们可以看到图示…打开第三方的jar .里面有很多包…

    我们只需要 写下最前面的那个公共的包名部分...就可以了…如图所示.

    这样你把所有应用的第三方的JAR里面的包名都写进去.就可以了!!!!!

    EG:

     





                         proguard 原理


               Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码 ,

               除了注释外,原来的code 基本都可以看到。

               为了防止重要code 被泄露,我们往往需要混淆

              (Obfuscation code , 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称),

                这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。


               proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,

               然后把这些class 文件的可以混淆java 元素名混淆掉。

               在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),

               和代码进行优化 (Optimization Options)。


            缺省情况下,proguard 会混淆所有代码,

            但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。

       一, 我们用到反射的地方。


        二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。


      三, 是我们的java 元素名称是在配置文件中配置好的。

    还有的情况狂是

    Android 程序 ,下面这样代码混淆的时候要注意保留。

    Android系统组件,系统组件有固定的方法被系统调用。

    被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View 。

    Android Parcelable ,需要使用android 序列化的。

    其他Anroid 官方建议 不混淆的,如

    android.app.backup.BackupAgentHelper

    android.preference.Preference

    com.android.vending.licensing.ILicensingService

    Java序列化方法,系统序列化需要固定的方法。

    枚举 ,系统需要处理枚举的固定方法。

    本地方法,不能修改本地方法名

    annotations 注释

    数据库驱动

    有些resource 文件


                  所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的

               所以 如果你打开项目自带的proguard.cfg 文件时候.会看到这么段代码

     

    1.  -keep public class * extends android.app.Activity  
    2. -keep public class * extends android.app.Application  
    3. -keep public class * extends android.app.Service  
    4. -keep public class * extends android.content.BroadcastReceiver  
    5. -keep public class * extends android.content.ContentProvider  
    6. -keep public class * extends android.app.backup.BackupAgentHelper  
    7. -keep public class * extends android.preference.Preference  
    8. -keep public class com.android.vending.licensing.ILicensingService  
     

    但不得不说.混淆的好处是明显的.可也是有一定风险的.


    代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题
    1,混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。
    2,运行错误,当code 不能混淆的时候,我们必须要正确配置,否则程序会运行出错,这种情况问题最多。
    3,调试苦难,出错了,错误堆栈是混淆后的代码 ,自己也看不懂。这时候就真的苦逼了.



                                                下里罗列一堆的配置.看着需要用吧.


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

    -basedirectory {directoryname}    指定基础目录为以后相对的档案名称 

    -injars {class_path}    指定要处理的应用程序jar,war,ear和目录 

    -outjars {class_path}    指定处理完后要输出的jar,war,ear和目录的名称 

    -libraryjars {classpath}    指定要处理的应用程序jar,war,ear和目录所需要的程序库文件 

    -dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。 

    -dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。 

    保留选项 

    -keep {Modifier} {class_specification}    保护指定的类文件和类的成员 

    -keepclassmembers {modifier} {class_specification}    保护指定类的成员,如果此类受到保护他们会保护的更好

    -keepclasseswithmembers {class_specification}    保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。 

    -keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除) 

    -keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除) 

    -keepclasseswithmembernames {class_specification}    保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后) 

    -printseeds {filename}    列出类和类的成员-keep选项的清单,标准输出到给定的文件 

    压缩 

    -dontshrink    不压缩输入的类文件 

    -printusage {filename} 

    -whyareyoukeeping {class_specification}     

    优化 

    -dontoptimize    不优化输入的类文件 

    -assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用 

    -allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员 

    混淆 

    -dontobfuscate    不混淆输入的类文件 

    -printmapping {filename} 

    -applymapping {filename}    重用映射增加混淆 

    -obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称 

    -overloadaggressively    混淆时应用侵入式重载 

    -useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆 

    -flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中 

    -repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中 

    -dontusemixedcaseclassnames    混淆时不会产生形形色色的类名 

    -keepattributes {attribute_name,...}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses. 

    -renamesourcefileattribute {string}    设置源文件中给定的字符串常量

    展开全文
  • 后来想到这个程序的原理是将jar全部解压然后调用java运行库执行,于是到temp文件夹中搜索*.jar,果然找到了目标程序。 很简单的原理,供后来者参考。 我试过,确实很管用,但是如果是在源码里增加了混淆的话,
  • 后来想到这个程序的原理是将jar全部解压然后调用java运行库执行,于是到temp文件夹中搜索*.jar,果然找到了目标程序。 很简单的原理,供后来者参考。 我试过,确实很管用,但是如果是在源码里增加了混淆的...
  • 前段时间做Android项目中,一直出现方法数超过65535的问题,如果混淆后代码中的方法数目没有超过65535,可以通过 在project.properties文件中加上一行dex.force.jumbo=true,解决这个问题。  后来自己参考了网上...
  • class字节码修改(以16进制编辑器)

    千次阅读 2019-08-23 10:49:23
    总目录修改原理修改流程1、使用反编译查看源码2、classpy.jar 查看字节码 网上有好多都是反编译,然后拷贝到项目下,进行修改。这种只能针对没有混淆源码的class文件。 还有就是用 javassist.jar 包修改的,这种针对...
  • 一、反编译: ... 这种方式,其实我不大愿意将他归类于防止反编译,从Android、Java编译原理上来说,针对自身代码做混淆等操作,必然防止不了反编译这个事实。他能做到的就是将字符,函数等混淆成...
  • java防止反编译

    2014-08-28 17:34:02
    原理就是将jar中的包名、类名、属性名、方法名还有代码重新命名、编写一遍, 2.尽量下载最新的proguard,否则混淆代码时可能会报与你的jdk版本不兼容的错误(我使用的是1.7) 3.解压proguard,执行 bin目录下的...
  • 工作原理指南 - Forge Modding 文章 - Forge 教程列表 - 一般 Forge 笔记 - Minecraft By Example - 我的世界锻造 在 MCP 上构建 oo top - Minecraft Coders Pack 使用 MCP 反编译 Minecraft 客户端和服务器 jar ...
  • AntiLVL已重新加载。 AntiLVL antilvl 1.4.0的主要更新。... 其工作原理的简要概述:反编译Apk执行正则表达式匹配进行定义的修改,重新编译,更新classes.dex,辞职和zipalign删除Google Play商店检查
  • 典型的反编译流程包括,如何从apk反编译得到java源代码,如何从apk转换出dex文件,如何从dex文件转换出jar文件,如何从jar文件转换出java源代码等等原理和详细步骤。且总结了和安卓反编译、逆向工程、分析等相关的...
  • Jive资料集

    2007-08-19 11:13:40
    4 WebLogic中文问题配置文件 5 JSP系统信息配置探针 <br> 反编译与混淆 1 編譯、反編譯、反反編譯 <br> 反编译 1 反编译常用工具 <br> 混淆 1 Sun公司的混淆器JADE ...
  • 10.2.1 代码混淆技术 10.2.2 NDK保护 10.2.3 外壳保护 10.3 对抗动态调试 10.3.1 检测调试器 10.3.2 检测模拟器 10.4 防止重编译 10.4.1 检查签名 10.4.2 校验保护 10.5 本章小结 第11章 Android系统攻击与防范 11.1...
  • jive.chm

    千次下载 2007-07-31 12:37:38
    3 为Jive写的补丁程序patcher.jar的源程序 4 WebLogic中文问题配置文件 5 JSP系统信息配置探针 <br> 反编译与混淆 1 編譯、反編譯、反反編譯 <br> 反编译 1 反编译常用工具 ...
  • 2.2.4 使用jar打包程序 2.3 Java程序中的基本输入与输出 2.3.1 字符界面的输入与输出 2.3.2 Applet图形界面输入与输出 2.3.3 Java Application图形界面输入与输出 2.3.4 同时作为Application与Applet的程序 2.4 Java...
  • CVE-2020-2546,CVE-2020-2915 CVE-2020-2801 CVE-2020-2798 CVE-2020-2883 CVE-2020-2884 CVE-2020-2950 WebLogic T3 payload exploit poc python3|CVE-2020-2883-Weblogic coherence.jar RCE|WebLogic-Shiro-shell...
  • 使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu  Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,...
  • 因为,sharding-jdbc 是一款轻量级 Java 框架,以 jar 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。 相关阅读: 读写分离&分库分表常见问题总结 负载均衡 负载均衡系统通常用于将任务比如...
  • 因为,sharding-jdbc 是一款轻量级 Java 框架,以 jar 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。 相关阅读: 读写分离&分库分表常见问题总结 负载均衡 负载均衡系统通常用于将任务比如...
  • 因为,sharding-jdbc 是一款轻量级 Java 框架,以 jar 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。 相关阅读: 读写分离&分库分表常见问题总结 负载均衡 负载均衡系统通常用于将任务比如...
  • 我也曾经一次讲述了太多的问题,但得到的教训是:假如包括了大量新特性,就需要对它们全部作出解释,而这特别容易加深学生们的混淆。因此,我进行了大量努力,使这本书一次尽可能地少涉及一些问题。 所以,我在书中...
  • 这一章将解释try、catch、throw、throws以及finally等关键字在Java中的工作原理。并讲述什么时候应当“掷”出违例,以及在捕获到违例后该采取什么操作。此外,大家还会学习Java的一些标准违例,如何构建自己的违例,...
  • 第1章 J2ME概论.............................................................................................................................3 1.1 本章目的..................................................
  • 第1章 J2ME概论.............................................................................................................................3 1.1 本章目的..................................................
  • 目 录 第1章 J2ME概论.............................................................................................................................3 1.1 本章目的.......................................
  • Thinking.In.Java

    2012-03-21 22:35:53
    这一章将解释try、catch、throw、throws以及finally等关键字在Java中的工作原理。并讲述什么时候应当“掷”出违例,以及在捕获到违例后该采取什么操作。此外,大家还会学习Java的一些标准违例,如何构建自己的违例,...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

jar混淆原理