使用sa-jdi.jar dump 内存中的class
前言
在分析一个 jar
包时发现他把关键类采用了运行时使用 classloader
的方式加载了。懒得分析算法了,可以使用 jdk
自带的工具 dump
出需要的class
.
正文
从运行的java进程里dump出运行中的类的class文件的方法,所知道的有两种
用agent attatch 到进程,然后利用 Instrumentation和 ClassFileTransformer就可以获取 到类的字节码了。
使用 sd-jdi.jar里的工具
本文介绍的就是使用 sd-jdi.jar
来dump. sd-jdi.jar
里自带的的 sun.jvm.hotspot.tools.jcore.ClassDump
可以把类的class内容dump到文件里。
ClassDump
里可以设置两个 System properties
:
- sun.jvm.hotspot.tools.jcore.filter Filter的类名
- sun.jvm.hotspot.tools.jcore.outputDir 输出的目录
示例
首先写一个 filter
类
import sun.jvm.hotspot.tools.jcore.ClassFilter;
import sun.jvm.hotspot.oops.InstanceKlass;
import sun.jvm.hotspot.tools.jcore.ClassDump;
public class MyFilter implements ClassFilter {
@Override
public boolean canInclude(InstanceKlass kls) {
String klassName = kls.getName().asString();
return klassName.startsWith("com/fr/license/selector/");
}
}
代码很显而易见了, 作用是 dump
所有 以 com/fr/license/selector/
开头的 类的· 字节码。
然后编译成class文件
要使用这个首先需要把 sa-jdi.jar
加到 java
的 classpath
里。
进入 刚刚写的 filter
类的class文件的目录下。执行
java -Dsun.jvm.hotspot.tools.jcore.filter=MyFilter -Dsun.jvm.hotspot.tools.jcore.outputDir=d:\dump sun.jvm.hotspot.tools.jcore.ClassDump 5308
把MyFilter
改为你自己的类名, 5308
为目标 java进程的 pid
(可以使用 jps
查看)。然后就会在 d:\dump
产生相应的 class
文件。
问题解决
如果直接点击应用的 exe, 来启动应用,使用 jps 获取到的 pid, 可能没有办法附加, 所以我们要找到启动的命令, 比如 bat脚本里面。
一般大型应用会自带 jre, 我们要使用上面的技术,替换 jre,为我们的,才能正常dump, 否则会出现版本不匹配。
windows下还需把
sawindbg.dll
放到jre/bin/
和java.exe 同目录下。否则可能会遇到 加载不了这个 dll 的问题。
最后
搞java应用第一步还是找到启动的命令,便于后面的分析。一般别使用 exe
启动应用
使用sa-jdi.jar dump 内存中的class的更多相关文章
- 【逆向&渗透实战】Dump内存中的Dex_我是如何脱壳某公司加固过的Apk并利用其API渗透对方数据库
/作者:Kali_MG1937 QQ:3496925334 CNBLOG博客号:ALDYS4/ 某天午睡,朦朦胧胧梦到给学校提供建站模板的公司有个注射点 梦醒后,我凭借着零散的记忆日进了对面的数据库, ...
- IDA在内存中dump出android的Dex文件
转载自http://drops.wooyun.org/tips/6840 在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非 ...
- IDA远程调试 在内存中dump Dex文件
1. 首先使用调试JNI_OnLoad函数的方法,先将apk以调试状态挂起,使用IDA附加上去. 2. 然后在libdvm.so中的dvmDexFileOpenPartial函数上下一个断点 3. 然 ...
- Linux中使用gdb dump内存
在应急响应中,我们往往会有dump出某一块内存下来进行分析的必要.今天要讲的是利用gdb命令dump出sshd进程的内存. 按照 Linux 系统的设计哲学,内核只提供dump内存的机制,用户想要du ...
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- java动态编译类文件并加载到内存中
如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...
- 在JVM发生FGC前后dump内存
原文 http://itindex.net/detail/46666-jvm-fgc-dump 一.需求 有时候web应用经常会发生FGC,我们想知道FGC把那些对象给回收了,思路很简单就是看看FG ...
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...
随机推荐
- C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)
C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇) 名词解释:apxs apxs is a tool for building and installi ...
- (转)python字符串函数
原文:https://www.cnblogs.com/emanlee/p/3616755.html https://blog.csdn.net/luoyhang003/article/details/ ...
- ViewPage最全解析
简单说明: ViewPager是android扩展包v4包中的类,直接继承了ViewGroup类,和LinearLayout等布局一样,都是一个容器,需要在里面添加我们想要显示的内容. 一.在xml中 ...
- Java之IO(七)ObjectInputStream和ObjectOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/7003536.html 1.前言 本章介绍Java字节流中重要的成员,对象流ObjectInputStream和O ...
- 【优化】JSON.stringify()使用优化
JSON.stringify 有性能的问题,移动端尤其明显.下面我们来看看如何优化. 原始写法: function store(key, val) { localStorage.setItem(key ...
- android瓦片地图技术研究
最近根据公司项目需求,需要制作场馆的室内图并且实现根据rfid信号的自动定位功能,研究了好久找到了一个目前为止还算好用的瓦片地图工具——TileView. github连接:https://githu ...
- Python -- 图片处理
使用PIL库 转换图片格式(jpg --> png) from PIL import Image Image.open('E:/art.jpg').save('E:/art.png')
- [C语言]声明解析器cdecl修改版
一.写在前面 K&R曾经在书中承认,"C语言声明的语法有时会带来严重的问题.".由于历史原因(BCPL语言只有唯一一个类型——二进制字),C语言声明的语法在各种合理的组合下 ...
- js / jquery 获取和设置 FCK Editor 的值
开发中遇到 通过 $("#content").val(); 或者 document.getElementById("content"); 并不能获取到 id 为 ...
- 微信小程序之特殊效果及功能
一.下拉刷新效果 假设页面为index文件,那么代码如下: index.json: { "enablePullDownRefresh": true } index.js: //下拉 ...