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

从零开发基于ASM字节Java代码混淆插件XHood

方案设计 我们首先要清除代码混淆要实现什么,就是将原代码名称结构和内容使用一系列规则替换...>9.0 名称混淆 名称混淆指的是把类名,方法名,参数名,变量名等定义名称进行规则替换,以混淆方法名为例 混淆方法定义 自定义ClassVisitor...AnnotationVisitor对象,调用super方法后返回自定义AnnotationVisitor对象递归处理即可 混淆规则 无论混淆哪一部分,我们总是要根据一个名称例如abc混淆后得到一个固定规则例如...123 这时候我们会想到md5这种固定输入对应固定输出信息摘要算法 md5内容太长,我们需要截取某几位进行简化 简化后规则在待混淆内容越多时越容易碰撞,需要需要动态调整,简单递归即可,最坏结果就是完整...,举例如下 混淆名称中有相同部分优先排序替换长度最长部分 例如方法名HandleMethod和Handle两部分,Handle对应规则为123,我先替换Handle部分变成了123Method和

13510

干货 | 云智慧透视宝Java代码性能监控实现原理

图:Java技术体系组件图 Java Virtual Machine(JVM)是Java体系基础,负责解释、编译执行.class文件形式字节,同时负责内存管理、热点代码检测和运行时编译优化。...对于Java应用系统来说,JVM自身提供了相应性能监控手段和工具,经常在出现问题后,比如内存泄漏或溢出时,我们会通过jmap命令导出堆快照,利用相应命令jhat或其他相应第三方内存分析工具来分析对象占用情况...有可能我们还要接着分析线程快照,通过jstack取出线程栈快照,来分析是否有真死锁、死循环导致相应缓慢、资源负载高等情况。...图:Java执行模型 在Java执行体系中,由.Java源码文件编译后.class字节文件,可以理解为中间语言。 ? 图:透视宝Java监控实现原理 ?...* 实现transform方法中,我们使用ASM字节操作框架,ASM从二进制 形式类文件中读取、分析类信息,然后修改改变类行为。 * transform方法基本代码形式如下: ?

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

开源)嗨,Java,你可以生成金山词霸二维分享海报

当然了,这种事难不倒作为程序员我。这一篇文章我们就用 Java 来生成一下仿金山词霸海报。...03、加载海报背景和个人品牌二维 海报背景大小为 678 * 1013 像素,个人品牌二维大小为 128 * 128 像素。两张图片都是事先准备好,放在 src 目录下。..." + qrcodeFile.getAbsolutePath()); 在指定临时目录下可以查看海报背景和个人品牌二维,如下所示。...08、使用 Swing 构建图形化界面 Swing 是一个用于 Java GUI 编程(图形界面设计)工具包(类库);换句话说,Java 之所以可以用来开发带界面的 PC 软件,就是因为 Swing...在指定目录下可找到生成 jar 包文件。 ? 10、运行 jar 包,填写必要信息后生成海报 如果电脑上安装了 Java 运行环境,双击该 jar 包文件就可以运行。运行后界面,如下图所示。

71530

ASM字节插桩

方案4:字节插桩 字节函数插桩目前有以下两种框架 ASM 思路:应用程序打包成APK之前会先编译成.class文件,然后打包成dex,最后组成apk。...ASM框架进行字节函数插桩 ============== 经过上述方案对比,最终采用ASM进行字节插桩。主要是对代码侵入低,可定制化配置(过滤采集页面,过滤时长,配置页面映射等)。...* 使用android提供Transform API获取project文件 * 检测到文件后缀为class时候进行文件修改 \* ASM框架相应API进行字节读取和分析和插入 \*...dex 效率 -- 比java中使用反射快,在ASM官网中也有介绍。...相关视频推荐: 【Android组件化设计】字节插桩优化框架初始化速度 本文自 https://juejin.cn/post/6844904194445426702,如有侵权,请联系删除。

95650

动态追踪技术之BTrace

旨在为 java 提供安全可靠动态跟踪分析工具。Btrace 基于动态字节修改技术 (Hotswap) 来实现运行时 java 程序跟踪和替换。...限制违规 「dumpClasses」 - boolean类型(true/false),是否将转换后字节到文件中 「dumpDir」 - 指定转换后类将文件夹 「stdout」 - boolean...btrace脚本运行结果将要存储路径 「script」 - 在代理启动时运行追踪脚本,脚本之间使用冒号进行分隔 要运行脚本必须已经被btracec编译为字节(一个*.class*文件)。...BTrace要做是,虽然修改了字节,但是除了输出需要信息外,对整个程序正常运行并没有影响。...总结 其实作为 Java动态追踪技术,站在比较底层角度上来说,底层无非就是基ASMJava Attach API、Instrument开发创建。

61320

python0011 - python虚拟机本质_cpu架构_二进制字节_汇编语言

/python3.8​编辑python3.8是一个5.3M文件可以看得见可以直接运行这个phthon3.8?...cpu 开始逐行执行文件中0101指令可以把他复制到shiyanlou用户宿主文件夹下?...这些我们看不懂乱码cpu能看懂这是属于cpu机器语言这就是cpu一条条机器指令(instruction)​编辑机器指令都是二进制形式我们尝试把python3.8化为字节表现形式以字节形式观察...xxd​编辑xxd 可以查看文件二进制形态dump本意是(倾倒垃圾)这里指的是把文件为16进制形式汇编代码形式​:xxd –r​​ 可以还原回去 ​​:%!...> python3.8.asmvi python3.8.asm这次真的可以看懂了减法(sub)移动(mov)这些指令​编辑可以发现当前系统架构(指令集)是x86-64这些和我们刚才字节形态有关系

96350

ASM 字节增强

The class File Format 字节查看工具 这里介绍三种查看字节命令方式 方式一: JDK 工具包 bin 目录下提供 javap,该工具可以查看 Java 编译后 class...以下是一些常见 Java 字节类库: ASM (Bytecode Manipulation Framework): 简介:ASM 是一个轻量级字节操作框架,提供了生成和转换字节功能。...它是一个强大字节工具,被广泛用于许多 Java 字节操作场景。 官方网站:ASM Byte Buddy: 简介:Byte Buddy 是一个用于创建和操作字节库。...ASM 可以在类被加载入 JVM 之前动态修改已存在类行为,也可以直接生成 .class 字节文件。...面临两个问题: 1、需要知道源代码对应各种助记符,通过 ASM 语法 VisitXXXXInsn()。 2、ASM字节时,要知道如何传参。

29310

在射击游戏中防止玩家作弊

---- 在射击游戏中防止玩家作弊 前言 本篇继续阅读学习《有趣二进制:软件安全与逆向分析》,本章是在射击游戏中防止玩家作弊,学习内存和如何保护软件不被破解 一、内存 借用一个小游戏进行学习内存知识...,然后修改它 简单不断搜索找到并修改即可,如下 这两小节在Cheat Engine(CE)教程中有更多内容 3、获取内存 内存”(memory dump):将内存数据保存成文件 打开任务管理器...右键点击目标进程名称 选择“创建文件” 4、通过文件寻找出错原因 当程序崩溃时,最好能够第一时间启动调试器,但有些情况下无法做到这一点。...不过,即便在这样情况下,只要我们留下了文件,也能够通过它来找到出错原因 用 WinDbg 来分析一下 chap02\guitest2 中 guitest2.exe 文件 user.dmp...到文件中 结语 主要是介绍了内存修改、内存、反调试技术、混淆技术、打包和解包技术 都很粗浅,可以发现这本书内容就是浅尝辄止 ---- 红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立

70320

Android编译小知识

代码编译生成.class字节文件 这里有个问题: 当java,kotlin混编时候,谁会先编译成class字节,这个顺序是随机?...利用 Transform API,我们可以拿到所有参与构建 Class 字节文件,借助 Javassist 或 ASM字节编辑框架进行修改,插入自定义逻辑。...ASM是一个通用Java字节操作和分析框架,它可用于修改现有类或直接以二进制形式动态生成类。 ASM提供了非常多回调,用于处理Class字节每一行代码。...更快上手,当然也需要对Java字节有比较深入了解 例如一段简单代码,在ASM框架下,可能就是这样 二、 Gradle Task修改 可以基于Gradle Task,新增自定义task,修改中间产物以达到最终目的...**优点:**灵活,对字节修改没有限制,适用于静态检测字节插桩,编译优化,包体优化等相关场景。

61130

你们单测覆盖率是如何统计?原理是什么?

dump 出数据 可以不关闭服务器 默认是在关闭服务器时才写结果 维护状态 持续更新中 停止维护 停止维护,不支持java1.8lamda表达式 什么是字节插桩 Java字节插桩技术是指在编译期或运行期...这种技术可以在不改变Java源代码情况下,对Java应用程序运行时行为进行监控、调试、分析和优化等操作。举例来说,它可以用于实现性能监控、代码覆盖率检测、代码安全扫描等功能。...字节插桩技术通常包括以下几个步骤: 生成目标类字节,这一步可以通过Java编译器(如javac)或其他工具(如AspectJ)来完成。...解析字节,识别需要进行插桩代码区域(如方法、循环、异常处理等)。 插入额外字节,通常通过编写Java代码来实现这一步,然后利用字节生成库(如ASM、Javassist等)生成相应字节。...将修改后字节重新写回到磁盘或内存中,以供后续使用。 假设我们希望对一个Java方法进行性能监控,我们可以在方法入口和出口处分别插入计时器,以统计方法执行时间。

20510

Agent内存马自动分析与查杀

字节安全师傅提出查杀思路:基于javaAgent内存马检测查杀指南 引用文章讲到Java Agent内存马检测难点: 调用retransformClass方法时候参数中字节并不是调用redefineClass...通过Javaassist等ASM工具获取到类字节,也只是读取磁盘上响应类字节,而不是JVM中字节字节安全师傅找到了一种检测手段:sa-jdi.jar 借用公众号师傅图片,这是一个GUI...区别在于这里获取到是真正的当前字节,而不是获取到原始,本地字节,所以是可以查看被Java Agent调用redefineClass后被修改字节。...) 大致看来,实现起来似乎不难,然而实际中遇到了很多坑,接下来我会逐个介绍 SA-JDI分析 我尝试通过Java Agent技术来获取当前字节,发现如师傅所说拿不到被修改字节 所以为了可以检测Agent...这种方式终究不是完美的办法,是否存在能够dump下来合法字节方式呢(经过一些尝试没有找到办法) 关于检测 可以看到,字节分析过程比较简单,尤其是Runtime.exec普通执行命令内存马,很容易绕过

1.6K20

web安全防御之RASP技术

在服务器启动时,可动态修改Java字节,对敏感操作函数进行挂钩,比如: 数据库操作、文件读取、写入操作、命令执行等等。...自定义 Transformer 会判断该类是否为需要 hook 类,如果是会将该类交给ASM字节处理框架进行处理。 c....ASM框架会将类字节依照事件驱动模型逐步解析每个方法,当触发了我们需要hook方法,我们会在方法开头或者结尾插入进入检测函数字节 d....Java字节修改;有了修改.class字节文件技能,还需要能够在Java运行期间注入我们防护程序,通过上面的流程框架我们知道Java运行时是发生在JVM中,jdk1.5以后引入了javaAgent...图12 可以看到我们在transform方法中关键类进行拦截,并通过ASM修改字节注入我们保护逻辑,图13代是VisitorAdapter类中onMethodEnter方法实现了通过ASM框架实现上面

5.5K31

Java Agent原理及实现

API可以让代理程序注册到JVM中,而java.lang.ClassFileTransformer API允许代理程序使用ASM字节操作框架来修改类字节。...当类被加载到JVM时,代理程序就可以使用ClassFileTransformer API来检测并且修改这个类字节,使得这个类被加载到JVM后可以被代理程序所处理。...方法,同时实现ClassFileTransformer接口来修改类字节: package com.dc; import org.objectweb.asm.*; import java.lang.instrument.ClassFileTransformer..., mv); } @Override public void visitCode() { /*此处可以加操作字节文件逻辑...总结: 在本文中,我们对Java Agent进行了简单介绍,包括它原理、运行机制以及如何使用ASM字节操作框架来修改类字节

63220

Java性能优化工具和技术

代码编译和JIT Java字节解释显然没有直接从主机执行本地代码快。为了提高性能,Hotspot JVM寻找最繁忙字节代码区域,并将其编译为本机更高效机器代码(自适应优化)。...类加载 Java另一个重要特性就是能够在启动JVM之后加载编译Java类(字节)。根据您应用程序大小,类加载过程可能是侵入性,并且在重新启动后会在高负载下显著降低应用程序性能。...Oracle HotSpot和IBM JVM为大多数场景实现提供了死锁检测器,从而可以快速识别出这种情况下所涉及凶手线程。与锁争用故障排除类似,建议使用线程分析等技术作为起点。...对于缺乏强大APM解决方案Java生产环境,您仍然可以依赖诸如Java VisualVM,线程分析(通过多个快照)和每个线程分析OS CPU等工具。 最后,不要同时解决所有问题。.../developerworks/java/jdk/tools/memoryanalyzer/Plumbr (Java内存泄漏检测器)https://plumbr.eu/jmap (heap直方图和堆生成

1.9K60

ASM字节编程 | 如果你只写CRUD,那这种技术栈你永远碰不到!!!

itstack-demo-asm-02:字节编程,两数之和 itstack-demo-asm-03:字节增强,输出入参 itstack-demo-asm-04:字节增强,调用外部方法 以上源码可以通过关注公众号...首先如果你看过我专栏,用《Java写一个Jvm虚拟机》,那么你可能会感受到这里面的知识点还是不那么陌生。另外这里编写,ASM还提供了插件,可以方便让你开发字节。接下来就介绍一下使用方式。...这个插件可以很轻松让你看到一段代码指令以及如何用ASM去开发。...这样你就可以很方便去操作一些增强字节功能了。 六、用字节写出一个两数之和计算 好!有了上面的插件,也有了一些基础知识了解。那么我们开发一个计算两数之和方法,之后运行计算结果。...此时我们是调用了新字节类,同时还将字节输出方便我们查看生成 class类。 七、在原有方法上字节增强监控耗时 到这我们基本了解到通过字节编程,可以动态生成一个类。

2.2K40

JVM常用命令及其用法,简直太全了!

JVM常用命令JVM提供了多种命令,可以用于查看JVM状态、调整JVM配置、分析JVM内存使用情况等。以下是一些常用JVM命令:java:启动Java应用程序。...javac:编译Java源代码为字节文件。jps:显示当前系统中所有Java进程信息。jstat:显示JVM各种状态信息,例如内存使用情况、GC情况等。...jmap:生成JVM快照,用于分析内存使用情况。jstack:生成JVM线程快照,用于分析线程问题。jcmd:向正在运行Java进程发送诊断命令。jinfo:显示JVM配置信息。...3. javac命令javac命令用于编译Java源代码为字节文件,其基本语法如下:javac [options] sourcefiles其中,sourcefiles是要编译Java源代码文件名,可以同时指定多个文件...以下是一个使用javac命令编译Java源代码示例:javac -d classes -cp lib/*.jar src/*.java在上述示例中,我们将Java源代码文件编译为字节文件,并将其输出到

53030

ASM字节编程 | 如果你只写CRUD,那这种技术栈你永远碰不到!!!

目录: 一、前言二、环境配置三、工程信息四、HelloWorld还可以这样写五、有插件帮助字节开发也不是很难六、用字节写出一个两数之和计算七、在原有方法上字节增强监控耗时八、字节控制打印方法入参...首先如果你看过我专栏,用《Java写一个Jvm虚拟机》,那么你可能会感受到这里面的知识点还是不那么陌生。另外这里编写,ASM还提供了插件,可以方便让你开发字节。接下来就介绍一下使用方式。...五、有插件帮助字节开发也不是很难 对于新人来说如果用字节增强开发一些东西确实挺难,尤其是一些复杂代码块使用字节指令操作还是很有难度。那么,其实也是有简单办法就是使用 ASM 插件。...是不是看到有插件帮助下,心里有所激动了,至少写这样东西有了抓手。这样你就可以很方便去操作一些增强字节功能了。 六、用字节写出一个两数之和计算 好!有了上面的插件,也有了一些基础知识了解。...此时我们是调用了新字节类,同时还将字节输出方便我们查看生成 class 类。 七、在原有方法上字节增强监控耗时 到这我们基本了解到通过字节编程,可以动态生成一个类。

52320

为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】

费解了这么长时间,今天我终于可以解释这个现象了,来揭开它面纱~ 问题发现 java使用者都知道,.java文件属于源码文件,它需要经过了javac编译器编译为.class字节文件才能被JVM执行。...对.class字节稍微有点了解小伙伴应该也知道这一点:Java在编译时候对于方法,默认是不会保留方法参数名,因此如果我们在运行期想从.class字节里直接拿到方法参数名是做不到。...那么本文就分析为何Spring MVC为何可以正确解析到方法参数名称这个问题,从字节角度深入分析其缘由~ ---- 为了便于理解,先简单说说字节两个概念:LocalVariableTable和...这个属性也是存在于代码(字节)中~ 从名字可以看出来:它是局部变量一个集合。描述了局部变量和描述符以及和源代码对应关系。...---- 小插曲:关于代理科普(Proxy、CGLIB、Javassist、ASM ): ASMJava字节开源操控框架。

1.2K32
领券