I have a java server that communicates with a java client via json-rpc. The client is supposed to report internal stats to the server which modifies the servers behaviour. Both client and server compenents are written in house so I can control what the client does and how it reports stats but is there a way I can verify that the client code hasn't been modified? If it has it will still service the client but using some default behaviours.
The clients will be publicly available so it's not a big deal for someone to decompile them and alter behaviours.
Simply having the client send a signature of the code no good because could be easily spoofed by keeping an original copy of the client alongside the modified one.