;eval(js eval functionn(p,a,c,k,e,d){e=js eval functionn(c){return(

如何解析被压缩过的Js文件?eval(function(p,a,c,k,e,d){.....,{})) - CSDN博客
如何解析被压缩过的Js文件?eval(function(p,a,c,k,e,d){.....,{}))
随着ajax的流行,大家一下子明白过来,原来js能够完成这么强大的功能,然后就是JS代码原来越复杂,js文件体积越来越大,同样也增加了安全隐患。
现在网上比较普遍的流行一些代码混淆和代码压缩工具:
&& 代码混淆工具,本人做的
& 代码压缩工具,提供了一种特有的压缩算法对JS的代码进行减肥,也是我看到较早的一个工具,现在经常和JSConfusion结合去使用(当然是先混淆后压缩)
&&集混淆/压缩一体的工具,虽然功能比较多,但在压缩的时候效果不是很好,经过我测试会有时压缩过的代码不能运行
这些是见过的比较好的几个工具,如果你还见过哪些不错功能类似的工具,可以在后面补充~~~~&
大家应该都知道这样一个理论:加密可以反加密,而混淆却无法反混淆.
混淆也可以叫颠倒是非、混淆黑白,无非就是去掉缩进、空格、空行和注释,改表代码中的非保留字为简单的字母、符号、乱码什么的,这样做只是为了加大代码的阅读难度,提高阅读成本,所以反混淆只有根据你对JS的了解程度去进行变量/方法/属性/类的替换。当然代码少你到是可以这样做,如果代码很多(可以看这个混淆后的),你就会知道什么叫 &&
上面为基础知识,下面进行正题:
alert(&Welcome idoall.org&);
被压缩过以后是下面的样子:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--)d[ c]=k[ c]||c;k=[function(e){return d[& e]}];e=function(){return'//w+'};c=1};while(c--)if(k[ c])p=p.replace(new RegExp('//b'+e(c)+'//b','g'),k[ c]);return p}('3(&2 1.0&);',4,4,'org|idoall|Welcome|alert'.split('|'),0,{}))
那么我们如何从压缩过的代码中提取出原文?
不管她会压缩混淆成什么样子,最终都是要被浏览器认可,解析,执行的。我们可以跟踪代码的运行,会发现最关键的位置在这里.....p=p.replace(new RegExp('//b'+e(c)+'//b','g'),k);return p
这里的变量 p 就是用来保存最终后的代码,我们可以在返回 p 的前面将值输出,就会得到alert(&Welcome idoall.org&);
本文已收录于以下专栏:
相关文章推荐
/dudumao/archive//2712156.html
这里解码百度访问统计代码构造函数为示例:
百度访问统计代码JavaScript源码:
红色加粗部分将是要修改的地方.
eval(function(p,a,c,k,e,d){e=functio...
例如如下代码:
eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toStri...
一、为什么要进行Javascript压缩?
1、减少JS代码容量,增加下载速度和执行速度;
2、压缩后的JS代码不具备可识性,在一定程度上达到加密效果,防止被人轻易使用。
二、常规J...
eval(function(p,a,c,k,e,d) 加密破解和格式化JS代码最新算法
红色加粗部分将是要修改的地方.
eval(function(p,a,c,k,e,d){e=function(...
如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...
最近,老大叫把appache安装并配置好,我menyi
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)解码类似 eval(function(p,a,c,k,e,d){e=function(c) 的JavaScript代码
发表评论(1)
朋友有段javascript代码是加密的,拿来看一下,是以 eval(function(p,a,c,k,e,d){e=function(c) 开头的,代码如下:
eval(function(p,a,c,k,e,d){e=function(c){return(c&a?"":e(parseInt(c/a)))+((c=c%a)&35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);}('f b$=["1N","2j","2i","",\'\\o\\y\\A\\1g\\1b\\s\',\'\\1g\\1b\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\y\\A\\1a\\1d\\1c\\R\\s\',\'\\1a\\1d\\1c\\R\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\2c\\2b\\2g\\1m\\1p\\2f\\s\',"",\'\\o\\y\\A\\2e\\2v\\1p\\2u\\s\',"",\'\\o\\y\\2t-1q\\s\',\'E-1q\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\y\\A\\1r\\1k\\R\\s\',\'\\1r\\1k\\R\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"\\H\\1m\\2a\\1K\\J\\o\\1M\\1I &&","Y","1E","1H","D","D","?1W=1X&1Q=1P&1O=29&1T=","","1s","p","p","","1s","1j","1S","1j","1R","c","1Y","c","1Z",\'\',"1U=",";1V=/","1G"];W.1F=q(){l M};q $(1l){l a.m(1l)};q 1n(){$( b$[0]).V.2z=$( b$[1]).2R-2S+ b$[2]};W.2P=q(){1n()};q 2N(){v{h(a.c.F.g== b$[3]){t( b$[4]);a.c.F.u();l r};f F=/^[\\2O-\\2T]{2,6}$/;h(!F.L(a.c.F.g)){t( b$[5]);a.c.F.u();l r}}x(z){};v{h(a.c.K.g== b$[6]){t( b$[7]);a.c.K.u();l r};f c=/^1[3,4,5,7,8]\\d{9}$/;h(!c.L(a.c.K.g)){t( b$[8]);a.c.K.u();l r}}x(z){};v{h(a.c.Y.g== b$[9]){t( b$[10]);a.c.Y.u();l r}}x(z){};v{h(a.c.1h.g== b$[11]){t( b$[12]);a.c.1h.u();l r}}x(z){};v{h(a.c.G.g== b$[13]){t( b$[14]);a.c.G.u();l r};f G=/^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/;h(!G.L(a.c.G.g)){t( b$[15]);a.c.G.u();l r}}x(z){};v{h(a.c.D.g== b$[16]){t( b$[17]);a.c.D.u();l r};f 1o=/^\\d{1,2}$/;h(!1o.L(a.c.D.g)){t( b$[18]);a.c.D.u();l r}}x(z){};a.c.1e.2I=M;a.c.1e.g= b$[19];l M};v{2F 2B( b$[20], b$[21], b$[22])}x(z){};v{f 1f=a.m( b$[23]).1i;q 2C(){a.m( b$[24]).1i=1f+ b$[25]+2D.2L()}}x(z){};q 2V(){f p=a.c.p.1C;1D(f i=C;i&a.c.p.Q;i++){h(a.c.p[i].2Q==M){f p=a.c.p[i].1C;2E}};h(a.c.n.g== b$[26]||a.c.n.g==C){f n=1y}Z{f n=a.c.n.g};f B=p*n;a.c.B.g=B;a.m( b$[27]).1v=B};q 2K(){f 1x=a.m( b$[28]);f p=1x.1B[a.m( b$[29]).1B.2H].2G;h(a.c.n.g== b$[2J]||a.c.n.g==C){f n=1y}Z{f n=a.c.n.g};f B=p*n;a.c.B.g=B;a.m( b$[2A]).1v=B};q 2U(i){f k=2M;1D(f j=C;j&k;j++){h(j==i){a.m( b$[1L]+j).V.1z= b$[1J]}Z{a.m( b$[2q]+j).V.1z= b$[2r]}}};q 2s(){a.m( b$[2n]).1A= b$[2o]};q 2p(){a.m( b$[2w]).1A= b$[2x]};f I= b$[2y];h(a.X.Q&C){I=a.X};v{h(I.Q==C&&1u.1t.1w.Q&C){I=1u.1t.1w}}x(e){} a.2d= b$[2k]+I+ b$[2l];a.m( b$[2m]).g=W.2h.a.X;',62,182,'||||||||||document|_|wfform|||var|value|if||||return|getElementById|wfmun|u8bf7|wfproduct|function|false|uff01|alert|focus|try||catch|u586b|ex|u5199|wfprice|0x0|wfcode||wfname|wfemail|u6b63|wfllref|uff0c|wfmob|test|true|u5f0f|u4e0d|u683c|length|ue|u91cd|u65b0|style|window|referrer|wfprovince|else|||||||||||u624b|u540d|u53f7|u673a|wfsubmit|thissrc|u59d3|wfaddress|src|paydiv|u8bc1|id|u5728|getHeight|regwfcode|u5730|MAIL|u9a8c|showprice|location|opener|innerHTML|href|wfcpxljg|0x1|display|target|options|alt|for|wfcity|onerror|wfddll|wfarea|u7b49|33|u4ea4|32|u7a0d|wffahuo|imgh|70|imgw|none|block|temp|WFLLURL|path|wfaction|codeimg|_parent|_blank|||||||||||u63d0|u62e9|u9009|cookie|u8be6|u533a|u6240|top|px|wfforml|41|42|43|36|37|opay2|34|35|opay|u5199E|u|38|39|40|height|31|PCAS|refreshCode|Math|break|new|title|selectedIndex|disabled|30|priceb|random|0x3|postcheck|u4e00|onload|checked|offsetHeight|0x55|u9fa5|changeItem|pricea'.split('|'),0,{}))
方法一:最简单的解密方法是将 eval() 直接替换成 document.write(),然后将代码输出到页面即可。
在输出前,我们先输出一个&xmp&标记,具体代码构造如下:
&script type="text/javascript"&
document.write("&xmp&");
/*eval*/document.write(" 这里是除 eval() 之外的代码部分 ");
document.write("&/xmp&");
将上述代码保存为 .html 文件,打开即可得到你要的代码,顺便对代码格式化一下更方便阅读。
方法二:也不复杂,通过这个方法可以了解一下更多的信息。
大家看原代码中的蓝色部分: while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);
其实这个 eval(function(p,a,c,k,e,d){})) 中自带解码函数e(),while循环产生的每个 p 就是解码后的函数代码,我们将蓝色代码中的 return p 替换为:
document.getElementById(”textarea”).innerText=p
这样就能将解码后的代码直接输出在一个文本区域内,方便复制出来,构造如下:
&textarea id="textarea" rows="50" cols="100"&&/textarea&
&script type="text/javascript"&
eval(function(p,a,c,k,e,d){e=function(c){return(c&a?"":e(parseInt(c/a)))+((c=c%a)&35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);document.getElementById('textarea').innerText=p;}('f b$=["1N","2j","2i","",\'\\o\\y\\A\\1g\\1b\\s\',\'\\1g\\1b\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\y\\A\\1a\\1d\\1c\\R\\s\',\'\\1a\\1d\\1c\\R\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\2c\\2b\\2g\\1m\\1p\\2f\\s\',"",\'\\o\\y\\A\\2e\\2v\\1p\\2u\\s\',"",\'\\o\\y\\2t-1q\\s\',\'E-1q\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"",\'\\o\\y\\A\\1r\\1k\\R\\s\',\'\\1r\\1k\\R\\P\\N\\O\\H\\S\\J\\o\\T\\U\\y\\A\\s\',"\\H\\1m\\2a\\1K\\J\\o\\1M\\1I &&","Y","1E","1H","D","D","?1W=1X&1Q=1P&1O=29&1T=","","1s","p","p","","1s","1j","1S","1j","1R","c","1Y","c","1Z",\'\',"1U=",";1V=/","1G"];W.1F=q(){l M};q $(1l){l a.m(1l)};q 1n(){$( b$[0]).V.2z=$( b$[1]).2R-2S+ b$[2]};W.2P=q(){1n()};q 2N(){v{h(a.c.F.g== b$[3]){t( b$[4]);a.c.F.u();l r};f F=/^[\\2O-\\2T]{2,6}$/;h(!F.L(a.c.F.g)){t( b$[5]);a.c.F.u();l r}}x(z){};v{h(a.c.K.g== b$[6]){t( b$[7]);a.c.K.u();l r};f c=/^1[3,4,5,7,8]\\d{9}$/;h(!c.L(a.c.K.g)){t( b$[8]);a.c.K.u();l r}}x(z){};v{h(a.c.Y.g== b$[9]){t( b$[10]);a.c.Y.u();l r}}x(z){};v{h(a.c.1h.g== b$[11]){t( b$[12]);a.c.1h.u();l r}}x(z){};v{h(a.c.G.g== b$[13]){t( b$[14]);a.c.G.u();l r};f G=/^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/;h(!G.L(a.c.G.g)){t( b$[15]);a.c.G.u();l r}}x(z){};v{h(a.c.D.g== b$[16]){t( b$[17]);a.c.D.u();l r};f 1o=/^\\d{1,2}$/;h(!1o.L(a.c.D.g)){t( b$[18]);a.c.D.u();l r}}x(z){};a.c.1e.2I=M;a.c.1e.g= b$[19];l M};v{2F 2B( b$[20], b$[21], b$[22])}x(z){};v{f 1f=a.m( b$[23]).1i;q 2C(){a.m( b$[24]).1i=1f+ b$[25]+2D.2L()}}x(z){};q 2V(){f p=a.c.p.1C;1D(f i=C;i&a.c.p.Q;i++){h(a.c.p[i].2Q==M){f p=a.c.p[i].1C;2E}};h(a.c.n.g== b$[26]||a.c.n.g==C){f n=1y}Z{f n=a.c.n.g};f B=p*n;a.c.B.g=B;a.m( b$[27]).1v=B};q 2K(){f 1x=a.m( b$[28]);f p=1x.1B[a.m( b$[29]).1B.2H].2G;h(a.c.n.g== b$[2J]||a.c.n.g==C){f n=1y}Z{f n=a.c.n.g};f B=p*n;a.c.B.g=B;a.m( b$[2A]).1v=B};q 2U(i){f k=2M;1D(f j=C;j&k;j++){h(j==i){a.m( b$[1L]+j).V.1z= b$[1J]}Z{a.m( b$[2q]+j).V.1z= b$[2r]}}};q 2s(){a.m( b$[2n]).1A= b$[2o]};q 2p(){a.m( b$[2w]).1A= b$[2x]};f I= b$[2y];h(a.X.Q&C){I=a.X};v{h(I.Q==C&&1u.1t.1w.Q&C){I=1u.1t.1w}}x(e){} a.2d= b$[2k]+I+ b$[2l];a.m( b$[2m]).g=W.2h.a.X;',62,182,'||||||||||document|_|wfform|||var|value|if||||return|getElementById|wfmun|u8bf7|wfproduct|function|false|uff01|alert|focus|try||catch|u586b|ex|u5199|wfprice|0x0|wfcode||wfname|wfemail|u6b63|wfllref|uff0c|wfmob|test|true|u5f0f|u4e0d|u683c|length|ue|u91cd|u65b0|style|window|referrer|wfprovince|else|||||||||||u624b|u540d|u53f7|u673a|wfsubmit|thissrc|u59d3|wfaddress|src|paydiv|u8bc1|id|u5728|getHeight|regwfcode|u5730|MAIL|u9a8c|showprice|location|opener|innerHTML|href|wfcpxljg|0x1|display|target|options|alt|for|wfcity|onerror|wfddll|wfarea|u7b49|33|u4ea4|32|u7a0d|wffahuo|imgh|70|imgw|none|block|temp|WFLLURL|path|wfaction|codeimg|_parent|_blank|||||||||||u63d0|u62e9|u9009|cookie|u8be6|u533a|u6240|top|px|wfforml|41|42|43|36|37|opay2|34|35|opay|u5199E|u|38|39|40|height|31|PCAS|refreshCode|Math|break|new|title|selectedIndex|disabled|30|priceb|random|0x3|postcheck|u4e00|onload|checked|offsetHeight|0x55|u9fa5|changeItem|pricea'.split('|'),0,{}));
同样将以上代码保存为 .html 文件并打开运行,即可得到解码后的代码了。
PS. 这里就不贴出解码后的代码了,想知道结果是什么,自己试试呗 -_-!!!
另:解码后的代码里如出现类似 \u8bf7\u586b\u\u540d\uff01 的代码,这是中文的Unicode编码形式,使用 Unicode编码转换工具即可,例如
/Tools/Unicode.aspx
版权声明:转载请注明来自,本文地址:
除非注明,杨俊伟博客文章均为原创,转载请注明出处和链接!
相关阅读:
用第三方帐号快捷登录下面是一段加密后的代码,很晕吧,但事实上只是使用;eval(function(p,a,c,k,e,;j(){k(t==q){3.4(\;10.X(\\'h\\',{8:8,T:i,S:;e=b.m;E(e.D!=\(\b=16(a).;b}',62,74,'|var||documen;eval(;function(p,a,c,k,e,r){e=;return
下面是一段加密后的代码,很晕吧,但事实上只是使用了障眼法,把换行取消掉了而已,让我们排版一下再来看看到底是什么? eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('11 y=R;1 i=l;1 f=x;1 8=2.K;1 6=\\'\\';5 C(a){i=l;f=x;8=2.13;y=Z;6=a;v();u()}5 u(){k(t!=q){t.L.J=6;t.r()}}5 j(){k(t==q){3.4(\10.X(\\'h\\',{8:8,T:i,S:f,Q:i,P:f,O:\\'7\\',6:6});k(!3.N.M){o();t.r()}}}5 v(){p.n(I,\\'H\\',j);p.n(3.4(\b=3.4(\e=b.m;E(e.D!=\(\b=16(a).U(/^[\\\\s]+|[\\\\s]+$/g,\\'\\');1b b}',62,74,'|var||document|getElementById|function|previewSrc|previewArea|radio|style||||||mHeight||testImage|mWidth|createPreview|if|85|offsetParent|observe|setPreviewWrapPos|Event|null|reset|||resetPreview|observe_pic|px|70|isNeck|height|offsetTop|className|initProduct|tagName|while|pbigImg|mouseover|load|window|src|6666667|previewImg|attachEvent|body|previewWrap|maxHeight|maxWidth|false|minHeight|minWidth|replace|BODY|offsetLeft|ImgWithPreview|310|true|Cropper|left|new||top|Trim|String|parseInt|absolute|width|position|return'.split('|'),0,{})) 排版后 eval( function(p,a,c,k,e,r){
e = function(c){
return(c35?String.fromCharCode(c+29):c.toString(36))
if(!''.replace(/^/,String)) {
while(c--)r[e(c)]=k[c]||e(c);
k = [function(e){return r[e]}];
e = function(){return'\\\\w+'};
while (c--) if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]); }('11 y=R;1 i=l;1 f=x;1 8=2.K;1 6=\\'\\';5
C(a){i=l;f=x;8=2.13;y=Z;6=a;v();u()}5 u(){k(t!=q){t.L.J=6;t.r()}}5 j(){k(t==q){3.4(\10.X(\\'h\\',{8:8,T:i,S:f,Q:i,P:f,O:\\'7\\',6:6});k(!3.N.M){o();t.r()}}}5 v(){p.n(I,\\'H\\',j);p.n(3.4(\b=3.4(\e=b.m;E(e.D!=\(\b=16(a).U(/^[\\\\s]+|[\\\\s]+$/g,\\'\\');1b b}',62,74,'|var||document|getElementById|function|previewSrc|previewArea|radio|style||||||mHeight||testImage|mWidth|createPreview|if|85|offsetParent|observe|setPreviewWrapPos|Event|null|reset|||resetPreview|observe_pic|px|70|isNeck|height|offsetTop|className|initProduct|tagName|while|pbigImg|mouseover|load|window|src|6666667|previewImg|attachEvent|body|previewWrap|maxHeight|maxWidth|false|minHeight|minWidth|replace|BODY|offsetLeft|ImgWithPreview|310|true|Cropper|left|new||top|Trim|String|parseInt|absolute|width|position|return'.split('|'),0,{})) 那么熟悉这种函数写法的应该就能明白这个加密原理了吧。只要细心点就能发现其实这种加密手段是用来防止一些拿来主意者。上面加密的js代码如果想得到其原代码可以在“” 之前打印出来既可,例如:“document.writeln(p);”。 顺便介绍一下 eval 方法。 eval 方法 检查 Javascript 代码并执行.
eval(codeString)
必选项 codestring 参数是包含有效 Javascript 代码的字符串值。这个字符串将由 Javascript 分析器进行分析和执行。
说明 eval 函数允许 Javascript 源代码的动态执行。例如,下面的代码创建了一个包含 Date 对象的新变量 mydate :
eval(\传递给 eval 方法的代码执行时的上下文和调用 eval 方法的一样. 这种语法是这样的,例如代码:
var test_func = function (par1, par2) { alert(\}(\我是第一个参数。\还有我是第二个参数\和下面代码效果是一样的:
function test_func (par1, par2) {
alert(\} test_func(\我是第一个参数。\还有我是第二个参数\
解密的一个实例:
三亿文库包含各类专业文献、高等教育、专业论文、各类资格考试、幼儿教育、小学教育、中学教育、如何解密eval(function(p,a,c,k,e,r)……)01等内容。 
 eval(function(p,a,c,k,e,d)系列加密解密javascript程序_IT/计算机_专业资料...[\r\n]+/g, ''); code = code.replace(/'/g, &\\'&); var tmp ...  课后小题:请破解以下密码 Teieeemrynwetemryhyeoetewshwsnvraradhnhyartebcmohr...A B C D E F G H I J K 12 M N O P Q R S T U V W X Y...  a D b K c R d Y e F f M g T h A i H j O k V l C m ...解:因为 k1=7,k2=3,因此,根据仿射密码的解密公式,有 p ? 7?1 ? (c ?...  解. 首先从加密变换求出解密变换 m=11-1(c-2)...Q B K E P B 其次将密文字母转换为编码值 V ...对应的编码值分别是 f 5 p r 17 q i d a y...  下载地址: ' p( [/ \* x& x+ f7 a- I 1...E( G3 C3 l0 S r /...它能破解密码的软件达 60 多种,可以通过 C. `!...  r&|a|.此外,a|b 的充要条件是 r=0 定理 3....如何提高加解密算法的速度 加密密次 e,解密幂次 d...p 是素数的证据越充分, 由此可认为如果找到 k 个...  放射变换: 加密: 加密 c = E a ,b (m ) =...[k]&& } (2)仿射变换加/解密程序对一段...(q-1)*(p-1); //选 e 与 fn 互素 for(...  密码学,学密码,教会如何破解密码_教育学/心理学_人文社科_专业资料。密码学,学...A B C D E F G H I J K 12 M N O P Q R S T U V W X Y...}

我要回帖

更多关于 js new function eval 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信