关于在客户端绑定设备和对Java代码进行加密的想法总结

近日,公司项目有关于服务器对客户端进行绑定的操作。在绑定范围内的设备允许访问服务器,进行相应的服务。对于绑定范围外的设备,不能得到相应的服务

需求如上,实况如下:
1.服务器项目是maven管理的web项目。web项目是B/S模式,不是C/S模式。无法通过一个简单的Http连接获取到客户端的详细设备信息。即使能获取到,也要考虑用户篡改,伪造,代理等因素,所以最初的方案,向客户端获取设备信息失败
2.既然B/S模式不能获取,那么我们需要想办法在客户端有我们的相关代码,去获取用户的设备信息。这串代码相当于C/S的C,也类似于插件
3.根据这个想法,得出了一个方案。封装获取设备信息的代码,用户传入随机参数,进行加密后,返回给用户一个机器码token。后台根据这个机器码token分析出设备信息,达成设备绑定
4.但是上面的方案。我们初步设想将其封装为jar包,但是便要考虑其隐蔽性,不可以让用户知道其中的代码和流程,否则用户可以进行破解,将已经绑定的设备信息进行多台使用,那么我们绑定设备的功能就失效了
5.所以,得出要对jar包进行代码混淆,加密加壳的操作。防止用户反编译得到代码的相关信息

开发过程:
1.首先是获取本地设备的代码,此处我获取的是设备MAC,MAC地址通过用户传入的随机数和从服务器获取的有一定时限的字符串组成密钥,最后通过ACE加密,得到机器码token给用户使用

2.本来想能把jar包能为不可反编译,然后把jar包发给用户即可,这个jar包起到插件作用。但事实上发现不可行,jar包只要是jar包形式,就只能代码混淆,不能加密加壳隐藏。一切都由于java的开源性,所以防止反编译网上有多种方案,但都不能把他包装成一个jar包,因为想要不开源,那么就需要这个jar包有个与普通java不同的运行环境JRE,网上的有用帖子如下:
https://blog.csdn.net/xuke6677/article/details/16350049
https://www.zhihu.com/question/19766494

3.后来发现了一系列关于AOT编译的工具,或者JNI等等的工具,但最后还是使用了Jar2Exe工具,较为方便,易理解,且对class文件有隐藏和加密的作用,短暂性的满足了我的需求

4.但是即使有这个工具,还不够,因为它会把一个jar包最后封装成一个程序,索性,我们就把它能成windows NT服务,在这个jar包,搭建一个netty的简单服务器,展示端口供给客户调用,客户需要安装这个windows后台服务,通过127.0.0.1和指定端口号,即可拿到机器码token。包装成windows NT服务的帖子如下:
http://www.regexlab.com/zh/jar2exe/demo3.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值