如何检索字节码并进行哈希以查看是否有人在内存中或文件中操作了我的字节码?
编辑: 签署二进制文件是否保护代码不被修改和执行?我想保护我的用户不要确保他们正在运行我的软件.我还想保护程序(服务器)不被黑客客户端使用.
如何从服务器端检测是否有人篡改了我的客户端?
因此,您试图通过操作应用程序来阻止某些进程与您的应用程序具有相同(或更高)的权限级别?
这是一项注定要失败的任务.因为如果您添加安全检查,那么什么会阻止攻击者isSecure()
通过简单替换它来修改您的方法return true;
?
我认为你需要澄清你的要求(至少我无法理解你在寻找什么).
在安全相关领域,您总是需要回答两个问题,因为您甚至可以开始解决问题:
我想保护什么?
攻击者有什么功能?
在您的情况下,我相信您正在尝试保护Java客户端的类文件不被修改.在这种情况下,答案取决于(潜在)攻击者可以做什么.
如果攻击者实际上在客户端运行的机器上具有管理员权限,那么基本上没有什么可以做的.正如上面的saua指出的那样,如果你不能相信你正在运行的系统,你就注定要失败.
如果攻击者只能在到达客户端机器之前修改类文件,那么签署JAR文件将让您的客户端检测到操作.
也许你想签署你的jar文件?
通过Intrumentation,通过添加自定义Transformer,您可以获得所需的内容.请参阅http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html
自定义类加载器也可以完成这项工作,因为它在定义类时会获得字节码.
如果有人篡改我的客户端,我如何检测服务器端?
你不能.在互联网上没有人知道你是不是一只狗;-)
严重的:服务器端唯一可以对客户端做出任何假设的选项是通过网络发回的信息.通过加密协议并使其足够难以进行逆向工程,您可以使入侵者难以入侵客户端,但并非不可能.
NGSCB(以前称为Palladium)旨在使其更加安全,但这有其自身的一系列问题.