在 windows 上的本机代码中,可以通过用JMP
指令替换它们的序言来挂钩。
有没有办法对用 java 编写的应用程序做类似的事情?最后,我想记录发送到/从javax.net.ssl.SSLSocket
.
我无法修改磁盘上的 jar 文件或 jre,因为如果散列不匹配,它会保释,但我可以在运行时从本机代码挂接任何函数。
我现在有一个可行的解决方案,但它非常混乱而且不那么灵活。我正在挂钩JNI_CreateJavaVM
并插入-Djavax.net.debug=all
传递给它的参数。这会导致通过套接字发送的所有数据都被写入磁盘,然后我WriteFile
在它被写入磁盘之前挂钩以拦截该数据。
我发现了一些看起来与我想要的-javaagent
参数很接近的东西,但是当我的代理加载时,所有的 java 标准库都加载了,所以我看不到使用代理挂钩它的方法。