赞 | 5 |
VIP | 0 |
好人卡 | 0 |
积分 | 9 |
经验 | 2613 |
最后登录 | 2024-11-6 |
在线时间 | 114 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 945
- 在线时间
- 114 小时
- 注册时间
- 2017-8-3
- 帖子
- 63
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 神秘中国人 于 2019-2-27 15:21 编辑
使用默认工程的来做的示范。
步骤一:闭包。 新建cmain.js 文件,写上(function (){ })()
把注释的JS文件,按顺序把内容复制到cmain.js里面。
然后代码中找到DataManager.loadDataFile 把window[name] 改成 eval(name)
这样子,代码就会形成闭包。 在控制台是无法访问到对应的JSON数据。
步骤二,加密解密JSON。
加密:
1.在我们的工程index.html. 在加载cmain.js之前添加
- <script type="text/javascript">
- window.Base64 = {
- _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
- encode: function(e) {
- var t = "";
- var n, r, i, s, o, u, a;
- var f = 0;
- e = Base64._utf8_encode(e);
- while (f < e.length) {
- n = e.charCodeAt(f++);
- r = e.charCodeAt(f++);
- i = e.charCodeAt(f++);
- s = n >> 2;
- o = (n & 3) << 4 | r >> 4;
- u = (r & 15) << 2 | i >> 6;
- a = i & 63;
- if (isNaN(r)) {
- u = a = 64
- } else if (isNaN(i)) {
- a = 64
- }
- t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
- }
- return t
- },
- decode: function(e) {
- var t = "";
- var n, r, i;
- var s, o, u, a;
- var f = 0;
- e = e.replace(/[^A-Za-z0-9+/=]/g, "");
- while (f < e.length) {
- s = this._keyStr.indexOf(e.charAt(f++));
- o = this._keyStr.indexOf(e.charAt(f++));
- u = this._keyStr.indexOf(e.charAt(f++));
- a = this._keyStr.indexOf(e.charAt(f++));
- n = s << 2 | o >> 4;
- r = (o & 15) << 4 | u >> 2;
- i = (u & 3) << 6 | a;
- t = t + String.fromCharCode(n);
- if (u != 64) {
- t = t + String.fromCharCode(r)
- }
- if (a != 64) {
- t = t + String.fromCharCode(i)
- }
- }
- t = Base64._utf8_decode(t);
- return t
- },
- _utf8_encode: function(e) {
- e = e.replace(/rn/g, "n");
- var t = "";
- for (var n = 0; n < e.length; n++) {
- var r = e.charCodeAt(n);
- if (r < 128) {
- t += String.fromCharCode(r)
- } else if (r > 127 && r < 2048) {
- t += String.fromCharCode(r >> 6 | 192);
- t += String.fromCharCode(r & 63 | 128)
- } else {
- t += String.fromCharCode(r >> 12 | 224);
- t += String.fromCharCode(r >> 6 & 63 | 128);
- t += String.fromCharCode(r & 63 | 128)
- }
- }
- return t
- },
- _utf8_decode: function(e) {
- var t = "";
- var n = 0;
- var r = c1 = c2 = 0;
- while (n < e.length) {
- r = e.charCodeAt(n);
- if (r < 128) {
- t += String.fromCharCode(r);
- n++
- } else if (r > 191 && r < 224) {
- c2 = e.charCodeAt(n + 1);
- t += String.fromCharCode((r & 31) << 6 | c2 & 63);
- n += 2
- } else {
- c2 = e.charCodeAt(n + 1);
- c3 = e.charCodeAt(n + 2);
- t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
- n += 3
- }
- }
- return t
- }
- }
- </script>
复制代码 2.在桌面上新建一个index.html把以下内容拷贝进去。
- <body></body>
- <script type="text/javascript">
- window.Base64 = {
- _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
- encode: function(e) {
- var t = "";
- var n, r, i, s, o, u, a;
- var f = 0;
- e = Base64._utf8_encode(e);
- while (f < e.length) {
- n = e.charCodeAt(f++);
- r = e.charCodeAt(f++);
- i = e.charCodeAt(f++);
- s = n >> 2;
- o = (n & 3) << 4 | r >> 4;
- u = (r & 15) << 2 | i >> 6;
- a = i & 63;
- if (isNaN(r)) {
- u = a = 64
- } else if (isNaN(i)) {
- a = 64
- }
- t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
- }
- return t
- },
- decode: function(e) {
- var t = "";
- var n, r, i;
- var s, o, u, a;
- var f = 0;
- e = e.replace(/[^A-Za-z0-9+/=]/g, "");
- while (f < e.length) {
- s = this._keyStr.indexOf(e.charAt(f++));
- o = this._keyStr.indexOf(e.charAt(f++));
- u = this._keyStr.indexOf(e.charAt(f++));
- a = this._keyStr.indexOf(e.charAt(f++));
- n = s << 2 | o >> 4;
- r = (o & 15) << 4 | u >> 2;
- i = (u & 3) << 6 | a;
- t = t + String.fromCharCode(n);
- if (u != 64) {
- t = t + String.fromCharCode(r)
- }
- if (a != 64) {
- t = t + String.fromCharCode(i)
- }
- }
- t = Base64._utf8_decode(t);
- return t
- },
- _utf8_encode: function(e) {
- e = e.replace(/rn/g, "n");
- var t = "";
- for (var n = 0; n < e.length; n++) {
- var r = e.charCodeAt(n);
- if (r < 128) {
- t += String.fromCharCode(r)
- } else if (r > 127 && r < 2048) {
- t += String.fromCharCode(r >> 6 | 192);
- t += String.fromCharCode(r & 63 | 128)
- } else {
- t += String.fromCharCode(r >> 12 | 224);
- t += String.fromCharCode(r >> 6 & 63 | 128);
- t += String.fromCharCode(r & 63 | 128)
- }
- }
- return t
- },
- _utf8_decode: function(e) {
- var t = "";
- var n = 0;
- var r = c1 = c2 = 0;
- while (n < e.length) {
- r = e.charCodeAt(n);
- if (r < 128) {
- t += String.fromCharCode(r);
- n++
- } else if (r > 191 && r < 224) {
- c2 = e.charCodeAt(n + 1);
- t += String.fromCharCode((r & 31) << 6 | c2 & 63);
- n += 2
- } else {
- c2 = e.charCodeAt(n + 1);
- c3 = e.charCodeAt(n + 2);
- t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
- n += 3
- }
- }
- return t
- }
- }
- var jsonbase64Data = (Base64.encode('我是地图数据'));
- var secret1 = {
- encryption:function (txt){
- var key = [];
- key[0] = 'DAsMCww4ad46yLDE1NTIak2MDE2LMiiwxNTUyLDE1NTIsMTU1Miw2MDE2LDE1MKOmmaaD5wLDAsMCwwLDA';
- key[1] = 'DcCw4ad46yLDE1NTIak2esMTU1Miw2MdDE1MKOmmdaaD5wLDAsMCwwLDA';
- key[2] = 'ecCw4ad46ywxNTUyLDE1NTIxiixNTUyLDE1NTIxNTUyLDE1NTIsMTDA';
- var to = '2dcMDE2LMiiwxNTUyL';
- var footer = 'e1MKOmmaaD5wLDAsC2C12casdQD';
- var newJsonbase64Data = to;
- var keyNumber = Math.ceil(Math.random()*100);
- for(var k in jsonbase64Data){
- newJsonbase64Data += jsonbase64Data[k];
-
- if(k == keyNumber){
- var num = Math.ceil(Math.random());
- newJsonbase64Data += key[num];
- keyNumber = Math.ceil(Math.random()*100)*1 + (k*1 + key[num].length*1);
- }
- }
- return newJsonbase64Data+footer;
- },
- decryption:function (){
- }
- }
- jsonbase64Data = secret1.encryption(jsonbase64Data);
- document.querySelector('body').innerHTML = jsonbase64Data;
- </script>
复制代码 把你要加密的JSON数据内容拷贝代码中的 “我是地图数据” 替换掉。
使用谷歌浏览器打开index.html。 你就可以看到加密后的JSON数据。 把数据拷贝出来替换源代码的JSON文件。
解密:
直接拷贝粘贴吧,不多说了。
- if(url.indexOf('Map001.json') != -1){
- var temporary = xhr.responseText;
- temporary = temporary.replace(/DAsMCww4ad46yLDE1NTIak2MDE2LMiiwxNTUyLDE1NTIsMTU1Miw2MDE2LDE1MKOmmaaD5wLDAsMCwwLDA/g,"");
- temporary = temporary.replace(/DcCw4ad46yLDE1NTIak2esMTU1Miw2MdDE1MKOmmdaaD5wLDAsMCwwLDA/g,"");
- temporary = temporary.replace(/ecCw4ad46ywxNTUyLDE1NTIxiixNTUyLDE1NTIxNTUyLDE1NTIsMTDA/g,"");
- temporary = temporary.replace(/2dcMDE2LMiiwxNTUyL/g,"");
- temporary = temporary.replace(/e1MKOmmaaD5wLDAsC2C12casdQD/g,"");
- jsonDataParam = Base64.decode(temporary);
- };
复制代码 注意:url.indexOf('Map001.json') 和 url.indexOf('.json') 的区别。
注意:文档中的 key 要对应。- var key = [];
- key[0] = 'DAsMCww4ad46yLDE1NTIak2MDE2LMiiwxNTUyLDE1NTIsMTU1Miw2MDE2LDE1MKOmmaaD5wLDAsMCwwLDA';
- key[1] = 'DcCw4ad46yLDE1NTIak2esMTU1Miw2MdDE1MKOmmdaaD5wLDAsMCwwLDA';
- key[2] = 'ecCw4ad46ywxNTUyLDE1NTIxiixNTUyLDE1NTIxNTUyLDE1NTIsMTDA';
- var to = '2dcMDE2LMiiwxNTUyL';
复制代码- var temporary = xhr.responseText;
- temporary = temporary.replace(/DAsMCww4ad46yLDE1NTIak2MDE2LMiiwxNTUyLDE1NTIsMTU1Miw2MDE2LDE1MKOmmaaD5wLDAsMCwwLDA/g,"");
- temporary = temporary.replace(/DcCw4ad46yLDE1NTIak2esMTU1Miw2MdDE1MKOmmdaaD5wLDAsMCwwLDA/g,"");
- temporary = temporary.replace(/ecCw4ad46ywxNTUyLDE1NTIxiixNTUyLDE1NTIxNTUyLDE1NTIsMTDA/g,"");
- temporary = temporary.replace(/2dcMDE2LMiiwxNTUyL/g,"");
- temporary = temporary.replace(/e1MKOmmaaD5wLDAsC2C12casdQD/g,"");
复制代码
步骤3:JS混淆。
把cmain.js 混淆,不让正常阅读。
JS加密:这个大文件是付费功能,所以我就没亲自测试了。
https://www.sojson.com/jsobfuscator.html
这些步骤跑完后,如果想,从代码上作修改的,能防止99%的程序员了。
原因很简单:
90%都是,这个游戏价值不大,浪费时间研究破解方法。
9% 努力尝试一下发现还是有点难。
本来就是做这行的1% 专业破解。
这个方法不限制,本来就是做外挂的同胞。 那些是从内存里面修改的。 不是一回事。
例子:
新建默认工程,把地图json拷贝进地图。 并且设置,角色本身就存在是地图001里面。....其他就不多说了。。。留言吧。 本来就不推荐非程序使用。
例子.zip
(127.73 KB, 下载次数: 351)
还有一点就是,加密解密的方法,自己编写一次比较好,因为我在这里都公布出来了。 所以建议程序员们自己编写一次。 这样你的加密解密方法都是独一无二。
这里也推荐一下AES 加密解密,秘钥就隐藏分几段出来就好
以后会更新一下,外壳加密的方法, 这样子。不是做外挂的大哥应该都没机会修改了。暂时先这样 |
评分
-
查看全部评分
|