软件安全防破解之字符串加密,提高破解难度让你的软件不再轻易被山寨

来源:互联网 发布:陈霸先 刘裕 知乎 编辑:程序博客网 时间:2024/06/11 09:35

原文:http://bbs.84zcb.com/showtopic-3430.aspx


大家知道提示框和字符串是新手破解的关系,如果我们能将敏感的字符串进行加密传输,那么就可以杜绝90%以上的破解新手。下面以注册宝的安全码和软件编号几种不同的加密方法对比防山寨效果(易语言为例,其他语言类似)

明文未加密写法

.版本 2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 【重要】新手一般只需要修改您自己的"安全码"和"软件编号"即可使用,软件编号和安全码从开发者后台获得安全码 = “DF103B82-9791-4290-9AAB-FB857FD6A6BE” ' 设置软件安全码软件编号 = “Z10016200” ' 设置软件编号软件版本 = 1 ' 设置软件版本号(整数型)' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 注册宝.数值方法 (“EnableLog”, 1) ' 开启注册宝调用日志,方便BUG问题排查 1表示开启 0表示关闭 默认没有调用是0版本号 = 注册宝.文本方法 (“Ver”, 1) ' 1为获取dll内部版本(10006)属性版本 = 注册宝.文本方法 (“Ver”, 2) ' 2为获取dll的属性版本号(1.0.0.xxxxx).如果 (注册宝.数值方法 (“AppInitialize”, 安全码, 软件编号, 软件版本) = 1) ' 软件初始化' 初始化成功信息框 (“初始化完成,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)' ''''''''''''''''''''''''''''''''''''.否则' 初始化失败信息框 (“初始化失败,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”) ' 出现这个提示请检查初始化的各个参数及插件版本是否正确结束 ()

OD载入后查找字符串

结论:以明文直接写入的方法是最不安全的,载入OD可你的安全码和软件编号一目了然,任何新手都可以轻而易举的山寨掉你的软件。所以这种方法的防破解效果几乎为零

字节集方式加密

.版本 2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 【重要】新手一般只需要修改您自己的"安全码"和"软件编号"即可使用,软件编号和安全码从开发者后台获得安全码 = 到文本 ({ 68, 70, 49, 48, 51, 66, 56, 50, 45, 57, 55, 57, 49, 45, 52, 50, 57, 48, 45, 57, 65, 65, 66, 45, 70, 66, 56, 53, 55, 70, 68, 54, 65, 54, 66, 69 })  ' 设置软件安全码软件编号 = 到文本 ({ 90, 49, 48, 48, 49, 54, 50, 48, 48 })  ' 设置软件编号软件版本 = 1  ' 设置软件版本号(整数型)' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 注册宝.数值方法 (“EnableLog”, 1)  ' 开启注册宝调用日志,方便BUG问题排查 1表示开启  0表示关闭  默认没有调用是0版本号 = 注册宝.文本方法 (“Ver”, 1)  ' 1为获取dll内部版本(10006)属性版本 = 注册宝.文本方法 (“Ver”, 2)  ' 2为获取dll的属性版本号(1.0.0.xxxxx).如果 (注册宝.数值方法 (“AppInitialize”, 安全码, 软件编号, 软件版本) = 1)  ' 软件初始化    ' 初始化成功    信息框 (“初始化完成,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)    ' ''''''''''''''''''''''''''''''''''''.否则    ' 初始化失败    信息框 (“初始化失败,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)  ' 出现这个提示请检查初始化的各个参数及插件版本是否正确    结束 ()

OD查找字符串

数据窗口查找字符串

结论:相对于上一种有了改进使用字节集方法加密的方法虽然在查找字符串时无法看到安全码和软件编号,但是还是能够在数据窗口中轻松找到这些字符串。所以这种方法也是掩耳盗铃,也不能有效防止被山寨

字符串打乱加密

.版本 2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 【重要】新手一般只需要修改您自己的"安全码"和"软件编号"即可使用,软件编号和安全码从开发者后台获得安全码 = 字符 (96 - 28) + 字符 (70) + 到文本 (到整数 (“1”)) + 到文本 (到整数 (“0”)) + 字符 (取代码 (“3”, )) + 字符 (66) + 到文本 (到整数 (“8”)) + 到文本 (77 × 0 + 2) + 字符 (右移 (90, 1)) + 字符 (57) + 到文本 (56 × 0 + 7) + 到文本 (到整数 (“9”)) + 到文本 (到整数 (“1”)) + 字符 (45) + 到文本 (97 × 0 + 4) + 到文本 (到整数 (取反 (假)) × 68 × 0 + 2) + 到文本 (40 × 0 + 9) + 到文本 (10 × 0 + 0) + 字符 (取代码 (“-”, )) + 到文本 (右移 (18, 1)) + 字符 (取代码 (“A”, )) + 字符 (22 + 43) + 字符 (63 + 3) + 字符 (5 + 40) + 字符 (取代码 (“F”, )) + 字符 (右移 (264, 2)) + 到文本 (到整数 (“8”)) + 到文本 (右移 (10, 1)) + 到文本 (右移 (3584, 9)) + 字符 (取代码 (“F”, )) + 字符 (取代码 (“D”, )) + 到文本 (87 - 81) + 字符 (右移 (8320, 7)) + 到文本 (右移 (384, 6)) + 字符 (70 - 4) + 字符 (右移 (552, 3)) ' 搅乱前字符串[DF103B82-9791-4290-9AAB-FB857FD6A6BE]软件编号 = 字符 (90) + 到文本 (到整数 (“1”)) + 到文本 (到整数 (取反 (假)) × 98 × 0 + 0) + 到文本 (右移 (0, 8)) + 到文本 (到整数 (取反 (假)) × 53 - 52) + 字符 (54) + 到文本 (到整数 (“2”)) + 到文本 (到整数 (取反 (假)) × 10 - 10) + 到文本 (右移 (0, 6)) ' 搅乱前字符串[Z10016200]软件版本 = 1 ' 设置软件版本号(整数型)' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 注册宝.数值方法 (“EnableLog”, 1) ' 开启注册宝调用日志,方便BUG问题排查 1表示开启 0表示关闭 默认没有调用是0版本号 = 注册宝.文本方法 (“Ver”, 1) ' 1为获取dll内部版本(10006)属性版本 = 注册宝.文本方法 (“Ver”, 2) ' 2为获取dll的属性版本号(1.0.0.xxxxx).如果 (注册宝.数值方法 (“AppInitialize”, 安全码, 软件编号, 软件版本) = 1) ' 软件初始化' 初始化成功信息框 (“初始化完成,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)' ''''''''''''''''''''''''''''''''''''.否则' 初始化失败信息框 (“初始化失败,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”) ' 出现这个提示请检查初始化的各个参数及插件版本是否正确结束 ()

OD载入查找字符串

数据窗口查找字符串

结论:这种方法对每一个字符进行随机的字符、取反、算术、位运算、取代码、到整数等计算,让你的字符串无人能够再辨别出来(使用工具"易语言搅乱器")。至少不至于让破解新手通过查找字符串就能山寨你的软件

加密算法加密

.版本 2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 【重要】新手一般只需要修改您自己的"安全码"和"软件编号"即可使用,软件编号和安全码从开发者后台获得安全码 = 建飞超级算法_解密 (“E7E5929390E19B918E9A949A928E97919A938E9AE2E2E18EE5E19B9694E5E795E295E1E6c6ab47b10”, “zhucebao”)软件编号 = 建飞超级算法_解密 (“F99293939295919393c6ab47b10”, “zhucebao”)软件版本 = 1 ' 设置软件版本号(整数型)' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 注册宝.数值方法 (“EnableLog”, 1) ' 开启注册宝调用日志,方便BUG问题排查 1表示开启 0表示关闭 默认没有调用是0版本号 = 注册宝.文本方法 (“Ver”, 1) ' 1为获取dll内部版本(10006)属性版本 = 注册宝.文本方法 (“Ver”, 2) ' 2为获取dll的属性版本号(1.0.0.xxxxx).如果 (注册宝.数值方法 (“AppInitialize”, 安全码, 软件编号, 软件版本) = 1) ' 软件初始化' 初始化成功信息框 (“初始化完成,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)' ''''''''''''''''''''''''''''''''''''.否则' 初始化失败信息框 (“初始化失败,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”) ' 出现这个提示请检查初始化的各个参数及插件版本是否正确结束 ()

OD载入查找字符串

结论:这种方法对原来的安全码和软件编号通过一个加密密钥(图中以采用建飞加密解密模块算法用'zhucebao'作为密钥进行加密)进行加密,OD中看不到原来的安全码和软件编号,但可以看到加密后的字符串和加密密钥,如果用户熟悉你使用的加密也可以进行山寨替换

字符串打乱加算法加密

.版本 2' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 【重要】新手一般只需要修改您自己的"安全码"和"软件编号"即可使用,软件编号和安全码从开发者后台获得安全码 = 建飞超级算法_解密 (字符 (右移 (17664, 8)) + 到文本 (44 - 37) + 字符 (右移 (276, 2)) + 字符 (取代码 (“5”, )) + 到文本 (到整数 (“9”)) + 字符 (取代码 (“2”, )) + 到文本 (到整数 (取反 (假)) × 32 × 0 + 9) + 到文本 (到整数 (取反 (假)) × 50 - 47) + 到文本 (87 - 78) + 到文本 (0 ÷ 90) + 字符 (取代码 (“E”, )) + 字符 (取代码 (“1”, )) + 到文本 (到整数 (取反 (假)) × 26 - 17) + 字符 (66) + 到文本 (67 - 58) + 到文本 (右移 (64, 6)) + 字符 (取代码 (“8”, )) + 字符 (右移 (2208, 5)) + 到文本 (79 - 70) + 字符 (右移 (520, 3)) + 字符 (取代码 (“9”, )) + 到文本 (到整数 (取反 (假)) × 80 - 76) + 到文本 (到整数 (“9”)) + 字符 (取代码 (“A”, )) + 字符 (57) + 字符 (50) + 到文本 (10 - 2) + 字符 (取代码 (“E”, )) + 字符 (取代码 (“9”, )) + 到文本 (到整数 (“7”)) + 到文本 (右移 (4608, 9)) + 到文本 (右移 (4, 2)) + 到文本 (右移 (144, 4)) + 字符 (65) + 字符 (57) + 到文本 (85 - 82) + 字符 (56) + 字符 (取代码 (“E”, )) + 到文本 (27 - 18) + 字符 (65) + 字符 (69) + 字符 (取代码 (“2”, )) + 字符 (右移 (17664, 8)) + 到文本 (10 - 8) + 字符 (69) + 字符 (取代码 (“1”, )) + 到文本 (到整数 (取反 (假)) × 51 - 43) + 字符 (右移 (1104, 4)) + 字符 (69) + 字符 (取代码 (“5”, )) + 字符 (右移 (35328, 9)) + 到文本 (到整数 (取反 (假)) × 69 - 68) + 到文本 (73 - 64) + 字符 (66) + 到文本 (到整数 (“9”)) + 字符 (54) + 到文本 (到整数 (取反 (假)) × 18 - 9) + 字符 (52) + 字符 (右移 (1104, 4)) + 到文本 (到整数 (取反 (假)) × 30 - 25) + 字符 (取代码 (“E”, )) + 到文本 (17 - 10) + 到文本 (5 + 4) + 到文本 (右移 (20, 2)) + 字符 (右移 (552, 3)) + 到文本 (到整数 (“2”)) + 到文本 (到整数 (取反 (假)) × 83 - 74) + 到文本 (到整数 (取反 (假)) × 54 - 49) + 字符 (取代码 (“E”, )) + 到文本 (25 - 24) + 字符 (右移 (1104, 4)) + 到文本 (到整数 (取反 (假)) × 66 - 60) + 字符 (99) + 到文本 (右移 (192, 5)) + 字符 (右移 (24832, 8)) + 字符 (取代码 (“b”, )) + 到文本 (87 - 83) + 到文本 (到整数 (取反 (假)) × 96 - 89) + 字符 (右移 (25088, 8)) + 到文本 (右移 (256, 8)) + 到文本 (0 ÷ 63), 字符 (取代码 (“z”, )) + 字符 (43 + 61) + 字符 (右移 (468, 2)) + 字符 (99) + 字符 (取代码 (“e”, )) + 字符 (取代码 (“b”, )) + 字符 (97) + 字符 (35 + 76)) ' 安全码=DF103B82-9791-4290-9AAB-FB857FD6A6BE软件编号 = 建飞超级算法_解密 (字符 (右移 (1120, 4)) + 字符 (取代码 (“9”, )) + 到文本 (到整数 (“9”)) + 到文本 (到整数 (取反 (假)) × 71 - 69) + 字符 (57) + 字符 (取代码 (“3”, )) + 字符 (取代码 (“9”, )) + 字符 (取代码 (“3”, )) + 字符 (取代码 (“9”, )) + 到文本 (2 - 0) + 到文本 (到整数 (“9”)) + 到文本 (右移 (160, 5)) + 到文本 (59 - 50) + 到文本 (到整数 (“1”)) + 到文本 (右移 (36, 2)) + 到文本 (右移 (192, 6)) + 到文本 (到整数 (“9”)) + 到文本 (到整数 (取反 (假)) × 60 ÷ 20) + 字符 (13 + 86) + 到文本 (50 - 44) + 字符 (右移 (194, 1)) + 字符 (右移 (50176, 9)) + 到文本 (到整数 (取反 (假)) × 108 ÷ 27) + 到文本 (到整数 (取反 (假)) × 679 ÷ 97) + 字符 (右移 (6272, 6)) + 到文本 (到整数 (取反 (假)) × 39 ÷ 39) + 字符 (取代码 (“0”, )), 字符 (70 + 52) + 字符 (右移 (832, 3)) + 字符 (取代码 (“u”, )) + 字符 (右移 (25344, 8)) + 字符 (取代码 (“e”, )) + 字符 (98) + 字符 (97) + 字符 (取代码 (“o”, ))) ' 软件编号=Z10016200软件版本 = 1 ' 设置软件版本号(整数型)' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 注册宝.数值方法 (“EnableLog”, 1) ' 开启注册宝调用日志,方便BUG问题排查 1表示开启 0表示关闭 默认没有调用是0版本号 = 注册宝.文本方法 (“Ver”, 1) ' 1为获取dll内部版本(10006)属性版本 = 注册宝.文本方法 (“Ver”, 2) ' 2为获取dll的属性版本号(1.0.0.xxxxx).如果 (注册宝.数值方法 (“AppInitialize”, 安全码, 软件编号, 软件版本) = 1) ' 软件初始化' 初始化成功信息框 (“初始化完成,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”)' ''''''''''''''''''''''''''''''''''''.否则' 初始化失败信息框 (“初始化失败,当前插件版本号:” + 版本号 + “,属性版本:” + 属性版本, 0, “注册宝”) ' 出现这个提示请检查初始化的各个参数及插件版本是否正确结束 ()

OD载入查找字符串

结论:经过双重保护,可以较有校的保护安全码和软件编号不被恶意替换,即找不到加原来的明文安全码软件编号也找不到加密后的注册码软件编号和加密密钥


工具下载:

建飞加密解密模块Bera1.1改良版:http://pan.baidu.com/s/1eQs2ZSY

易语言字符串搅乱器下载(防破解专用):http://pan.baidu.com/s/1kTKJfs7


防破解永远没有那么简单,没有什么软件是不能破解(所以一些问这个网络验证安全不安全会不会被破解真的很蠢,主要的防破解工作是在自己身上而不是在网络验证上),我们只能想办法提高破解门槛,消耗破解者的时间和精力。

随时关注注册宝网络验证:http://www.84zcb.com/,更多教程待续

0 0
原创粉丝点击