话不多说,先上源代码和加密代码。

var a={},b={};
(function(w, d) { w.info = "这是一个一系列js操作。"; d.warning = "如果您的JS里嵌套了PHP,JSP标签,等等其他非JavaScript的代码,请提取出来再加密。这个工具不能加密php、jsp等模版内容"; d.intro = "本工具由 www.jsjiami.com 提供接口。";
})(a, b);
/** 加密工具已经升级了一个版本,目前为 jsjiami.com.v5 ,主要加强了算法,以及防破解【绝对不可逆】配置,耶稣也无法100%还原,我说的。;* 已经打算把这个工具基础功能一直免费下去。还希望支持我。* 另外 jsjiami.com.v5 已经强制加入校验,注释可以去掉,但是 jsjiami.com.v5 不能去掉(如果你开通了VIP,可以手动去掉),其他都没有任何绑定。* 誓死不会加入任何后门,jsjiami.com JS 加密的使命就是为了保护你们的Javascript 。* 警告:如果您恶意去掉 jsjiami.com.v5 那么我们将不会保护您的JavaScript代码。请遵守规则* 新版本: https://www.jsjiami.com/ 支持批量加密,支持大文件加密,拥有更多加密。 */;var encode_version = 'jsjiami.com.v5', baayg = '__0xea52c',  __0xea52c=['wqw6wpbDv04=','5Yi26Zis54m/5p6E5Y6G77yuwrLCtuS9s+Wur+aeneW8iOepkQ==','5p+h5bSv5YaW55SZw41yTypTwopYEsO6CsOPXj4ewqnDvEbmjq3kvpnmjqbljYvjgr4=','wqTCpMKHRw==','6LyG5pmG5LuB5LqX5Lih57CQ5YiqDl7mk4rkv5Xjg7U=','woPCucO0OsKHS8K4','5aes5p2v5oOl55i6acOm6YeK5bSC5aSy5LuvdyfCnO+/j8O6wrXCm+aghuevlO+8mOeuseesjOWHpOS7nOmctjoddMOow7AIJDHCgXnnm73ku5rno5/vv7jorqLmjKzlj77lhYzmnajlh5zliI7lr5Xjga3ov6LkuIfltrnlhqrkurHogZ3libXlr4fCizfDvuODpAvCijHnro7mqIbnipvlhovlrYE=','Shxs','FlPCtBHDq8Oia0Nu'];(function(_0x2bd8b4,_0xee823f){var _0x2d8384=function(_0x5db520){while(--_0x5db520){_0x2bd8b4['push'](_0x2bd8b4['shift']());}};_0x2d8384(++_0xee823f);}(__0xea52c,0x14f));var _0x41c1=function(_0x57e444,_0x416365){_0x57e444=_0x57e444-0x0;var _0x5db846=__0xea52c[_0x57e444];if(_0x41c1['initialized']===undefined){(function(){var _0x1536e3=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x532b0c='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x1536e3['atob']||(_0x1536e3['atob']=function(_0x25c712){var _0x46683e=String(_0x25c712)['replace'](/=+$/,'');for(var _0x23a281=0x0,_0x3a04ed,_0x1660f8,_0x2cc873=0x0,_0xd2e94d='';_0x1660f8=_0x46683e['charAt'](_0x2cc873++);~_0x1660f8&&(_0x3a04ed=_0x23a281%0x4?_0x3a04ed*0x40+_0x1660f8:_0x1660f8,_0x23a281++%0x4)?_0xd2e94d+=String['fromCharCode'](0xff&_0x3a04ed>>(-0x2*_0x23a281&0x6)):0x0){_0x1660f8=_0x532b0c['indexOf'](_0x1660f8);}return _0xd2e94d;});}());var _0x5834e5=function(_0x53e335,_0x1a471d){var _0x2f08bb=[],_0x3a26ae=0x0,_0x131d9b,_0x5c9f5b='',_0x2c557b='';_0x53e335=atob(_0x53e335);for(var _0x557985=0x0,_0x341cca=_0x53e335['length'];_0x557985<_0x341cca;_0x557985++){_0x2c557b+='%'+('00'+_0x53e335['charCodeAt'](_0x557985)['toString'](0x10))['slice'](-0x2);}_0x53e335=decodeURIComponent(_0x2c557b);for(var _0x54a2bc=0x0;_0x54a2bc<0x100;_0x54a2bc++){_0x2f08bb[_0x54a2bc]=_0x54a2bc;}for(_0x54a2bc=0x0;_0x54a2bc<0x100;_0x54a2bc++){_0x3a26ae=(_0x3a26ae+_0x2f08bb[_0x54a2bc]+_0x1a471d['charCodeAt'](_0x54a2bc%_0x1a471d['length']))%0x100;_0x131d9b=_0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc]=_0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae]=_0x131d9b;}_0x54a2bc=0x0;_0x3a26ae=0x0;for(var _0x57e4f1=0x0;_0x57e4f1<_0x53e335['length'];_0x57e4f1++){_0x54a2bc=(_0x54a2bc+0x1)%0x100;_0x3a26ae=(_0x3a26ae+_0x2f08bb[_0x54a2bc])%0x100;_0x131d9b=_0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc]=_0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae]=_0x131d9b;_0x5c9f5b+=String['fromCharCode'](_0x53e335['charCodeAt'](_0x57e4f1)^_0x2f08bb[(_0x2f08bb[_0x54a2bc]+_0x2f08bb[_0x3a26ae])%0x100]);}return _0x5c9f5b;};_0x41c1['rc4']=_0x5834e5;_0x41c1['data']={};_0x41c1['initialized']=!![];}var _0x1a39ea=_0x41c1['data'][_0x57e444];if(_0x1a39ea===undefined){if(_0x41c1['once']===undefined){_0x41c1['once']=!![];}_0x5db846=_0x41c1['rc4'](_0x5db846,_0x416365);_0x41c1['data'][_0x57e444]=_0x5db846;}else{_0x5db846=_0x1a39ea;}return _0x5db846;};var a={},b={};(function(_0x10ba7d,_0x21a119){var _0x3a1cbf={'TGbNd':_0x41c1('0x0','#VEz')};_0x10ba7d[_0x41c1('0x1','#VEz')]=_0x41c1('0x2','hDcR');_0x21a119[_0x41c1('0x3','EKUu')]=_0x41c1('0x4','cSf7');_0x21a119['intro']=_0x3a1cbf['TGbNd'];}(a,b));;(function(_0x29909a,_0x48ac7c,_0x116c3a){var _0x3fb9d2={'sSWBo':'jsjiami.com.v5','TlZnw':'版本号,js会定期弹窗,还请支持我们的工作'};_0x116c3a='al';try{_0x116c3a+=_0x41c1('0x5','lVEH');_0x48ac7c=encode_version;if(!(typeof _0x48ac7c!==_0x41c1('0x6','WQ6%')&&_0x48ac7c===_0x3fb9d2[_0x41c1('0x7','hDcR')])){_0x29909a[_0x116c3a]('删除'+_0x3fb9d2['TlZnw']);}}catch(_0xfc381a){_0x29909a[_0x116c3a](_0x41c1('0x8','j1(#'));}}(window));;encode_version = 'jsjiami.com.v5';

这里方便理解,用的是默认的例子,源代码就6行很简单的东西。

他加密出来的代码默认是压缩过的,我们先格式化一下看看代码结构

/** 加密工具已经升级了一个版本,目前为 jsjiami.com.v5 ,主要加强了算法,以及防破解【绝对不可逆】配置,耶稣也无法100%还原,我说的。;* 已经打算把这个工具基础功能一直免费下去。还希望支持我。* 另外 jsjiami.com.v5 已经强制加入校验,注释可以去掉,但是 jsjiami.com.v5 不能去掉(如果你开通了VIP,可以手动去掉),其他都没有任何绑定。* 誓死不会加入任何后门,jsjiami.com JS 加密的使命就是为了保护你们的Javascript 。* 警告:如果您恶意去掉 jsjiami.com.v5 那么我们将不会保护您的JavaScript代码。请遵守规则* 新版本: https://www.jsjiami.com/ 支持批量加密,支持大文件加密,拥有更多加密。 */
;
var encode_version = 'jsjiami.com.v5',baayg = '__0xea52c',__0xea52c = ['wqw6wpbDv04=', '5Yi26Zis54m/5p6E5Y6G77yuwrLCtuS9s+Wur+aeneW8iOepkQ==', '5p+h5bSv5YaW55SZw41yTypTwopYEsO6CsOPXj4ewqnDvEbmjq3kvpnmjqbljYvjgr4=', 'wqTCpMKHRw==', '6LyG5pmG5LuB5LqX5Lih57CQ5YiqDl7mk4rkv5Xjg7U=', 'woPCucO0OsKHS8K4', '5aes5p2v5oOl55i6acOm6YeK5bSC5aSy5LuvdyfCnO+/j8O6wrXCm+aghuevlO+8mOeuseesjOWHpOS7nOmctjoddMOow7AIJDHCgXnnm73ku5rno5/vv7jorqLmjKzlj77lhYzmnajlh5zliI7lr5Xjga3ov6LkuIfltrnlhqrkurHogZ3libXlr4fCizfDvuODpAvCijHnro7mqIbnipvlhovlrYE=', 'Shxs', 'FlPCtBHDq8Oia0Nu'];
(function(_0x2bd8b4, _0xee823f) {var _0x2d8384 = function(_0x5db520) {while (--_0x5db520) {_0x2bd8b4['push'](_0x2bd8b4['shift']());}};_0x2d8384(++_0xee823f);
}(__0xea52c, 0x14f));
var _0x41c1 = function(_0x57e444, _0x416365) {_0x57e444 = _0x57e444 - 0x0;var _0x5db846 = __0xea52c[_0x57e444];if (_0x41c1['initialized'] === undefined) {(function() {var _0x1536e3 = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;var _0x532b0c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x1536e3['atob'] || (_0x1536e3['atob'] = function(_0x25c712) {var _0x46683e = String(_0x25c712)['replace'](/=+$/, '');for (var _0x23a281 = 0x0, _0x3a04ed, _0x1660f8, _0x2cc873 = 0x0, _0xd2e94d = ''; _0x1660f8 = _0x46683e['charAt'](_0x2cc873++); ~_0x1660f8 && (_0x3a04ed = _0x23a281 % 0x4 ? _0x3a04ed * 0x40 + _0x1660f8 : _0x1660f8, _0x23a281++ % 0x4) ? _0xd2e94d += String['fromCharCode'](0xff & _0x3a04ed >> (-0x2 * _0x23a281 & 0x6)) : 0x0) {_0x1660f8 = _0x532b0c['indexOf'](_0x1660f8);}return _0xd2e94d;});}());var _0x5834e5 = function(_0x53e335, _0x1a471d) {var _0x2f08bb = [],_0x3a26ae = 0x0,_0x131d9b, _0x5c9f5b = '',_0x2c557b = '';_0x53e335 = atob(_0x53e335);for (var _0x557985 = 0x0, _0x341cca = _0x53e335['length']; _0x557985 < _0x341cca; _0x557985++) {_0x2c557b += '%' + ('00' + _0x53e335['charCodeAt'](_0x557985)['toString'](0x10))['slice'](-0x2);}_0x53e335 = decodeURIComponent(_0x2c557b);for (var _0x54a2bc = 0x0; _0x54a2bc < 0x100; _0x54a2bc++) {_0x2f08bb[_0x54a2bc] = _0x54a2bc;}for (_0x54a2bc = 0x0; _0x54a2bc < 0x100; _0x54a2bc++) {_0x3a26ae = (_0x3a26ae + _0x2f08bb[_0x54a2bc] + _0x1a471d['charCodeAt'](_0x54a2bc % _0x1a471d['length'])) % 0x100;_0x131d9b = _0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc] = _0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae] = _0x131d9b;}_0x54a2bc = 0x0;_0x3a26ae = 0x0;for (var _0x57e4f1 = 0x0; _0x57e4f1 < _0x53e335['length']; _0x57e4f1++) {_0x54a2bc = (_0x54a2bc + 0x1) % 0x100;_0x3a26ae = (_0x3a26ae + _0x2f08bb[_0x54a2bc]) % 0x100;_0x131d9b = _0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc] = _0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae] = _0x131d9b;_0x5c9f5b += String['fromCharCode'](_0x53e335['charCodeAt'](_0x57e4f1) ^ _0x2f08bb[(_0x2f08bb[_0x54a2bc] + _0x2f08bb[_0x3a26ae]) % 0x100]);}return _0x5c9f5b;};_0x41c1['rc4'] = _0x5834e5;_0x41c1['data'] = {};_0x41c1['initialized'] = !![];}var _0x1a39ea = _0x41c1['data'][_0x57e444];if (_0x1a39ea === undefined) {if (_0x41c1['once'] === undefined) {_0x41c1['once'] = !![];}_0x5db846 = _0x41c1['rc4'](_0x5db846, _0x416365);_0x41c1['data'][_0x57e444] = _0x5db846;} else {_0x5db846 = _0x1a39ea;}return _0x5db846;
};
var a = {},b = {};
(function(_0x10ba7d, _0x21a119) {var _0x3a1cbf = {'TGbNd': _0x41c1('0x0', '#VEz')};_0x10ba7d[_0x41c1('0x1', '#VEz')] = _0x41c1('0x2', 'hDcR');_0x21a119[_0x41c1('0x3', 'EKUu')] = _0x41c1('0x4', 'cSf7');_0x21a119['intro'] = _0x3a1cbf['TGbNd'];
}(a, b));;
(function(_0x29909a, _0x48ac7c, _0x116c3a) {var _0x3fb9d2 = {'sSWBo': 'jsjiami.com.v5','TlZnw': '版本号,js会定期弹窗,还请支持我们的工作'};_0x116c3a = 'al';try {_0x116c3a += _0x41c1('0x5', 'lVEH');_0x48ac7c = encode_version;if (!(typeof _0x48ac7c !== _0x41c1('0x6', 'WQ6%') && _0x48ac7c === _0x3fb9d2[_0x41c1('0x7', 'hDcR')])) {_0x29909a[_0x116c3a]('删除' + _0x3fb9d2['TlZnw']);}} catch (_0xfc381a) {_0x29909a[_0x116c3a](_0x41c1('0x8', 'j1(#'));}
}(window));;
encode_version = 'jsjiami.com.v5';

可以看出来短短6行代码,加密后变成了100多行,变量名也全部都变成一堆乱码了,完全看不出这些变量原本的作用是什么。

我们从上往下分析代码

(function(_0x2bd8b4, _0xee823f) {var _0x2d8384 = function(_0x5db520) {while (--_0x5db520) {_0x2bd8b4['push'](_0x2bd8b4['shift']());}};_0x2d8384(++_0xee823f);
}(__0xea52c, 0x14f));
__0xea52c 是上边的字符串数组,0x14f是一个16进制形式的数字

那么上边大致就是声明了一个自执行的方法将字符串数组根据指定次数切换一下数组内元素位置

具体有什么作用我们不管,先记住这个方法他做过什么,我们继续接着往下看。

var _0x41c1 = function (_0x57e444, _0x416365) {_0x57e444 = _0x57e444 - 0x0;var _0x5db846 = __0xea52c[_0x57e444];if (_0x41c1['initialized'] === undefined) {(function () {var _0x1536e3 = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;var _0x532b0c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x1536e3['atob'] || (_0x1536e3['atob'] = function (_0x25c712) {var _0x46683e = String(_0x25c712)['replace'](/=+$/, '');for (var _0x23a281 = 0x0, _0x3a04ed, _0x1660f8, _0x2cc873 = 0x0, _0xd2e94d = ''; _0x1660f8 = _0x46683e['charAt'](_0x2cc873++); ~_0x1660f8 && (_0x3a04ed = _0x23a281 % 0x4 ? _0x3a04ed * 0x40 + _0x1660f8 : _0x1660f8, _0x23a281++ % 0x4) ? _0xd2e94d += String['fromCharCode'](0xff & _0x3a04ed >> (-0x2 * _0x23a281 & 0x6)) : 0x0) {_0x1660f8 = _0x532b0c['indexOf'](_0x1660f8);}return _0xd2e94d;});}());var _0x5834e5 = function (_0x53e335, _0x1a471d) {var _0x2f08bb = [], _0x3a26ae = 0x0, _0x131d9b, _0x5c9f5b = '', _0x2c557b = '';_0x53e335 = atob(_0x53e335);for (var _0x557985 = 0x0, _0x341cca = _0x53e335['length']; _0x557985 < _0x341cca; _0x557985++) {_0x2c557b += '%' + ('00' + _0x53e335['charCodeAt'](_0x557985)['toString'](0x10))['slice'](-0x2);}_0x53e335 = decodeURIComponent(_0x2c557b);for (var _0x54a2bc = 0x0; _0x54a2bc < 0x100; _0x54a2bc++) {_0x2f08bb[_0x54a2bc] = _0x54a2bc;}for (_0x54a2bc = 0x0; _0x54a2bc < 0x100; _0x54a2bc++) {_0x3a26ae = (_0x3a26ae + _0x2f08bb[_0x54a2bc] + _0x1a471d['charCodeAt'](_0x54a2bc % _0x1a471d['length'])) % 0x100;_0x131d9b = _0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc] = _0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae] = _0x131d9b;}_0x54a2bc = 0x0;_0x3a26ae = 0x0;for (var _0x57e4f1 = 0x0; _0x57e4f1 < _0x53e335['length']; _0x57e4f1++) {_0x54a2bc = (_0x54a2bc + 0x1) % 0x100;_0x3a26ae = (_0x3a26ae + _0x2f08bb[_0x54a2bc]) % 0x100;_0x131d9b = _0x2f08bb[_0x54a2bc];_0x2f08bb[_0x54a2bc] = _0x2f08bb[_0x3a26ae];_0x2f08bb[_0x3a26ae] = _0x131d9b;_0x5c9f5b += String['fromCharCode'](_0x53e335['charCodeAt'](_0x57e4f1) ^ _0x2f08bb[(_0x2f08bb[_0x54a2bc] + _0x2f08bb[_0x3a26ae]) % 0x100]);}return _0x5c9f5b;};_0x41c1['rc4'] = _0x5834e5;_0x41c1['data'] = {};_0x41c1['initialized'] = !![];}var _0x1a39ea = _0x41c1['data'][_0x57e444];if (_0x1a39ea === undefined) {if (_0x41c1['once'] === undefined) {_0x41c1['once'] = !![];}_0x5db846 = _0x41c1['rc4'](_0x5db846, _0x416365);_0x41c1['data'][_0x57e444] = _0x5db846;} else {_0x5db846 = _0x1a39ea;}return _0x5db846;
};

可以看出来,这个方法体内的方法很复杂

到这里有点想放弃了,sojson加密还是很强的,短短几行就加密成这样了,破解难度特别大,这次就到这,休息一下,下次再解吧。

ps:我后边发现一个解密的网站 大家遇到加密文件可以去试试能不能解

www.jsjiami.com/jiemi.html

sojson.v5 | jsjiami.com.v5 最新解密方法相关推荐

  1. CTF-Crypto 密码原理及解密方法

    CTF-Crypto 密码原理及解密方法 文章目录 CTF-Crypto 密码原理及解密方法 推荐综合加解密网址 一.常见密码格式 二.古典密码 凯撒密码 仿射密码 埃特巴什码 培根密码 棋盘密码 希 ...

  2. Linux环境下脚本加密软件SHC的解密方法

    Linux环境下脚本加密软件SHC的解密方法 2016/08/06:更新一个新的解密脚本 https://github.com/yanncam/UnSHc 自从我在博客里面发布了一些免流相关的东西之后 ...

  3. CTF-Crypto-各种密码原理及解密方法

    CTF-Crypto-各种密码原理及解密方法 一.常见密码格式(太懒了,待补充) 二.古典密码 凯撒密码 仿射密码 埃特巴什码 培根密码 棋盘密码 希尔密码 维吉尼亚密码 摩尔斯密码 栅栏密码(普通型 ...

  4. 常见的js加密/js解密方法

    常见的js加密/js解密方法 当今互联网世界中,数据安全是至关重要的.为了保护用户的隐私和保密信息,开发人员必须采取适当的安全措施.在前端开发中,加密和解密技术是一种常见的数据安全措施,其中 Java ...

  5. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  6. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  7. phpc.sinaapp.com 加密的解密方法

    原文:phpc.sinaapp.com 加密的解密方法 很简单,用类似phpjm的解密方式,替换掉_inc.php中最后一个return中的eval为print就出来了.

  8. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

  9. Unity3d DLL脚本通用解密方法

    网上已经有很多文章讲解过Unity3D脚本DLL 解密,基本方法原理都差不多,就是通过HOOK或者调试下断mono_image_open_from_data_with_name这个函数拿到解密后的DL ...

最新文章

  1. 软件工程 之 动物世界
  2. Python-文件和数据格式化
  3. python3 pyquery模块 解析html网页
  4. 阿里云重磅发布云原生裸金属方案 | 云原生生态周报 Vol. 53
  5. ustc小道消息20211217
  6. vue watch监听对象
  7. 使用Amazon s3托管您的Maven工件
  8. dubbo简易监控中心安装
  9. linux内核那些事之虚拟空间划分
  10. 【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案...
  11. java垃圾收集方法_java几种垃圾收集方法和垃圾收集器
  12. idea中算子正确,算子下面有红波浪线,原因分析
  13. 《 ATSS:Adaptive Training Sample Selection》
  14. android 4.4.2海信电视,ROOT海信电视Android4.0的详细步骤
  15. 约翰霍普金斯大学计算机博士收入,约翰霍普金斯大学计算机科学研究生项目详情!...
  16. “自动修复”无法修复你的电脑-SATAFIRM S11-固态硬盘坏了
  17. 花青素近红外荧光染料Cyanine5 hydrazide,Cy5 hydrazide,1427705-31-4深蓝色粉末状
  18. 在练琴时关于音乐与计算机结合的碎思考
  19. [网络安全自学篇] 九十一.阿里云搭建LNMP环境及实现PHP自定义网站IP访问 (1)
  20. SQL语句merge into的用法

热门文章

  1. linux词汇_Linux发行版词汇表
  2. Kali Linux使用ZAP的爬虫功能
  3. 华清远见-重庆中心-前端阶段个人总结
  4. CAD初学者如何快速画圆?
  5. VC之PDF文件操作
  6. 组团学 用户管理(zutuanxue.com)
  7. 二叉搜索树(BST)合集
  8. 红外光学雨量传感器的工作原理
  9. 使用H5Stream实现rtsp流播放,并整合到web项目中
  10. 【运维篇】Docker知识点万字吐血大总结,学完阿里叫我明天去入职