125 lines
4.3 KiB
Markdown
125 lines
4.3 KiB
Markdown
![]() |
循例设置,项目编译
|
|||
|
|
|||
|
![[Pasted image 20240803160025.png]]
|
|||
|
|
|||
|
![[Pasted image 20240803160036.png]]
|
|||
|
|
|||
|
循例,修改c++的版本,然后,设定编译路径,还有引用俩pri子工程
|
|||
|
|
|||
|
![[Pasted image 20240803160431.png]]
|
|||
|
|
|||
|
来到main主函数,引用的头文件,还有一个define宏定义,是用来生成加密文件的,这里设定是"qiuqiu"
|
|||
|
|
|||
|
![[Pasted image 20240803160532.png]]
|
|||
|
|
|||
|
设定FileIOWMIC命名空间,其中包含save保存函数,是以wmic的设备指纹,用来做加密的密钥,配合define宏定义SECRET_IV,生成加密文件WMIC.data即可;
|
|||
|
|
|||
|
![[Pasted image 20240803160652.png]]
|
|||
|
|
|||
|
还包含read函数,是解密和读取WMIC.data文件;
|
|||
|
这里分别包含,debug和release两份数据;
|
|||
|
|
|||
|
![[Pasted image 20240803225247.png]]
|
|||
|
|
|||
|
在WMIC命名空间中,是把json数据体,完成组装和数据保存,再完成save和read相关的,逻辑调用
|
|||
|
|
|||
|
![[Pasted image 20240803161004.png]]
|
|||
|
|
|||
|
main主函数入口,在实例化测试窗口之前,先调用save和read测试
|
|||
|
|
|||
|
![[Pasted image 20240803161121.png]]
|
|||
|
|
|||
|
确认是Release版本,然后运行
|
|||
|
|
|||
|
![[Pasted image 20240803161204.png]]
|
|||
|
|
|||
|
窗体正常实例化,控制台打印,也是正常
|
|||
|
|
|||
|
![[Pasted image 20240803161250.png]]
|
|||
|
|
|||
|
可以看到,加密文件,创建也是正常的
|
|||
|
|
|||
|
![[Pasted image 20240803161419.png]]
|
|||
|
|
|||
|
然后,把这个data文件拷贝到,Unity.exe 游戏引擎,所在文件夹
|
|||
|
|
|||
|
![[Pasted image 20240803223230.png]]
|
|||
|
|
|||
|
回到dll.pro文件,先确认是include了WMIC和OpenSSL子项目
|
|||
|
|
|||
|
![[Pasted image 20240803223452.png]]
|
|||
|
|
|||
|
core头文件,先弄两个函数的重载,分别是success和error的回调
|
|||
|
|
|||
|
![[Pasted image 20240803223734.png]]
|
|||
|
|
|||
|
源文件,对应的重载函数,逻辑实现,是通过json数据体的传参data,传递给result结果;
|
|||
|
需要注意的是,返回码,0代表成功,-1代表异常和失败;
|
|||
|
|
|||
|
![[Pasted image 20240803223827.png]]
|
|||
|
|
|||
|
需要对之前生成的加密数据,进行解析,引用对应的头文件,还有宏定义SECRET_IV,也对应上
|
|||
|
|
|||
|
![[Pasted image 20240803224257.png]]
|
|||
|
|
|||
|
Init初始化函数,获取WMIC.data加密文件,对应的目录路径,如果不存在,直接error返回即可,参考[[获取Qt应用程序路径]]和[[qt判断文件是否存在]]
|
|||
|
|
|||
|
![[Pasted image 20240803224357.png]]
|
|||
|
|
|||
|
头文件,加一个isDebug的布尔判断定义
|
|||
|
|
|||
|
![[Pasted image 20240803224552.png]]
|
|||
|
|
|||
|
源文件,isDebug这个布尔变量,是根据unity传递过来的布尔
|
|||
|
,进行设置,然后通过decrypt函数,对data数据体,进行解密处理;
|
|||
|
这里的解密,是基于WMIC的fingerprint函数,也就是设备指纹,进行解密,每一台电脑,都是独一无二的;
|
|||
|
解密后,是根据isDebug这个布尔变量,判断是返回,debug,还是release的json数据体,之前生成的时候,也是生成了两份数据的;
|
|||
|
|
|||
|
![[Pasted image 20240803224643.png]]
|
|||
|
|
|||
|
回到Unity,在测试脚本,先把之前的isInit设置为private私有变量即可,然后再新增一个,私有静态布尔变量 isVerification,作为信息验证的判断;
|
|||
|
|
|||
|
![[Pasted image 20240803225428.png]]
|
|||
|
|
|||
|
然后,新增一个,序列化的CallBackSubData类,其中包含密码、用户名,是用来接受,从qt传递过来的相关数据
|
|||
|
|
|||
|
![[Pasted image 20240803225601.png]]
|
|||
|
|
|||
|
再新增一个,序列化的CallBackData类,用来接受,总的,从qt传递过来的相关数据;
|
|||
|
|
|||
|
![[Pasted image 20240803225659.png]]
|
|||
|
|
|||
|
注释掉最开始的Debug.Log打印;
|
|||
|
然后,通过JsonUtility.FromJson的接口,完成接收的json数据解析,进而设定,isVerification验证,相关布尔值;
|
|||
|
|
|||
|
![[Pasted image 20240803225823.png]]
|
|||
|
|
|||
|
保存修改,编译完成,运行游戏,可以看到,数据解析,是正常的
|
|||
|
|
|||
|
![[Pasted image 20240803230339.png]]
|
|||
|
|
|||
|
修改传递过去qt的布尔值,如果是false
|
|||
|
|
|||
|
![[Pasted image 20240803230449.png]]
|
|||
|
|
|||
|
运行游戏,可以看到,就可以提取,对应release的密码了
|
|||
|
|
|||
|
![[Pasted image 20240803230515.png]]
|
|||
|
|
|||
|
跟之前生成的数据,是一致的
|
|||
|
|
|||
|
![[Pasted image 20240803230622.png]]
|
|||
|
|
|||
|
如果把Unity.exe目录下的WMIC.data临时删掉,再重新运行
|
|||
|
|
|||
|
![[Pasted image 20240803230701.png]]
|
|||
|
|
|||
|
就会提示验证异常了
|
|||
|
|
|||
|
![[Pasted image 20240803230733.png]]
|
|||
|
|
|||
|
从回收站还原,重新运行游戏,会恢复正常
|
|||
|
|
|||
|
![[Pasted image 20240803230810.png]]
|
|||
|
|
|||
|
![[Pasted image 20240803230907.png]]
|