TC官方合作论坛
标题:
TC专用注册码防破@解之开放式通信防破@解必看】
[打印本页]
作者:
kevinqq
时间:
2016-11-16 10:33
标题:
TC专用注册码防破@解之开放式通信防破@解必看】
注册码V2之开放式通信
【防破@解必看】
这次为大家带来一个新的通信方式,此通信是注册码V2新增的开放式通信,作者完全可以在注册码V2的基础上新增各种各样的功能。这样也能避免破@解的人找到注册码V2的特征,从而导致你的脚本被破@解。我们在不断的开放一些功能,让大家可以更加灵活自主的管理自己软件,让大家可以更好的去实现防破@解,但是更多的还要作者自己去重写这些接口,以达到独一无二!
以下将以项目的获取自定义数据为例,来讲解这个内容!
1、安装或者更新到最新的注册码V2应用
最新的注册码V2里,在文件目录,我们会发现多了一个文件:【自定义功能.t】,这个里面有默认的代码,主要是供大家学习使用。
此代码为默认的代码
2、在
自定义功能.t文件里添加自己的加密代码
以下我们就可以在这个代码的基础修改,把自己想要做的操作都在这里实现即可,这里我们就来用自己的加密算法为项目自定义数据加密,代码如下:
//此功能为高级功能,需要懂得百宝云语法基础
//此功能为高级功能,需要懂得百宝云语法基础
//此文件为用户扩展自定义接口,修改源码必须要重启云应用,否则本文件中的代码不会重新生效
//此文件为用户扩展自定义接口,修改源码必须要重启云应用,否则本文件中的代码不会重新生效
//请注意,一定要语法正确,语法不正确云应用无法正常启动
//请注意,一定要语法正确,语法不正确云应用无法正常启动
//请注意,一定要语法正确,语法不正确云应用无法正常启动
//请注意,一定要语法正确,语法不正确云应用无法正常启动
//参数说明:
//arg _commoninterface事件,_get事件,_post事件对应的 arg参数值
// arg内容格式必须为json格式或者百宝云数组格式
// 数据格式举例说明:
// json格式: {"flag":"abc","data":"456"}
// 百宝云数组格式: array("flag"="abc","data":"456")
function custom_interface(arg)
//自定义代码处
//-----------演示代码-----------
变量 paramArr = 字符串转数组(arg)
如果(!是否数组(paramArr))
paramArr = json转数组(arg)
如果(!是否数组(paramArr))
返回 "错误的参数列表"
结束
结束
select(paramArr["flag"])
case "动态安全策略"
var 注册码 = paramArr["注册码"]
var 项目名称 = paramArr["项目名称"]
var key = paramArr["key"]
var ret = ""
if(!exec(strformat("SELECT * FROM 项目键值管理表 where 项目名称='%s' and 键 = '%s'", 项目名称,key), ret))
return "操作失败:查询项目信息失败"//生成出错
end
return 云端加密(ret[0]["值"],paramArr["data"],矩阵)
end
//-----------演示代码-----------
return "未知请求"
end
var 矩阵 = array(array("L", "3", "P", "g", ";", "<", "a", "L", "K", "5"), array("Z", "6", "s", "p", "=", "0", "_", "u", "G", "G"), array("F", "A", "I", "K", "C", "y", "e", "7", "=", "0"), array("1", "7", "H", "@", "c", "F", "E", "`", "d", "8"), array("s", "i", "D", "5", "Y", "^", "@", "s", "F", "r"), array("M", "]", "p", "z", "e", "U", "u", "_", "5", "["), array("_", "b", "@", "l", "V", "t", "^", "H", "0", "e"), array("0", "e", "5", "1", "5", "d", "O", "g", "N", "R"), array("Y", "g", "Z", "G", "J", "s", ">", "W", "<", "a"), array("f", "J", "s", "r", "X", "f", "p", "M", "3", ">"))
function 云端加密(数据, 密钥, 矩阵1)
var 密钥1 = ""
var key1 = ""
for(var i = 0;i < 8;i = i + 2)
var a = strsub(密钥, i, i + 1)
var b = strsub(密钥, i + 1, i + 2)
filelog(strformat("密钥[%s][%s] = %s", a, b, 矩阵1[a][b]))
key1 = key1&矩阵1[a][b]
end
var 标识 = strsub(密钥, strlen(密钥) - 4, strlen(密钥))
select(标识)
case 1561
return aesencrypt(数据, key1)
case 2802
return desencrypt(数据, key1)
case 7463
return teaencrypt(数据, key1)
case 1684
return rc2encrypt(数据, key1)
case 5525
return rc5encrypt(数据, key1)
case 6436
return rc6encrypt(数据, key1)
default
return 数据
end
end
//执行sql语句,并返回结果
//如果 db_name 为空表示使用 全局数据名称
function exec(sql, &out_arr = "", db_name = "5112_regCodeV2")
var ret_arr
if(!mysqlsqlarray(db_name, sql, ret_arr))
var error = getlasterror(1)
数据库错误日志(sql&"\n错误信息:"&error)
return false
end
out_arr = ret_arr
return true
end
function 数据库错误日志(str)
filelog(timenow()&" "&str, "数据库错误日志")
end
复制代码
注意:修改代码了之后,记得一定要重启云应用!
记得一定要重启云应用!
记得一定要重启云应用!(重要的事情说三遍)
3、本地客户端通信注册码V2,获取自定义数据
这里就不需要使用注册码V2提供的COM或者DLL去访问了,直接使用原生态的接口访问即可。
以下以TC为例,使用 commoninterface接口通信。
关键代码段如下:
功能 自定义功能示例_初始化()
//这里添加你要执行的代码
DLL初始化()
注册码初始化("5f3412f705f91cebaac1c8a95a7cf64d", "测试项目")
结束
复制代码
注册码V2的项目初始化。必须要调用的。
测试按钮的功能实现代码:
功能 按钮3_点击()
//这里添加你要执行的代码
var 云端返回, 密钥
自定义加密("key1", 云端返回, 密钥)
traceprint("密钥: " & 密钥)
var ret = 自定义解密(云端返回, 密钥)
traceprint(ret)
结束
复制代码
以下为自定义加密与解密的代码,
此代码必须与注册码V2里的自定义功能里的加密解密一致,否则会导致加密的数据无法解密出来
。下面是代码:
var 矩阵 = array(array("L", "3", "P", "g", ";", "<", "a", "L", "K", "5"), array("Z", "6", "s", "p", "=", "0", "_", "u", "G", "G"), array("F", "A", "I", "K", "C", "y", "e", "7", "=", "0"), array("1", "7", "H", "@", "c", "F", "E", "`", "d", "8"), array("s", "i", "D", "5", "Y", "^", "@", "s", "F", "r"), array("M", "]", "p", "z", "e", "U", "u", "_", "5", "["), array("_", "b", "@", "l", "V", "t", "^", "H", "0", "e"), array("0", "e", "5", "1", "5", "d", "O", "g", "N", "R"), array("Y", "g", "Z", "G", "J", "s", ">", "W", "<", "a"), array("f", "J", "s", "r", "X", "f", "p", "M", "3", ">"))
var Rnd = array(1561, 2802, 7463, 1684, 5525, 6436)
function 自定义加密(key, &result, &data1)
var arg = array()
arg["flag"] = "动态安全策略"
arg["注册码"] = 全局_注册码
arg["项目名称"] = 全局_项目名称
arg["key"] = key
var data = ""
for(var i = 0; i < 8; i++)
data = data & rnd(0, 9)
end
data = data & Rnd[rnd(0, 5)]
data1 = data
arg["data"] = data
var ret_buff = MyCommoninterface(arg)
result = ret_buff
traceprint(result)
end
function 自定义解密(数据, 密钥)
var 密钥1 = ""
var key1 = ""
for(var i = 0; i < 8; i = i + 2)
var a = strsub(密钥, i, i + 1)
var b = strsub(密钥, i + 1, i + 2)
traceprint(strformat("密钥[%s][%s] = %s", a, b, 矩阵[a][b]))
key1 = key1 & 矩阵[a][b]
end
var 标识 = strsub(密钥, strlen(密钥) - 4, strlen(密钥))
select(标识)
case 1561
return Aes解密(数据, key1)
case 2802
return Des解密(数据, key1)
case 7463
return Tea解密(数据, key1)
case 1684
return Rc2解密(数据, key1)
case 5525
return Rc5解密(数据, key1)
case 6436
return Rc6解密(数据, key1)
default
return 数据
end
end
复制代码
算法不是太难,只是为大家提供了一个思路,那么大家就可以在此基础上更改了!
测试结果如下图所示:
获取到的密文通过自己的解密算法,把密文解密回来了,效果还不错!
总结:
通过这样的方式,我们就可以跳过注册码V2提供的获取自定义数据接口,来实现自己的方法获取,同时,你还可以利用此接口操作自己的数据库,或者是与其他应用通信等等,只有你想不到,没有你做不到的功能!
所以此方式才叫 注册码V2之开放式通信。
【TC版】注册码V2系列教程总汇:
http://bbs.baibaoyun.com/thread-435-1-1.html
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1