方案设计 我们首先要清除代码混淆要实现什么,就是将原代码名称结构和内容使用一系列的规则码替换...>9.0 名称混淆 名称混淆指的是把类名,方法名,参数名,变量名等定义的名称进行规则码替换,以混淆方法名为例 混淆方法定义 自定义ClassVisitor...AnnotationVisitor对象,调用super方法后返回自定义AnnotationVisitor对象递归处理即可 混淆规则 无论混淆哪一部分,我们总是要根据一个名称例如abc混淆后得到一个固定的规则码例如...123 这时候我们会想到md5这种固定输入对应固定输出的信息摘要算法 md5内容太长,我们需要截取某几位进行简化 简化后的规则码在待混淆内容越多时越容易碰撞,需要需要动态调整,简单递归即可,最坏结果就是完整的...,举例如下 混淆名称中有相同部分的优先排序替换长度最长的部分 例如方法名HandleMethod和Handle两部分,Handle对应的规则码为123,我先替换Handle部分变成了123Method和
图:Java技术体系组件图 Java Virtual Machine(JVM)是Java体系的基础,负责解释、编译执行.class文件形式的字节码,同时负责内存管理、热点代码检测和运行时编译优化。...对于Java应用系统来说,JVM自身提供了相应的性能监控手段和工具,经常在出现问题后,比如内存泄漏或溢出时,我们会通过jmap命令导出堆的转储快照,利用相应的命令jhat或其他相应的第三方内存分析工具来分析对象的占用情况...有可能我们还要接着分析线程转储快照,通过jstack取出线程的栈快照,来分析是否有真死锁、死循环导致的相应缓慢、资源负载高等情况。...图:Java的执行模型 在Java的执行体系中,由.Java源码文件编译后的.class字节码文件,可以理解为中间语言。 ? 图:透视宝Java监控实现原理 ?...* 实现的transform方法中,我们使用的是ASM字节码操作框架,ASM从二进制 形式的类文件中读取、分析类的信息,然后修改改变类的行为。 * transform方法的基本代码形式如下: ?
但是字节码如果我们直接操作,成本太大,并且效率也不高。这个时候你就需要一款利器,将字节码转换成java语言,从而你就可以随心所欲的操纵字节码。...这些工具如ASM,例如Javaassit,BCEL等等,都可以用来操作字节码。...而这里我要介绍的就是操作字节码的一把利器-ASM,ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。...Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。...,甚至可以生成新的类的字节码文件。
当然了,这种事难不倒作为程序员的我。这一篇文章我们就用 Java 来生成一下仿金山词霸的海报。...03、加载海报背景和个人品牌二维码 海报背景的大小为 678 * 1013 像素,个人品牌二维码的大小为 128 * 128 像素。两张图片都是事先准备好的,放在 src 目录下。..." + qrcodeFile.getAbsolutePath()); 在指定的临时目录下可以查看海报背景和个人品牌二维码,如下所示。...08、使用 Swing 构建图形化界面 Swing 是一个用于 Java GUI 编程(图形界面设计)的工具包(类库);换句话说,Java 之所以可以用来开发带界面的 PC 软件,就是因为 Swing...在指定的目录下可找到生成的 jar 包文件。 ? 10、运行 jar 包,填写必要信息后生成海报 如果电脑上安装了 Java 的运行环境,双击该 jar 包文件就可以运行。运行后的界面,如下图所示。
方案4:字节码插桩 字节码函数插桩目前有以下两种框架 ASM 思路:应用程序打包成APK之前会先编译成.class文件,然后打包成dex,最后组成apk。...ASM框架进行字节码函数插桩 ============== 经过上述方案的对比,最终采用ASM进行字节码插桩。主要是对代码的侵入低,可定制化配置(过滤采集页面,过滤时长,配置页面映射等)。...* 使用android提供的Transform API获取project的文件 * 检测到文件后缀为class的时候进行文件修改 \* ASM框架相应API进行字节码读取和分析和插入 \*...dex 效率 -- 比java中使用反射快,在ASM的官网中也有介绍。...相关视频推荐: 【Android组件化设计】字节码插桩优化框架初始化速度 本文转自 https://juejin.cn/post/6844904194445426702,如有侵权,请联系删除。
旨在为 java 提供安全可靠的动态跟踪分析工具。Btrace 基于动态字节码修改技术 (Hotswap) 来实现运行时 java 程序的跟踪和替换。...限制违规 「dumpClasses」 - boolean类型(true/false),是否将转换后的字节码转储到文件中 「dumpDir」 - 指定转换后的类将转储到的文件夹 「stdout」 - boolean...btrace脚本运行结果将要存储的路径 「script」 - 在代理启动时运行的追踪脚本,脚本之间使用冒号进行分隔 要运行的脚本必须已经被btracec编译为字节码(一个*.class*文件)。...BTrace要做的是,虽然修改了字节码,但是除了输出需要的信息外,对整个程序的正常运行并没有影响。...总结 其实作为 Java的动态追踪技术,站在比较底层的角度上来说,底层无非就是基ASM、Java Attach API、Instrument开发的创建。
/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这些和我们刚才的字节形态有关系吗
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 写字节码时,要知道如何传参。
---- 在射击游戏中防止玩家作弊 前言 本篇继续阅读学习《有趣的二进制:软件安全与逆向分析》,本章是在射击游戏中防止玩家作弊,学习内存转储和如何保护软件不被破解 一、内存转储 借用一个小游戏进行学习内存转储的知识...,然后修改它 简单不断搜索找到并修改即可,如下 这两小节在Cheat Engine(CE)教程中有更多的内容 3、获取内存转储 内存转储”(memory dump):将内存数据保存成文件 打开任务管理器...右键点击目标进程名称 选择“创建转储文件” 4、通过转储文件寻找出错原因 当程序崩溃时,最好能够第一时间启动调试器,但有些情况下无法做到这一点。...不过,即便在这样的情况下,只要我们留下了转储文件,也能够通过它来找到出错的原因 用 WinDbg 来分析一下 chap02\guitest2 中的 guitest2.exe 的转储文件 user.dmp...转储到文件中 结语 主要是介绍了内存修改、内存转储、反调试技术、混淆技术、打包和解包技术 都很粗浅,可以发现这本书的内容就是浅尝辄止 ---- 红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立
代码编译生成.class字节码文件 这里有个问题: 当java,kotlin混编的时候,谁会先编译成class字节码,这个顺序是随机的吗?...利用 Transform API,我们可以拿到所有参与构建的 Class 字节码文件,借助 Javassist 或 ASM 等字节码编辑框架进行修改,插入自定义逻辑。...ASM是一个通用的Java字节码操作和分析框架,它可用于修改现有类或直接以二进制形式动态生成类。 ASM提供了非常多的回调,用于处理Class字节码的每一行代码。...更快上手,当然也需要对Java字节码有比较深入的了解 例如一段简单的代码,在ASM框架下,可能就是这样的 二、 Gradle Task修改 可以基于Gradle Task,新增自定义task,修改中间产物以达到最终目的...**优点:**灵活,对字节码的修改没有限制,适用于静态检测,字节码插桩,编译优化,包体优化等相关场景。
dump 出数据 可以不关闭服务器 默认是在关闭服务器时才写结果 维护状态 持续更新中 停止维护 停止维护,不支持java1.8的lamda表达式 什么是字节码插桩 Java字节码插桩技术是指在编译期或运行期...这种技术可以在不改变Java源代码的情况下,对Java应用程序的运行时行为进行监控、调试、分析和优化等操作。举例来说,它可以用于实现性能监控、代码覆盖率检测、代码安全扫描等功能。...字节码插桩技术通常包括以下几个步骤: 生成目标类的字节码,这一步可以通过Java编译器(如javac)或其他工具(如AspectJ)来完成。...解析字节码,识别需要进行插桩的代码区域(如方法、循环、异常处理等)。 插入额外的字节码,通常通过编写Java代码来实现这一步,然后利用字节码生成库(如ASM、Javassist等)生成相应的字节码。...将修改后的字节码重新写回到磁盘或内存中,以供后续使用。 假设我们希望对一个Java方法进行性能监控,我们可以在方法的入口和出口处分别插入计时器,以统计方法的执行时间。
宽字节安全的师傅提出查杀思路:基于javaAgent内存马检测查杀指南 引用文章讲到Java Agent内存马检测的难点: 调用retransformClass方法的时候参数中的字节码并不是调用redefineClass...通过Javaassist等ASM工具获取到类的字节码,也只是读取磁盘上响应类的字节码,而不是JVM中的字节码 宽字节安全的师傅找到了一种检测手段:sa-jdi.jar 借用公众号师傅的图片,这是一个GUI...区别在于这里获取到的是真正的当前的字节码,而不是获取到原始的,本地的字节码,所以是可以查看被Java Agent调用redefineClass后被修改的类的字节码。...) 大致看来,实现起来似乎不难,然而实际中遇到了很多坑,接下来我会逐个介绍 SA-JDI分析 我尝试通过Java Agent技术来获取当前的字节码,发现如师傅所说拿不到被修改的字节码 所以为了可以检测Agent...这种方式终究不是完美的办法,是否存在能够dump下来合法字节码的方式呢(经过一些尝试没有找到办法) 关于检测 可以看到,字节码分析的过程比较简单,尤其是Runtime.exec的普通执行命令内存马,很容易绕过
在服务器启动时,可动态的修改Java字节码,对敏感操作的函数进行挂钩,比如: 数据库操作、文件读取、写入操作、命令执行等等。...自定义 Transformer 会判断该类是否为需要 hook 的类,如果是会将该类交给ASM字节码处理框架进行处理。 c....ASM框架会将类的字节码依照事件驱动模型逐步解析每个方法,当触发了我们需要hook的方法,我们会在方法的开头或者结尾插入进入检测函数的字节码 d....Java字节码的修改;有了修改.class字节码文件的技能,还需要能够在Java运行期间注入我们的防护程序,通过上面的流程框架我们知道Java运行时是发生在JVM中,jdk1.5以后引入了javaAgent...图12 可以看到我们在transform方法中关键类进行拦截,并通过ASM修改字节码注入我们的保护逻辑,图13代码是VisitorAdapter类中的onMethodEnter方法实现了通过ASM框架实现上面
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等字节码操作框架来修改类字节码。
代码编译和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直方图和堆转储的生成
让我们转储进程堆栈。由于是 aarch64 位架构,栈大小为0x4000。所以你可以转储地址范围的堆栈。...0xffffffc87bbd8000 -- 0xffffffc87bbd8000+0x4000 使用 crash 实用程序支持的 rd 命令提取内存转储。...崩溃实用程序提取了 0xffffffc87bbd8000 内存地址转储,因此 T32 上的 0xffffffc87bbd8000 给出了地址偏移量。..., buf = 548726947663, count = 1) -010|el0_svc_naked(asm) ---|end of frame 本文介绍了如何通过仅从 vmcore 转储进程堆栈来查看...这样就可以在 T32 上的 vmcore 中看到内存转储。 关于 Trace32 的升级用法,我这里有一份文档,欢迎关注视频号获取。
itstack-demo-asm-02:字节码编程,两数之和 itstack-demo-asm-03:字节码增强,输出入参 itstack-demo-asm-04:字节码增强,调用外部方法 以上源码可以通过关注公众号...首先如果你看过我的专栏,用《Java写一个Jvm虚拟机》,那么你可能会感受到这里面的知识点还是不那么陌生的。另外这里的编写,ASM还提供了插件,可以方便的让你开发字节码。接下来就介绍一下使用方式。...这个插件可以很轻松的让你看到一段代码的指令码以及如何用ASM去开发。...这样你就可以很方便的去操作一些增强字节码的功能了。 六、用字节码写出一个两数之和计算 好!有了上面的插件,也有了一些基础知识的了解。那么我们开发一个计算两数之和的方法,之后运行计算结果。...此时我们是调用了新的字节码类,同时还将字节码输出方便我们查看生成的 class类。 七、在原有方法上字节码增强监控耗时 到这我们基本了解到通过字节码编程,可以动态的生成一个类。
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源代码文件编译为字节码文件,并将其输出到
目录: 一、前言二、环境配置三、工程信息四、HelloWorld还可以这样写五、有插件的帮助字节码开发也不是很难六、用字节码写出一个两数之和计算七、在原有方法上字节码增强监控耗时八、字节码控制打印方法的入参...首先如果你看过我的专栏,用《Java写一个Jvm虚拟机》,那么你可能会感受到这里面的知识点还是不那么陌生的。另外这里的编写,ASM还提供了插件,可以方便的让你开发字节码。接下来就介绍一下使用方式。...五、有插件的帮助字节码开发也不是很难 对于新人来说如果用字节码增强开发一些东西确实挺难,尤其是一些复杂的代码块使用字节码指令操作还是很有难度的。那么,其实也是有简单办法就是使用 ASM 插件。...是不是看到有插件的帮助下,心里有所激动了,至少写这样的东西有了抓手。这样你就可以很方便的去操作一些增强字节码的功能了。 六、用字节码写出一个两数之和计算 好!有了上面的插件,也有了一些基础知识的了解。...此时我们是调用了新的字节码类,同时还将字节码输出方便我们查看生成的 class 类。 七、在原有方法上字节码增强监控耗时 到这我们基本了解到通过字节码编程,可以动态的生成一个类。
费解了这么长时间,今天我终于可以解释这个现象了,来揭开它的面纱~ 问题发现 java使用者都知道,.java文件属于源码文件,它需要经过了javac编译器编译为.class字节码文件才能被JVM执行的。...对.class字节码稍微有点了解的小伙伴应该也知道这一点:Java在编译的时候对于方法,默认是不会保留方法参数名,因此如果我们在运行期想从.class字节码里直接拿到方法的参数名是做不到的。...那么本文就分析为何Spring MVC为何可以正确的解析到方法参数名称这个问题,从字节码角度深入分析其缘由~ ---- 为了便于理解,先简单说说字节码中的两个概念:LocalVariableTable和...这个属性也是存在于代码(字节码)中~ 从名字可以看出来:它是局部变量的一个集合。描述了局部变量和描述符以及和源代码的对应关系。...---- 小插曲:关于代理的科普(Proxy、CGLIB、Javassist、ASM ): ASM:Java字节码开源操控框架。
领取专属 10元无门槛券
手把手带您无忧上云