在Windows上的本机代码中,可以通过使用JMP指令替换其序言来挂接函数。最后,我想记录所有发送到javax.net.ssl.SSLSocket或从JNI_CreateJavaVM发送来的数据。

我无法修改jar文件或磁盘上的jre,因为如果哈希值不匹配,它将失效,但是我可以在运行时从本机代码中挂钩任何函数。我挂钩-Djavax.net.debug=all并将WriteFile插入传递给它的参数中。这导致通过套接字发送的所有数据都被写入磁盘,然后我钩住-javaagent以在将数据写入磁盘之前对其进行拦截。

我发现了一些看起来与我想要的内容接近的东西。 ,它是q4312079q参数,但是到我的代理加载时,所有的Java标准库都已加载,因此我看不到使用代理来挂接它的方法。

评论

在特定的网络套接字情况下,wireshark不会比弄乱java类更好吗?或者,如果由于无法访问服务器的私钥而无法使Wireshark解密流量,例如mitmproxy(mitmproxy.org)或fiddler(telerik.com/fiddler)之类的东西?

您是否考虑过从源代码构建JVM并将工具添加到JVM本身?

#1 楼

编辑:这个问题与Dynamic Java工具重叠吗?

Jeong Wook哦,在Blackhat 2012上的一个演讲是他解释了如何通过修改字节码来调用钩子方法来跟踪Java程序,请参见“自动化”部分的纸。据我所知,没有可用的资源或工具。





视频

还有一个名为Javasnoop的工具可用,我没有对其进行测试。它使用“附加API”来监视API调用。此方法似乎更适合您的操作。


Javasnoop幻灯片
Javasnoop下载
附加API


评论


从它的声音来看,由于应用程序本身会检查哈希,因此字节码修改不太可能在这里起作用。

–锑
2014年6月12日14:51

关于重复,IMO取决于您是否认为跟踪和检测与挂钩相同。对我而言,意味着插入一些代码,这些代码也可能会更改参数,函数的输出并影响程序状态。当然存在一些重叠,但是意图,可能可接受的运行时开销以及对用户交互级别的要求可能有很大不同。

–彼得·安德森(Peter Andersson)
2014年6月19日下午16:17

您是对的,重复不是一个正确的术语,我的意思不是因为“请确保也检查此问题以寻找答案”。我将其改写为“这个问题与之重叠”。

– ekse
14年6月19日在17:36

#2 楼

我以前在作业上使用过javasnoop。使用AspectJ,也有一个学习曲线,但这绝对是您的正确解决方案。

评论


您是否有关于如何使用AspectJ进行挂钩/乐器化的参考?

– ekse
14年6月19日在17:34

这就是全部。官方文档。

–offbyseveral
14年6月19日在17:40