有一个模糊的java应用程序我想检查一下。代码的混淆程度很低,但在执行流程中有足够的困难。因为我只想知道它想要发送什么样的数据,所以我也认为完全反向设计应用程序有点过分了。
我启动了wireshark来调试流量,它连接到服务器,获取一小块二进制文件,似乎进行了一些握手,然后执行了一些完全加密的查询。通过检查反编译代码,我知道他正在使用rsa、河豚和"sha1andrsa“签名来签署一些东西。这让我相信,它使用的是从服务器(二进制文件的blob )获得的密钥的rsa来交换河豚密钥并从那里继续。这使得仅仅通过嗅探就几乎不可能检查交通情况。
我想做一个代理dll的java类推,我想拦截对javax.crypto.cipher的所有调用,看看它试图用什么密钥加密什么样的数据。我还想传递我自己的河豚密钥,这样我就可以读取流量(假设握手后的所有流量都是加密的)。
我不能简单地重新编译javax.crypto.cipher,因为它不是在src.zip中与jdk一起交付的。我还没有找到那么多关于我想要做的事情的文档,这让我相信这不是正确的/最好的方法。另外,是否有某种动态的java调试器能够拦截这些调用?
编辑:I继续使用arch,下载openjdk,提取和修改所需的文件,重新编译并将它们放在一个经过修改的目录中。然后,我将-Xbootclasspath/p: /modded -verbose:class添加到参数中,我注意到修改后的类不是从/modded加载的,而是从标准库加载的。这是个虫子吗?
发布于 2013-12-23 12:57:15
因此,基于有帮助的评论,我设法找出了它。
jdk提供的src.zip是不完整的,如果它不包含需要修改的类,请尝试使用openjdk。
虽然最好的做法是将-Xbootclasspath与修改过的文件一起使用目录,但它根本不起作用(或者太神秘,找不出答案)。但是,jce.jar在隐藏的jre/lib目录中包含javax.crypto。您应该解压缩jar,替换已编译的类文件并重新压缩所有内容。这最终是可行的:D
https://stackoverflow.com/questions/20679110
复制相似问题