更新js逆向代码

This commit is contained in:
luzhisheng 2021-07-30 17:14:15 +08:00
parent 36332d7b7c
commit 8cc4b4a48f
95 changed files with 7716 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
.idea/
.env
*.csv
*.xlsx
*.xlsx#
*.zip
*.pyc
venv/
setting.py
node_modules/

View File

@ -0,0 +1,3 @@
var a = 1
console.log("a",a)
console.log("global.a",global.a)

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
_$vD=window;
!function(t,n){"object"==typeof exports?module.exports=exports=n():"function"==typeof define&&define.amd?define([],n):t.o00o0o00=n()}(this,function(){var t=t||function(t,n){var i=Object.create||function(){function t(){}return function(n){var i;return t.prototype=n,i=new t,t.prototype=null,i}}(),e={},r=e.lib={},o=r.Base=function(){return{extend:function(t){var n=i(this);return t&&n.mixIn(t),n.hasOwnProperty("init")&&this.init!==n.init||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),s=r.WordArray=o.extend({init:function(t,i){t=this.words=t||[],i!=n?this.sigBytes=i:this.sigBytes=4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var n=this.words,i=t.words,e=this.sigBytes,r=t.sigBytes;if(this.clamp(),e%4)for(var o=0;o<r;o++){var s=i[o>>>2]>>>24-o%4*8&255;n[e+o>>>2]|=s<<24-(e+o)%4*8}else for(var o=0;o<r;o+=4)n[e+o>>>2]=i[o>>>2];return this.sigBytes+=r,this},clamp:function(){var n=this.words,i=this.sigBytes;n[i>>>2]&=4294967295<<32-i%4*8,n.length=t.ceil(i/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(n){for(var i,e=[],r=function(n){var n=n,i=987654321,e=4294967295;return function(){i=36969*(65535&i)+(i>>16)&e,n=18e3*(65535&n)+(n>>16)&e;var r=(i<<16)+n&e;return r/=4294967296,r+=.5,r*(t.random()>.5?1:-1)}},o=0;o<n;o+=4){var a=r(4294967296*(i||t.random()));i=987654071*a(),e.push(4294967296*a()|0)}return new s.init(e,n)}}),a=e.o00o0o00o={},c=a.Hex={stringify:function(t){for(var n=t.words,i=t.sigBytes,e=[],r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;e.push((o>>>4).toString(16)),e.push((15&o).toString(16))}return e.join("")},o00o0o00o0o:function(t){for(var n=t.length,i=[],e=0;e<n;e+=2)i[e>>>3]|=parseInt(t.substr(e,2),16)<<24-e%8*4;return new s.init(i,n/2)}},u=a.Latin1={stringify:function(t){for(var n=t.words,i=t.sigBytes,e=[],r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;e.push(String.fromCharCode(o))}return e.join("")},o00o0o00o0o:function(t){for(var n=t.length,i=[],e=0;e<n;e++)i[e>>>2]|=(255&t.charCodeAt(e))<<24-e%4*8;return new s.init(i,n)}},f=a.o00o0o00o0={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},o00o0o00o0o:function(t){return u.o00o0o00o0o(unescape(encodeURIComponent(t)))}},h=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=f.o00o0o00o0o(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(n){var i=this._data,e=i.words,r=i.sigBytes,o=this.blockSize,a=4*o,c=r/a;c=n?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*o,f=t.min(4*u,r);if(u){for(var h=0;h<u;h+=o)this._doProcessBlock(e,h);var p=e.splice(0,u);i.sigBytes-=f}return new s.init(p,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(r.Hasher=h.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var n=this._doFinalize();return n},blockSize:16,_createHelper:function(t){return function(n,i){return new t.init(i).finalize(n)}},_createHmacHelper:function(t){return function(n,i){return new p.HMAC.init(t,i).finalize(n)}}}),e.algo={});return e}(Math);return t});
!function(e,t,i){"object"==typeof exports?module.exports=exports=t(require("./core.min"),require("./sha1.min"),require("./hmac.min")):"function"==typeof define&&define.amd?define(["./core.min","./sha1.min","./hmac.min"],t):t(e.o00o0o00)}(this,function(e){return function(){var t=e,i=t.lib,r=i.Base,n=i.WordArray,o=t.algo,a=o.MD5,c=o.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var i=this.cfg,r=i.hasher.create(),o=n.create(),a=o.words,c=i.keySize,f=i.iterations;a.length<c;){s&&r.update(s);var s=r.update(e).finalize(t);r.reset();for(var u=1;u<f;u++)s=r.finalize(s),r.reset();o.concat(s)}return o.sigBytes=4*c,o}});t.EvpKDF=function(e,t,i){return c.create(i).compute(e,t)}}(),e.EvpKDF});t={d:_$vD["e"+"v"+"a"+"l"](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]);return p;}('{2:"1"+"0"+"3"+"5"+"4"+"0"}',6,6,'{{ m }}'.split('|'),0,{}))};
!function(r,e){"object"==typeof exports?module.exports=exports=e(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],e):e(r.o00o0o00)}(this,function(r){return function(){function e(r,e,t){for(var n=[],i=0,o=0;o<e;o++)if(o%4){var f=t[r.charCodeAt(o-1)]<<o%4*2,c=t[r.charCodeAt(o)]>>>6-o%4*2;n[i>>>2]|=(f|c)<<24-i%4*8,i++}return a.create(n,i)}var t=r,n=t.lib,a=n.WordArray,i=t.o00o0o00o;i.Base64={stringify:function(r){var e=r.words,t=r.sigBytes,n=this._map;r.clamp();for(var a=[],i=0;i<t;i+=3)for(var o=e[i>>>2]>>>24-i%4*8&255,f=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,s=o<<16|f<<8|c,h=0;h<4&&i+.75*h<t;h++)a.push(n.charAt(s>>>6*(3-h)&63));var p=n.charAt(64);if(p)for(;a.length%4;)a.push(p);return a.join("")},o00o0o00o0o:function(r){var t=r.length,n=this._map,a=this._reverseMap;if(!a){a=this._reverseMap=[];for(var i=0;i<n.length;i++)a[n.charCodeAt(i)]=i}var o=n.charAt(64);if(o){var f=r.indexOf(o);f!==-1&&(t=f)}return e(r,t,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),r.o00o0o00o.Base64});
!function(e,t,r){"object"==typeof exports?module.exports=exports=t(require("./core.min"),require("./evpkdf.min")):"function"==typeof define&&define.amd?define(["./core.min","./evpkdf.min"],t):t(e.o00o0o00)}(this,function(e){e.lib.Cipher||function(t){var r=e,i=r.lib,n=i.Base,c=i.WordArray,o=i.BufferedBlockAlgorithm,s=r.o00o0o00o,a=(s.o00o0o00o0,s.Base64),f=r.algo,p=f.EvpKDF,d=i.Cipher=o.extend({cfg:n.extend(),createo00o0o00oryptor:function(e,t){return this.create(this._o00o0o00o_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,r){this.cfg=this.cfg.extend(r),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){e&&this._append(e);var t=this._doFinalize();return t},keySize:4,ivSize:4,_o00o0o00o_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?B:x}return function(t){return{o00o0o00orypt:function(r,i,n){return e(i).o00o0o00orypt(t,r,i,n)},decrypt:function(r,i,n){return e(i).decrypt(t,r,i,n)}}}}()}),h=(i.StreamCipher=d.extend({_doFinalize:function(){var e=this._process(!0);return e},blockSize:1}),r.mode={}),u=i.BlockCipherMode=n.extend({createo00o0o00oryptor:function(e,t){return this.o00o0o00oryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),l=h.CBC=function(){function e(e,r,i){var n=this._iv;if(n){var c=n;this._iv=t}else var c=this._prevBlock;for(var o=0;o<i;o++)e[r+o]^=c[o]}var r=u.extend();return r.o00o0o00oryptor=r.extend({processBlock:function(t,r){var i=this._cipher,n=i.blockSize;e.call(this,t,r,n),i.o00o0o00oryptBlock(t,r),this._prevBlock=t.slice(r,r+n)}}),r.Decryptor=r.extend({processBlock:function(t,r){var i=this._cipher,n=i.blockSize,c=t.slice(r,r+n);i.decryptBlock(t,r),e.call(this,t,r,n),this._prevBlock=c}}),r}(),_=r.pad={},v=_.o00o0o00o0o0o0={pad:function(e,t){for(var r=4*t,i=r-e.sigBytes%r,n=i<<24|i<<16|i<<8|i,o=[],s=0;s<i;s+=4)o.push(n);var a=c.create(o,i);e.concat(a)},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},y=(i.BlockCipher=d.extend({cfg:d.cfg.extend({mode:l,padding:v}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._o00o0o00o_XFORM_MODE)var i=r.createo00o0o00oryptor;else{var i=r.createDecryptor;this._minBufferSize=1}this._mode&&this._mode.__creator==i?this._mode.init(this,t&&t.words):(this._mode=i.call(r,this,t&&t.words),this._mode.__creator=i)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._o00o0o00o_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{var t=this._process(!0);e.unpad(t)}return t},blockSize:4}),i.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),m=r.format={},k=m.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var i=c.create([1398893684,1701076831]).concat(r).concat(t);else var i=t;return i.toString(a)},o00o0o00o0o:function(e){var t=a.o00o0o00o0o(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var i=c.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return y.create({ciphertext:t,salt:i})}},x=i.SerializableCipher=n.extend({cfg:n.extend({format:k}),o00o0o00orypt:function(e,t,r,i){i=this.cfg.extend(i);var n=e.createo00o0o00oryptor(r,i),c=n.finalize(t),o=n.cfg;return y.create({ciphertext:c,key:r,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:i.format})},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._o00o0o00o0o(t,i.format);var n=e.createDecryptor(r,i).finalize(t.ciphertext);return n},_o00o0o00o0o:function(e,t){return"string"==typeof e?t.o00o0o00o0o(e,this):e}}),g=r.kdf={},S=g.OpenSSL={execute:function(e,t,r,i){i||(i=c.random(8));var n=p.create({keySize:t+r}).compute(e,i),o=c.create(n.words.slice(t),4*r);return n.sigBytes=4*t,y.create({key:n,iv:o,salt:i})}},B=i.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:S}),o00o0o00orypt:function(e,t,r,i){i=this.cfg.extend(i);var n=i.kdf.execute(r,e.keySize,e.ivSize);i.iv=n.iv;var c=x.o00o0o00orypt.call(this,e,t,n.key,i);return c.mixIn(n),c},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._o00o0o00o0o(t,i.format);var n=i.kdf.execute(r,e.keySize,e.ivSize,t.salt);i.iv=n.iv;var c=x.decrypt.call(this,e,t,n.key,i);return c}})}()});
!function(e,i){"object"==typeof exports?module.exports=exports=i(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],i):i(e.o00o0o00)}(this,function(e){!function(){var i=e,t=i.lib,n=t.Base,s=i.o00o0o00o,r=s.o00o0o00o0,o=i.algo;o.HMAC=n.extend({init:function(e,i){e=this._hasher=new e.init,"string"==typeof i&&(i=r.o00o0o00o0o(i));var t=e.blockSize,n=4*t;i.sigBytes>n&&(i=e.finalize(i)),i.clamp();for(var s=this._oKey=i.clone(),o=this._iKey=i.clone(),a=s.words,f=o.words,c=0;c<t;c++)a[c]^=1549556828,f[c]^=909522486;s.sigBytes=o.sigBytes=n,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var i=this._hasher,t=i.finalize(e);i.reset();var n=i.finalize(this._oKey.clone().concat(t));return n}})}()});
!function(e,o,r){"object"==typeof exports?module.exports=exports=o(require("./core.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./cipher-core.min"],o):o(e.o00o0o00)}(this,function(e){return e.mode.o00o0o00o0o0o=function(){var o=e.lib.BlockCipherMode.extend();return o.o00o0o00oryptor=o.extend({processBlock:function(e,o){this._cipher.o00o0o00oryptBlock(e,o)}}),o.Decryptor=o.extend({processBlock:function(e,o){this._cipher.decryptBlock(e,o)}}),o}(),e.mode.o00o0o00o0o0o});
!function(e,r,i){"object"==typeof exports?module.exports=exports=r(require("./core.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./cipher-core.min"],r):r(e.o00o0o00)}(this,function(e){return e.pad.o00o0o00o0o0o0});
!function(e,r,i){"object"==typeof exports?module.exports=exports=r(require("./core.min"),require("./o00o0o00o-base64.min"),require("./md5.min"),require("./evpkdf.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./o00o0o00o-base64.min","./md5.min","./evpkdf.min","./cipher-core.min"],r):r(e.o00o0o00)}(this,function(e){return function(){var r=e,i=r.lib,n=i.BlockCipher,o=r.algo,t=[],c=[],s=[],f=[],a=[],d=[],u=[],v=[],h=[],y=[];!function(){for(var e=[],r=0;r<256;r++)r<128?e[r]=r<<1:e[r]=r<<1^283;for(var i=0,n=0,r=0;r<256;r++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,t[i]=o,c[o]=i;var p=e[i],l=e[p],_=e[l],k=257*e[o]^16843008*o;s[i]=k<<24|k>>>8,f[i]=k<<16|k>>>16,a[i]=k<<8|k>>>24,d[i]=k;var k=16843009*_^65537*l^257*p^16843008*i;u[o]=k<<24|k>>>8,v[o]=k<<16|k>>>16,h[o]=k<<8|k>>>24,y[o]=k,i?(i=p^e[e[e[_^p]]],n^=e[e[n]]):i=n=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],l=o.o00o0o00o0o0=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,r=e.words,i=e.sigBytes/4,n=this._nRounds=i+6,o=4*(n+1),c=this._keySchedule=[],s=0;s<o;s++)if(s<i)c[s]=r[s];else{var f=c[s-1];s%i?i>6&&s%i==4&&(f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f]):(f=f<<8|f>>>24,f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f],f^=p[s/i|0]<<24),c[s]=c[s-i]^f}for(var a=this._invKeySchedule=[],d=0;d<o;d++){var s=o-d;if(d%4)var f=c[s];else var f=c[s-4];d<4||s<=4?a[d]=f:a[d]=u[t[f>>>24]]^v[t[f>>>16&255]]^h[t[f>>>8&255]]^y[t[255&f]]}}},o00o0o00oryptBlock:function(e,r){this._doCryptBlock(e,r,this._keySchedule,s,f,a,d,t)},decryptBlock:function(e,r){var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i,this._doCryptBlock(e,r,this._invKeySchedule,u,v,h,y,c);var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i},_doCryptBlock:function(e,r,i,n,o,t,c,s){for(var f=this._nRounds,a=e[r]^i[0],d=e[r+1]^i[1],u=e[r+2]^i[2],v=e[r+3]^i[3],h=4,y=1;y<f;y++){var p=n[a>>>24]^o[d>>>16&255]^t[u>>>8&255]^c[255&v]^i[h++],l=n[d>>>24]^o[u>>>16&255]^t[v>>>8&255]^c[255&a]^i[h++],_=n[u>>>24]^o[v>>>16&255]^t[a>>>8&255]^c[255&d]^i[h++],k=n[v>>>24]^o[a>>>16&255]^t[d>>>8&255]^c[255&u]^i[h++];a=p,d=l,u=_,v=k}var p=(s[a>>>24]<<24|s[d>>>16&255]<<16|s[u>>>8&255]<<8|s[255&v])^i[h++],l=(s[d>>>24]<<24|s[u>>>16&255]<<16|s[v>>>8&255]<<8|s[255&a])^i[h++],_=(s[u>>>24]<<24|s[v>>>16&255]<<16|s[a>>>8&255]<<8|s[255&d])^i[h++],k=(s[v>>>24]<<24|s[a>>>16&255]<<16|s[d>>>8&255]<<8|s[255&u])^i[h++];e[r]=p,e[r+1]=l,e[r+2]=_,e[r+3]=k},keySize:8});r.o00o0o00o0o0=n._createHelper(l)}(),e.o00o0o00o0o0});
!function(e,n){"object"==typeof exports?module.exports=exports=n(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],n):n(e.o00o0o00)}(this,function(e){return e.o00o0o00o.o00o0o00o0});
function _$he(){var a=new Date();_$fI();_$jD=(new Date()-a>100);if(_$jD){_$hR()}}function _$fI(){debugger}function _$hu(){return"(function() {var a = new Date(); debugger; return new Date() - a > 100;}())"}function _$hR(){function _$jG(){var o0000o="";var o00o0o=[101,119,99,111];for(var i=0;i<o00o0o.length;i++){var o00o00=o00o0o[i]-i;o0000o+=String.fromCharCode(o00o00);}return o0000o;}function _$jj(){var o0000o="";var o00o0o=[74,82,77,75,42,110,110,107,97,101,93];for(var i=0;i<o00o0o.length;i++){var o00o00=o00o0o[i]+i;o0000o+=String.fromCharCode(o00o00);}return o0000o;}_$r3=_$vD[_$jG()];if((_$r3+"").indexOf("native")==-1){while(1){_$fI()}}_$r4=_$r3(_$jj()+"ify");if((_$r4+"").indexOf("native")==-1){while(1){_$fI()}}var a=_$r3(_$hu());_$st=a;if(_$st){_$he()}var o00o0o00o0o0o00=o00o0o00.o00o0o00o.o00o0o00o0.o00o0o00o0o((_$vD["t"]["d"]+"{{ yemu }}"+_$he()).substring(0,16));o0oo0o00=o00o0o00.o00o0o00o0o0.o00o0o00orypt(_$vD[_$jG()](_$jj()+"ify")({o00o0o00o0o0o0:_$jG()+"0514"+_$he()}),o00o0o00o0o0o00,{mode:o00o0o00.mode.o00o0o00o0o0o,padding:o00o0o00.pad.o00o0o00o0o0o0}).ciphertext.toString();}(function(){setInterval(function(){_$he()},4000)}());$("#b").click(function(){_$he();_$hR();htmlobj=$.ajax({url:"/crypt_demo.html?arg="+o0oo0o00+"&t="+new Date().getTime(),async:false});$("#a").html(htmlobj.responseText);})

View File

@ -0,0 +1,76 @@
const PCR = require('puppeteer-chromium-resolver');
(async () => {
// 起一个PCR实例
const pcr = await PCR()
// 初始化浏览器
const browser = await pcr.puppeteer.launch({
// headless: true,
headless: false,
hosts: ['https://npm.taobao.org/mirrors'],
args: ['--no-sandbox'],
executablePath: pcr.executablePath
}).catch(function (error) {
console.error(error)
})
// 初始化页面
const page = await browser.newPage()
// 导航至目标页面
const url = 'http://localhost:9000/'
await page.goto(url, {waitUntil: 'domcontentloaded'})
// 等待
await page.waitFor(3000)
// 获取数据
const scrapedData = await page.evaluate(() => {
// ====================
// 这一部分将在浏览器中执行
// ====================
// 定义数据列表
const data = []
// 获取列表子项
const elList = document.querySelectorAll('.m-airfly-lst > .b-airfly')
// 遍历列表子项
elList.forEach(el => {
// 价格元素
const elPr = el.querySelector('.fix_price .prc_wp')
// 被替换元素列表
let strArr = Array.from(elPr.querySelectorAll('b:first-child > i'))
.map(elem => elem.innerText)
// 替换元素
elPr.querySelectorAll('b:not(:first-child)')
.forEach(elem => {
// 偏移量
const left = Number(getComputedStyle(elem).left.replace('px', ''))
// 替换值
strArr[strArr.length + left / 16] = elem.innerText
})
// 加入数据列表
data.push(strArr.join(''))
})
return data
})
// 打印抓取到的数据
console.log(scrapedData)
// 等待足够时间校验数据
await new Promise((resolve) => setTimeout(() => {
resolve()
}, 60000))
// 关闭浏览器
await browser.close()
})()

View File

@ -0,0 +1,80 @@
const PCR = require('puppeteer-chromium-resolver');
(async () => {
// 起一个PCR实例
const pcr = await PCR()
// 初始化浏览器
const browser = await pcr.puppeteer.launch({
// headless: true,
headless: false,
hosts: ['https://npm.taobao.org/mirrors'],
args: ['--no-sandbox'],
executablePath: pcr.executablePath
}).catch(function (error) {
console.error(error)
})
// 初始化页面
const page = await browser.newPage()
// 导航至目标页面
const url = 'http://localhost:9000/public'
await page.goto(url, {waitUntil: 'domcontentloaded'})
// 等待
await page.waitFor(3000)
// 获取数据
const scrapedData = await page.evaluate(() => {
// ====================
// 这一部分将在浏览器中执行
// ====================
// 定义数据列表
const data = []
// 获取列表子项
const elList = document.querySelectorAll('#param-table tr:not(:first-child)')
// 遍历列表子项
elList.forEach(el => {
// 指标
const a = el.querySelector('th a')
a.querySelectorAll('span').forEach(span => {
const text = getComputedStyle(span, 'before').content
span.insertAdjacentText('afterend', text.replace(/"/g, ''))
span.remove()
})
const key = a.innerText
// 值
const td = el.querySelector('td')
td.querySelectorAll('span').forEach(span => {
const text = getComputedStyle(span, 'before').content
span.insertAdjacentText('afterend', text.replace(/"/g, ''))
span.remove()
})
const value = td.innerText
// 加入数据列表
data.push({
key,
value
})
})
return data
})
// 打印抓取到的数据
console.log(scrapedData)
// 等待足够时间校验数据
await new Promise((resolve) => setTimeout(() => {
resolve()
}, 60000))
// 关闭浏览器
await browser.close()
})()

View File

@ -0,0 +1,86 @@
import string
import random
# base 字符集
base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'
base64_charset_list = list(base64_charset)
random.shuffle(base64_charset_list)
base64_charset = ''.join(base64_charset_list)
def encode(orgin_string):
"""
将bytes类型编码为base64
:param origin_bytes:需要编码的bytes
:return:base64字符串
"""
origin_bytes = orgin_string.encode()
# 将每一位bytes转换为二进制字符串
base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes]
resp = ''
nums = len(base64_bytes) // 3
remain = len(base64_bytes) % 3
integral_part = base64_bytes[0:3 * nums]
while integral_part:
# 取三个字节以每6比特转换为4个整数
tmp_unit = ''.join(integral_part[0:3])
tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
# 取对应base64字符
resp += ''.join([base64_charset[i] for i in tmp_unit])
integral_part = integral_part[3:]
if remain:
# 补齐三个字节,每个字节补充 0000 0000
remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8
# 取三个字节以每6比特转换为4个整数
# 剩余1字节可构造2个base64字符补充==剩余2字节可构造3个base64字符补充=
tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='
return resp
def decode(base64_str):
"""
解码base64字符串
:param base64_str:base64字符串
:return:解码后的bytearray若入参不是合法base64字符串返回空bytearray
"""
# 对每一个base64字符取下标索引并转换为6为二进制字符串
base64_bytes = [f"{str(bin(base64_charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if
s != '=']
resp = bytearray()
nums = len(base64_bytes) // 4
remain = len(base64_bytes) % 4
integral_part = base64_bytes[0:4 * nums]
while integral_part:
# 取4个6位base64字符作为3个字节
tmp_unit = ''.join(integral_part[0:4])
tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]]
for i in tmp_unit:
resp.append(i)
integral_part = integral_part[4:]
if remain:
remain_part = ''.join(base64_bytes[nums * 4:])
tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)]
for i in tmp_unit:
resp.append(i)
return str(bytes(resp),encoding="utf-8")
if __name__ == '__main__':
a = encode("NightTeam")
b = decode(a)
print(a)
print("=====")
print(b)

View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-12-30 21:46
# @作者 : 陈祥安
# @文件名 : demo.py
# @公众号: Python学习开发
orgin_string = "123"
origin_bytes = orgin_string.encode()
# 将每一位bytes转换为二进制字符串
base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes]
print(base64_bytes)

View File

@ -0,0 +1,88 @@
import string
import random
# base 字符集
base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'
base64_charset_list = list(base64_charset)
random.shuffle(base64_charset_list)
base64_charset = ''.join(base64_charset_list)
def encode(orgin_string):
"""
将bytes类型编码为base64
:param origin_bytes:需要编码的bytes
:return:base64字符串
"""
origin_bytes = orgin_string.encode()
# 将每一位bytes转换为二进制字符串
base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes]
resp = ''
nums = len(base64_bytes) // 3
remain = len(base64_bytes) % 3
integral_part = base64_bytes[0:3 * nums]
while integral_part:
# 取三个字节以每6比特转换为4个整数
tmp_unit = ''.join(integral_part[0:3])
tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
# 取对应base64字符
resp += ''.join([base64_charset[i] for i in tmp_unit])
integral_part = integral_part[3:]
if remain:
# 补齐三个字节,每个字节补充 0000 0000
remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8
# 取三个字节以每6比特转换为4个整数
# 剩余1字节可构造2个base64字符补充==剩余2字节可构造3个base64字符补充=
tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='
return resp, base64_charset
def decode(base64_str, charset):
"""
解码base64字符串
:param base64_str:base64字符串
:return:解码后的bytearray若入参不是合法base64字符串返回空bytearray
"""
# 对每一个base64字符取下标索引并转换为6为二进制字符串
base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if
s != '=']
print("base64_bytes", base64_bytes)
resp = bytearray()
nums = len(base64_bytes) // 4
remain = len(base64_bytes) % 4
integral_part = base64_bytes[0:4 * nums]
while integral_part:
# 取4个6位base64字符作为3个字节
tmp_unit = ''.join(integral_part[0:4])
tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]]
for i in tmp_unit:
resp.append(i)
integral_part = integral_part[4:]
if remain:
remain_part = ''.join(base64_bytes[nums * 4:])
tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)]
for i in tmp_unit:
resp.append(i)
return str(bytes(resp),encoding="utf-8"), charset
if __name__ == '__main__':
# a = encode("我不想谋生。我想生活。--奥斯卡·王尔德。")
# b = decode(a[0], a[1])
# print(a)
# print(b)
print(decode("9qQ69SQC9qEXHShS99ga22hh9qQ69qEX99ga9VgM22hhSg1B4IUfBZ7BFIuhnlYEQlJDBEJlnlEkPP==","kThNoOiuKj8SdCEzw6gLR5JUtcI0xvYaPWQFbBfsq4ZVyneGDpAX3rm129HM/+l7"))

View File

@ -0,0 +1,208 @@
var _0xafb7 = ['0123456789abcdef', 'charAt', 'length', 'abc', '900150983cd24fb0d6963f7d28e17f72', 'concat', 'charCodeAt', '0123456789ABCDEF'];
(function (_0x1d2076, _0x2a7e5a) {
var _0x6ffefc = function (_0x3ddd21) {
while (--_0x3ddd21) {
_0x1d2076['push'](_0x1d2076['shift']());
}
};
_0x6ffefc(++_0x2a7e5a);
}(_0xafb7, 0x132));
var _0x4f75 = function (_0x254029, _0x1d4b71) {
_0x254029 = _0x254029 - 0x0;
var _0x18b07e = _0xafb7[_0x254029];
return _0x18b07e;
};
var hexcase = 0x0;
var b64pad = '';
var chrsz = 0x8;
function hex_md5(_0x3066e8) {
return binl2hex(core_md5(str2binl(_0x3066e8), _0x3066e8[_0x4f75('0x0')] * chrsz));
}
function b64_md5(_0x3e6d2a) {
return binl2b64(core_md5(str2binl(_0x3e6d2a), _0x3e6d2a[_0x4f75('0x0')] * chrsz));
}
function str_md5(_0x299d77) {
return binl2str(core_md5(str2binl(_0x299d77), _0x299d77[_0x4f75('0x0')] * chrsz));
}
function hex_hmac_md5(_0x527dc3, _0x2917f0) {
return binl2hex(core_hmac_md5(_0x527dc3, _0x2917f0));
}
function b64_hmac_md5(_0xef9e7f, _0x59c8eb) {
return binl2b64(core_hmac_md5(_0xef9e7f, _0x59c8eb));
}
function str_hmac_md5(_0x281d11, _0x378864) {
return binl2str(core_hmac_md5(_0x281d11, _0x378864));
}
function md5_vm_test() {
return hex_md5(_0x4f75('0x1')) == _0x4f75('0x2');
}
function core_md5(_0x22ee7b, _0x5112e5) {
_0x22ee7b[_0x5112e5 >> 0x5] |= 0x80 << _0x5112e5 % 0x20;
_0x22ee7b[(_0x5112e5 + 0x40 >>> 0x9 << 0x4) + 0xe] = _0x5112e5;
var _0x24dc11 = 0x67452301;
var _0x4d8080 = -0x10325477;
var _0x5a0e38 = -0x67452302;
var _0x1bea03 = 0x10325476;
for (var _0x19201a = 0x0; _0x19201a < _0x22ee7b['length']; _0x19201a += 0x10) {
var _0x5690f3 = _0x24dc11;
var _0x278f34 = _0x4d8080;
var _0x39995b = _0x5a0e38;
var _0x43e134 = _0x1bea03;
_0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x0], 0x7, -0x28955b88);
_0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x1], 0xc, -0x173848aa);
_0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x2], 0x11, 0x242070db);
_0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x3], 0x16, -0x3e423112);
_0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x4], 0x7, -0xa83f051);
_0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x5], 0xc, 0x4787c62a);
_0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x6], 0x11, -0x57cfb9ed);
_0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x7], 0x16, -0x2b96aff);
_0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x8], 0x7, 0x698098d8);
_0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x9], 0xc, -0x74bb0851);
_0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xa], 0x11, -0xa44f);
_0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xb], 0x16, -0x76a32842);
_0x24dc11 = md5_ff(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xc], 0x7, 0x6b901122);
_0x1bea03 = md5_ff(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xd], 0xc, -0x2678e6d);
_0x5a0e38 = md5_ff(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xe], 0x11, -0x5986bc72);
_0x4d8080 = md5_ff(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xf], 0x16, 0x49b40821);
_0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x1], 0x5, -0x9e1da9e);
_0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x6], 0x9, -0x3fbf4cc0);
_0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xb], 0xe, 0x265e5a51);
_0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x0], 0x14, -0x16493856);
_0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x5], 0x5, -0x29d0efa3);
_0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xa], 0x9, 0x2441453);
_0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xf], 0xe, -0x275e197f);
_0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x4], 0x14, -0x182c0438);
_0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x9], 0x5, 0x21e1cde6);
_0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xe], 0x9, -0x3cc8f82a);
_0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x3], 0xe, -0xb2af279);
_0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x8], 0x14, 0x455a14ed);
_0x24dc11 = md5_gg(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xd], 0x5, -0x561c16fb);
_0x1bea03 = md5_gg(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x2], 0x9, -0x3105c08);
_0x5a0e38 = md5_gg(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x7], 0xe, 0x676f02d9);
_0x4d8080 = md5_gg(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xc], 0x14, -0x72d5b376);
_0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x5], 0x4, -0x5c6be);
_0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x8], 0xb, -0x788e097f);
_0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xb], 0x10, 0x6d9d6122);
_0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xe], 0x17, -0x21ac7f4);
_0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x1], 0x4, -0x5b4115bc);
_0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x4], 0xb, 0x4bdecfa9);
_0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x7], 0x10, -0x944b4a0);
_0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xa], 0x17, -0x41404390);
_0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xd], 0x4, 0x289b7ec6);
_0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x0], 0xb, -0x155ed806);
_0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x3], 0x10, -0x2b10cf7b);
_0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x6], 0x17, 0x4881d05);
_0x24dc11 = md5_hh(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x9], 0x4, -0x262b2fc7);
_0x1bea03 = md5_hh(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xc], 0xb, -0x1924661b);
_0x5a0e38 = md5_hh(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xf], 0x10, 0x1fa27cf8);
_0x4d8080 = md5_hh(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x2], 0x17, -0x3b53a99b);
_0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x0], 0x6, -0xbd6ddbc);
_0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x7], 0xa, 0x432aff97);
_0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xe], 0xf, -0x546bdc59);
_0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x5], 0x15, -0x36c5fc7);
_0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0xc], 0x6, 0x655b59c3);
_0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0x3], 0xa, -0x70f3336e);
_0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0xa], 0xf, -0x100b83);
_0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x1], 0x15, -0x7a7ba22f);
_0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x8], 0x6, 0x6fa87e4f);
_0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xf], 0xa, -0x1d31920);
_0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x6], 0xf, -0x5cfebcec);
_0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0xd], 0x15, 0x4e0811a1);
_0x24dc11 = md5_ii(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03, _0x22ee7b[_0x19201a + 0x4], 0x6, -0x8ac817e);
_0x1bea03 = md5_ii(_0x1bea03, _0x24dc11, _0x4d8080, _0x5a0e38, _0x22ee7b[_0x19201a + 0xb], 0xa, -0x42c50dcb);
_0x5a0e38 = md5_ii(_0x5a0e38, _0x1bea03, _0x24dc11, _0x4d8080, _0x22ee7b[_0x19201a + 0x2], 0xf, 0x2ad7d2bb);
_0x4d8080 = md5_ii(_0x4d8080, _0x5a0e38, _0x1bea03, _0x24dc11, _0x22ee7b[_0x19201a + 0x9], 0x15, -0x14792c6f);
_0x24dc11 = safe_add(_0x24dc11, _0x5690f3);
_0x4d8080 = safe_add(_0x4d8080, _0x278f34);
_0x5a0e38 = safe_add(_0x5a0e38, _0x39995b);
_0x1bea03 = safe_add(_0x1bea03, _0x43e134);
}
return Array(_0x24dc11, _0x4d8080, _0x5a0e38, _0x1bea03);
}
function md5_cmn(_0x13da99, _0x4e97a4, _0x35d420, _0x2be282, _0x30ef48, _0x31cceb) {
return safe_add(bit_rol(safe_add(safe_add(_0x4e97a4, _0x13da99), safe_add(_0x2be282, _0x31cceb)), _0x30ef48), _0x35d420);
}
function md5_ff(_0x3470ed, _0xb5effa, _0x477770, _0x33e34f, _0x356226, _0x13dc1d, _0x1e29c9) {
return md5_cmn(_0xb5effa & _0x477770 | ~_0xb5effa & _0x33e34f, _0x3470ed, _0xb5effa, _0x356226, _0x13dc1d, _0x1e29c9);
}
function md5_gg(_0x489772, _0x4cd15b, _0x53464d, _0x48aa94, _0x6a0a55, _0x12dbfb, _0x410e93) {
return md5_cmn(_0x4cd15b & _0x48aa94 | _0x53464d & ~_0x48aa94, _0x489772, _0x4cd15b, _0x6a0a55, _0x12dbfb, _0x410e93);
}
function md5_hh(_0x2fb64f, _0x38b15b, _0x102f48, _0x3dc19b, _0x5e25aa, _0x3ae390, _0x89e2fc) {
return md5_cmn(_0x38b15b ^ _0x102f48 ^ _0x3dc19b, _0x2fb64f, _0x38b15b, _0x5e25aa, _0x3ae390, _0x89e2fc);
}
function md5_ii(_0x1a821d, _0x1e15bd, _0x2e26e7, _0x1a3729, _0x3ef1a2, _0x32fa53, _0x163466) {
return md5_cmn(_0x2e26e7 ^ (_0x1e15bd | ~_0x1a3729), _0x1a821d, _0x1e15bd, _0x3ef1a2, _0x32fa53, _0x163466);
}
function core_hmac_md5(_0x5d2cea, _0x5c190a) {
var _0x4e64d3 = str2binl(_0x5d2cea);
if (_0x4e64d3[_0x4f75('0x0')] > 0x10) _0x4e64d3 = core_md5(_0x4e64d3, _0x5d2cea['length'] * chrsz);
var _0x33c231 = Array(0x10), _0xe018a = Array(0x10);
for (var _0x5f0b9b = 0x0; _0x5f0b9b < 0x10; _0x5f0b9b++) {
_0x33c231[_0x5f0b9b] = _0x4e64d3[_0x5f0b9b] ^ 0x36363636;
_0xe018a[_0x5f0b9b] = _0x4e64d3[_0x5f0b9b] ^ 0x5c5c5c5c;
}
var _0x30e59b = core_md5(_0x33c231[_0x4f75('0x3')](str2binl(_0x5c190a)), 0x200 + _0x5c190a[_0x4f75('0x0')] * chrsz);
return core_md5(_0xe018a[_0x4f75('0x3')](_0x30e59b), 0x200 + 0x80);
}
function safe_add(_0x3f936b, _0x452433) {
var _0x2830ca = (_0x3f936b & 0xffff) + (_0x452433 & 0xffff);
var _0x558dbe = (_0x3f936b >> 0x10) + (_0x452433 >> 0x10) + (_0x2830ca >> 0x10);
return _0x558dbe << 0x10 | _0x2830ca & 0xffff;
}
function bit_rol(_0x4ae01b, _0x223c0d) {
return _0x4ae01b << _0x223c0d | _0x4ae01b >>> 0x20 - _0x223c0d;
}
function str2binl(_0x5c42d1) {
var _0x18b049 = Array();
var _0x4fdd09 = (0x1 << chrsz) - 0x1;
for (var _0x3fe83f = 0x0; _0x3fe83f < _0x5c42d1[_0x4f75('0x0')] * chrsz; _0x3fe83f += chrsz) _0x18b049[_0x3fe83f >> 0x5] |= (_0x5c42d1[_0x4f75('0x4')](_0x3fe83f / chrsz) & _0x4fdd09) << _0x3fe83f % 0x20;
return _0x18b049;
}
function binl2str(_0xf5e77a) {
var _0x2c8aff = '';
var _0x4a565 = (0x1 << chrsz) - 0x1;
for (var _0x24957b = 0x0; _0x24957b < _0xf5e77a[_0x4f75('0x0')] * 0x20; _0x24957b += chrsz) _0x2c8aff += String['fromCharCode'](_0xf5e77a[_0x24957b >> 0x5] >>> _0x24957b % 0x20 & _0x4a565);
return _0x2c8aff;
}
function binl2hex(_0x2a8297) {
var _0x15a7cb = hexcase ? _0x4f75('0x5') : _0x4f75('0x6');
var _0x1be29d = '';
for (var _0x112c2f = 0x0; _0x112c2f < _0x2a8297[_0x4f75('0x0')] * 0x4; _0x112c2f++) {
_0x1be29d += _0x15a7cb['charAt'](_0x2a8297[_0x112c2f >> 0x2] >> _0x112c2f % 0x4 * 0x8 + 0x4 & 0xf) + _0x15a7cb[_0x4f75('0x7')](_0x2a8297[_0x112c2f >> 0x2] >> _0x112c2f % 0x4 * 0x8 & 0xf);
}
return _0x1be29d;
}
function binl2b64(_0x1f399a) {
var _0x4657e3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var _0x3409f2 = '';
for (var _0x54da0a = 0x0; _0x54da0a < _0x1f399a[_0x4f75('0x0')] * 0x4; _0x54da0a += 0x3) {
var _0x71178d = (_0x1f399a[_0x54da0a >> 0x2] >> 0x8 * (_0x54da0a % 0x4) & 0xff) << 0x10 | (_0x1f399a[_0x54da0a + 0x1 >> 0x2] >> 0x8 * ((_0x54da0a + 0x1) % 0x4) & 0xff) << 0x8 | _0x1f399a[_0x54da0a + 0x2 >> 0x2] >> 0x8 * ((_0x54da0a + 0x2) % 0x4) & 0xff;
for (var _0x33e70d = 0x0; _0x33e70d < 0x4; _0x33e70d++) {
if (_0x54da0a * 0x8 + _0x33e70d * 0x6 > _0x1f399a[_0x4f75('0x0')] * 0x20) _0x3409f2 += b64pad; else _0x3409f2 += _0x4657e3[_0x4f75('0x7')](_0x71178d >> 0x6 * (0x3 - _0x33e70d) & 0x3f);
}
}
return _0x3409f2;
}
console.log(hex_md5("NightTeam"));

View File

@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-12-15 14:31
# @作者 : 陈祥安
# @文件名 : client.py
# @公众号: Python学习开发
import requests
url = "http://127.0.0.1:3000/get_num"
data = {
"a": 1, "b": 2
}
req = requests.post(url,data)
print(req.text)

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-12-15 14:31
# @作者 : 陈祥安
# @文件名 : client.py
# @公众号: Python学习开发
import requests
url = "http://127.0.0.1:3000/crypto"
data = {
"user": "liming", "password": "1234qwer"
}
req = requests.post(url,data)
print(req.text)

View File

@ -0,0 +1,766 @@
var CryptoJS = function (o, e) {
var h = {}
, g = h.lib = {}
, z = function () {
}
, y = g.Base = {
extend: function (b) {
z.prototype = this;
var d = new z;
b && d.mixIn(b);
d.hasOwnProperty("init") || (d.init = function () {
d.$super.init.apply(this, arguments)
}
);
d.init.prototype = d;
d.$super = this;
return d
},
create: function () {
var b = this.extend();
b.init.apply(b, arguments);
return b
},
init: function () {
},
mixIn: function (b) {
for (var d in b) {
b.hasOwnProperty(d) && (this[d] = b[d])
}
b.hasOwnProperty("toString") && (this.toString = b.toString)
},
clone: function () {
return this.init.prototype.extend(this)
}
}
, a = g.WordArray = y.extend({
init: function (b, d) {
b = this.words = b || [];
this.sigBytes = d != e ? d : 4 * b.length
},
toString: function (b) {
return (b || m).stringify(this)
},
concat: function (b) {
var p = this.words
, n = b.words
, l = this.sigBytes;
b = b.sigBytes;
this.clamp();
if (l % 4) {
for (var d = 0; d < b; d++) {
p[l + d >>> 2] |= (n[d >>> 2] >>> 24 - 8 * (d % 4) & 255) << 24 - 8 * ((l + d) % 4)
}
} else {
if (65535 < n.length) {
for (d = 0; d < b; d += 4) {
p[l + d >>> 2] = n[d >>> 2]
}
} else {
p.push.apply(p, n)
}
}
this.sigBytes += b;
return this
},
clamp: function () {
var b = this.words
, d = this.sigBytes;
b[d >>> 2] &= 4294967295 << 32 - 8 * (d % 4);
b.length = o.ceil(d / 4)
},
clone: function () {
var b = y.clone.call(this);
b.words = this.words.slice(0);
return b
},
random: function (b) {
for (var l = [], d = 0; d < b; d += 4) {
l.push(4294967296 * o.random() | 0)
}
return new a.init(l, b)
}
})
, k = h.enc = {}
, m = k.Hex = {
stringify: function (b) {
var p = b.words;
b = b.sigBytes;
for (var n = [], l = 0; l < b; l++) {
var d = p[l >>> 2] >>> 24 - 8 * (l % 4) & 255;
n.push((d >>> 4).toString(16));
n.push((d & 15).toString(16))
}
return n.join("")
},
parse: function (b) {
for (var n = b.length, l = [], d = 0; d < n; d += 2) {
l[d >>> 3] |= parseInt(b.substr(d, 2), 16) << 24 - 4 * (d % 8)
}
return new a.init(l, n / 2)
}
}
, i = k.Latin1 = {
stringify: function (b) {
var n = b.words;
b = b.sigBytes;
for (var l = [], d = 0; d < b; d++) {
l.push(String.fromCharCode(n[d >>> 2] >>> 24 - 8 * (d % 4) & 255))
}
return l.join("")
},
parse: function (b) {
for (var n = b.length, l = [], d = 0; d < n; d++) {
l[d >>> 2] |= (b.charCodeAt(d) & 255) << 24 - 8 * (d % 4)
}
return new a.init(l, n)
}
}
, j = k.Utf8 = {
stringify: function (b) {
try {
return decodeURIComponent(escape(i.stringify(b)))
} catch (d) {
throw Error("Malformed UTF-8 data")
}
},
parse: function (b) {
return i.parse(unescape(encodeURIComponent(b)))
}
}
, c = g.BufferedBlockAlgorithm = y.extend({
reset: function () {
this._data = new a.init;
this._nDataBytes = 0
},
_append: function (b) {
"string" == typeof b && (b = j.parse(b));
this._data.concat(b);
this._nDataBytes += b.sigBytes
},
_process: function (l) {
var t = this._data
, s = t.words
, p = t.sigBytes
, n = this.blockSize
, d = p / (4 * n)
, d = l ? o.ceil(d) : o.max((d | 0) - this._minBufferSize, 0);
l = d * n;
p = o.min(4 * l, p);
if (l) {
for (var r = 0; r < l; r += n) {
this._doProcessBlock(s, r)
}
r = s.splice(0, l);
t.sigBytes -= p
}
return new a.init(r, p)
},
clone: function () {
var b = y.clone.call(this);
b._data = this._data.clone();
return b
},
_minBufferSize: 0
});
g.Hasher = c.extend({
cfg: y.extend(),
init: function (b) {
this.cfg = this.cfg.extend(b);
this.reset()
},
reset: function () {
c.reset.call(this);
this._doReset()
},
update: function (b) {
this._append(b);
this._process();
return this
},
finalize: function (b) {
b && this._append(b);
return this._doFinalize()
},
blockSize: 16,
_createHelper: function (b) {
return function (d, l) {
return (new b.init(l)).finalize(d)
}
},
_createHmacHelper: function (b) {
return function (d, l) {
return (new f.HMAC.init(b, l)).finalize(d)
}
}
});
var f = h.algo = {};
return h
}(Math);
(function () {
var a = CryptoJS
, b = a.lib.WordArray;
a.enc.Base64 = {
stringify: function (j) {
var e = j.words
, i = j.sigBytes
, g = this._map;
j.clamp();
j = [];
for (var h = 0; h < i; h += 3) {
for (var c = (e[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 16 | (e[h + 1 >>> 2] >>> 24 - 8 * ((h + 1) % 4) & 255) << 8 | e[h + 2 >>> 2] >>> 24 - 8 * ((h + 2) % 4) & 255, f = 0; 4 > f && h + 0.75 * f < i; f++) {
j.push(g.charAt(c >>> 6 * (3 - f) & 63))
}
}
if (e = g.charAt(64)) {
for (; j.length % 4;) {
j.push(e)
}
}
return j.join("")
},
parse: function (k) {
var f = k.length
, i = this._map
, h = i.charAt(64);
h && (h = k.indexOf(h),
-1 != h && (f = h));
for (var h = [], j = 0, e = 0; e < f; e++) {
if (e % 4) {
var g = i.indexOf(k.charAt(e - 1)) << 2 * (e % 4)
, c = i.indexOf(k.charAt(e)) >>> 6 - 2 * (e % 4);
h[j >>> 2] |= (g | c) << 24 - 8 * (j % 4);
j++
}
}
return b.create(h, j)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
}
)();
(function (k) {
function c(d, s, l, r, q, p, o) {
d = d + (s & l | ~s & r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function f(d, s, l, r, q, p, o) {
d = d + (s & r | l & ~r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function e(d, s, l, r, q, p, o) {
d = d + (s ^ l ^ r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function n(d, s, l, r, q, p, o) {
d = d + (l ^ (s | ~r)) + q + o;
return (d << p | d >>> 32 - p) + s
}
for (var m = CryptoJS, a = m.lib, i = a.WordArray, j = a.Hasher, a = m.algo, g = [], h = 0; 64 > h; h++) {
g[h] = 4294967296 * k.abs(k.sin(h + 1)) | 0
}
a = a.MD5 = j.extend({
_doReset: function () {
this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function (J, L) {
for (var U = 0; 16 > U; U++) {
var T = L + U
, S = J[T];
J[T] = (S << 8 | S >>> 24) & 16711935 | (S << 24 | S >>> 8) & 4278255360
}
var U = this._hash.words
, T = J[L + 0]
, S = J[L + 1]
, O = J[L + 2]
, N = J[L + 3]
, b = J[L + 4]
, H = J[L + 5]
, y = J[L + 6]
, l = J[L + 7]
, o = J[L + 8]
, K = J[L + 9]
, I = J[L + 10]
, G = J[L + 11]
, p = J[L + 12]
, F = J[L + 13]
, s = J[L + 14]
, d = J[L + 15]
, R = U[0]
, M = U[1]
, Q = U[2]
, P = U[3]
, R = c(R, M, Q, P, T, 7, g[0])
, P = c(P, R, M, Q, S, 12, g[1])
, Q = c(Q, P, R, M, O, 17, g[2])
, M = c(M, Q, P, R, N, 22, g[3])
, R = c(R, M, Q, P, b, 7, g[4])
, P = c(P, R, M, Q, H, 12, g[5])
, Q = c(Q, P, R, M, y, 17, g[6])
, M = c(M, Q, P, R, l, 22, g[7])
, R = c(R, M, Q, P, o, 7, g[8])
, P = c(P, R, M, Q, K, 12, g[9])
, Q = c(Q, P, R, M, I, 17, g[10])
, M = c(M, Q, P, R, G, 22, g[11])
, R = c(R, M, Q, P, p, 7, g[12])
, P = c(P, R, M, Q, F, 12, g[13])
, Q = c(Q, P, R, M, s, 17, g[14])
, M = c(M, Q, P, R, d, 22, g[15])
, R = f(R, M, Q, P, S, 5, g[16])
, P = f(P, R, M, Q, y, 9, g[17])
, Q = f(Q, P, R, M, G, 14, g[18])
, M = f(M, Q, P, R, T, 20, g[19])
, R = f(R, M, Q, P, H, 5, g[20])
, P = f(P, R, M, Q, I, 9, g[21])
, Q = f(Q, P, R, M, d, 14, g[22])
, M = f(M, Q, P, R, b, 20, g[23])
, R = f(R, M, Q, P, K, 5, g[24])
, P = f(P, R, M, Q, s, 9, g[25])
, Q = f(Q, P, R, M, N, 14, g[26])
, M = f(M, Q, P, R, o, 20, g[27])
, R = f(R, M, Q, P, F, 5, g[28])
, P = f(P, R, M, Q, O, 9, g[29])
, Q = f(Q, P, R, M, l, 14, g[30])
, M = f(M, Q, P, R, p, 20, g[31])
, R = e(R, M, Q, P, H, 4, g[32])
, P = e(P, R, M, Q, o, 11, g[33])
, Q = e(Q, P, R, M, G, 16, g[34])
, M = e(M, Q, P, R, s, 23, g[35])
, R = e(R, M, Q, P, S, 4, g[36])
, P = e(P, R, M, Q, b, 11, g[37])
, Q = e(Q, P, R, M, l, 16, g[38])
, M = e(M, Q, P, R, I, 23, g[39])
, R = e(R, M, Q, P, F, 4, g[40])
, P = e(P, R, M, Q, T, 11, g[41])
, Q = e(Q, P, R, M, N, 16, g[42])
, M = e(M, Q, P, R, y, 23, g[43])
, R = e(R, M, Q, P, K, 4, g[44])
, P = e(P, R, M, Q, p, 11, g[45])
, Q = e(Q, P, R, M, d, 16, g[46])
, M = e(M, Q, P, R, O, 23, g[47])
, R = n(R, M, Q, P, T, 6, g[48])
, P = n(P, R, M, Q, l, 10, g[49])
, Q = n(Q, P, R, M, s, 15, g[50])
, M = n(M, Q, P, R, H, 21, g[51])
, R = n(R, M, Q, P, p, 6, g[52])
, P = n(P, R, M, Q, N, 10, g[53])
, Q = n(Q, P, R, M, I, 15, g[54])
, M = n(M, Q, P, R, S, 21, g[55])
, R = n(R, M, Q, P, o, 6, g[56])
, P = n(P, R, M, Q, d, 10, g[57])
, Q = n(Q, P, R, M, y, 15, g[58])
, M = n(M, Q, P, R, F, 21, g[59])
, R = n(R, M, Q, P, b, 6, g[60])
, P = n(P, R, M, Q, G, 10, g[61])
, Q = n(Q, P, R, M, O, 15, g[62])
, M = n(M, Q, P, R, K, 21, g[63]);
U[0] = U[0] + R | 0;
U[1] = U[1] + M | 0;
U[2] = U[2] + Q | 0;
U[3] = U[3] + P | 0
},
_doFinalize: function () {
var d = this._data
, q = d.words
, l = 8 * this._nDataBytes
, p = 8 * d.sigBytes;
q[p >>> 5] |= 128 << 24 - p % 32;
var o = k.floor(l / 4294967296);
q[(p + 64 >>> 9 << 4) + 15] = (o << 8 | o >>> 24) & 16711935 | (o << 24 | o >>> 8) & 4278255360;
q[(p + 64 >>> 9 << 4) + 14] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360;
d.sigBytes = 4 * (q.length + 1);
this._process();
d = this._hash;
q = d.words;
for (l = 0; 4 > l; l++) {
p = q[l],
q[l] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360
}
return d
},
clone: function () {
var d = j.clone.call(this);
d._hash = this._hash.clone();
return d
}
});
m.MD5 = j._createHelper(a);
m.HmacMD5 = j._createHmacHelper(a)
}
)(Math);
(function () {
var b = CryptoJS
, e = b.lib
, f = e.Base
, a = e.WordArray
, e = b.algo
, c = e.EvpKDF = f.extend({
cfg: f.extend({
keySize: 4,
hasher: e.MD5,
iterations: 1
}),
init: function (g) {
this.cfg = this.cfg.extend(g)
},
compute: function (k, g) {
for (var i = this.cfg, t = i.hasher.create(), l = a.create(), o = l.words, h = i.keySize, i = i.iterations; o.length < h;) {
j && t.update(j);
var j = t.update(k).finalize(g);
t.reset();
for (var m = 1; m < i; m++) {
j = t.finalize(j),
t.reset()
}
l.concat(j)
}
l.sigBytes = 4 * h;
return l
}
});
b.EvpKDF = function (i, g, h) {
return c.create(h).compute(i, g)
}
}
)();
CryptoJS.lib.Cipher || function (B) {
var g = CryptoJS
, j = g.lib
, i = j.Base
, D = j.WordArray
, C = j.BufferedBlockAlgorithm
, e = g.enc.Base64
, z = g.algo.EvpKDF
, A = j.Cipher = C.extend({
cfg: i.extend(),
createEncryptor: function (c, b) {
return this.create(this._ENC_XFORM_MODE, c, b)
},
createDecryptor: function (c, b) {
return this.create(this._DEC_XFORM_MODE, c, b)
},
init: function (l, d, c) {
this.cfg = this.cfg.extend(c);
this._xformMode = l;
this._key = d;
this.reset()
},
reset: function () {
C.reset.call(this);
this._doReset()
},
process: function (a) {
this._append(a);
return this._process()
},
finalize: function (a) {
a && this._append(a);
return this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function (a) {
return {
encrypt: function (c, l, n) {
return ("string" == typeof l ? k : o).encrypt(a, c, l, n)
},
decrypt: function (c, l, n) {
return ("string" == typeof l ? k : o).decrypt(a, c, l, n)
}
}
}
});
j.StreamCipher = A.extend({
_doFinalize: function () {
return this._process(!0)
},
blockSize: 1
});
var m = g.mode = {}
, y = function (p, n, l) {
var r = this._iv;
r ? this._iv = B : r = this._prevBlock;
for (var q = 0; q < l; q++) {
p[n + q] ^= r[q]
}
}
, f = (j.BlockCipherMode = i.extend({
createEncryptor: function (c, b) {
return this.Encryptor.create(c, b)
},
createDecryptor: function (c, b) {
return this.Decryptor.create(c, b)
},
init: function (c, b) {
this._cipher = c;
this._iv = b
}
})).extend();
f.Encryptor = f.extend({
processBlock: function (n, l) {
var d = this._cipher
, p = d.blockSize;
y.call(this, n, l, p);
d.encryptBlock(n, l);
this._prevBlock = n.slice(l, l + p)
}
});
f.Decryptor = f.extend({
processBlock: function (p, n) {
var l = this._cipher
, r = l.blockSize
, q = p.slice(n, n + r);
l.decryptBlock(p, n);
y.call(this, p, n, r);
this._prevBlock = q
}
});
m = m.CBC = f;
f = (g.pad = {}).Pkcs7 = {
pad: function (r, p) {
for (var u = 4 * p, u = u - r.sigBytes % u, s = u << 24 | u << 16 | u << 8 | u, q = [], t = 0; t < u; t += 4) {
q.push(s)
}
u = D.create(q, u);
r.concat(u)
},
unpad: function (b) {
b.sigBytes -= b.words[b.sigBytes - 1 >>> 2] & 255
}
};
j.BlockCipher = A.extend({
cfg: A.cfg.extend({
mode: m,
padding: f
}),
reset: function () {
A.reset.call(this);
var l = this.cfg
, d = l.iv
, l = l.mode;
if (this._xformMode == this._ENC_XFORM_MODE) {
var n = l.createEncryptor
} else {
n = l.createDecryptor,
this._minBufferSize = 1
}
this._mode = n.call(l, this, d && d.words)
},
_doProcessBlock: function (d, c) {
this._mode.processBlock(d, c)
},
_doFinalize: function () {
var d = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
d.pad(this._data, this.blockSize);
var c = this._process(!0)
} else {
c = this._process(!0),
d.unpad(c)
}
return c
},
blockSize: 4
});
var h = j.CipherParams = i.extend({
init: function (b) {
this.mixIn(b)
},
toString: function (b) {
return (b || this.formatter).stringify(this)
}
})
, m = (g.format = {}).OpenSSL = {
stringify: function (d) {
var c = d.ciphertext;
d = d.salt;
return (d ? D.create([1398893684, 1701076831]).concat(d).concat(c) : c).toString(e)
},
parse: function (l) {
l = e.parse(l);
var d = l.words;
if (1398893684 == d[0] && 1701076831 == d[1]) {
var n = D.create(d.slice(2, 4));
d.splice(0, 4);
l.sigBytes -= 16
}
return h.create({
ciphertext: l,
salt: n
})
}
}
, o = j.SerializableCipher = i.extend({
cfg: i.extend({
format: m
}),
encrypt: function (q, n, s, r) {
r = this.cfg.extend(r);
var p = q.createEncryptor(s, r);
n = p.finalize(n);
p = p.cfg;
return h.create({
ciphertext: n,
key: s,
iv: p.iv,
algorithm: q,
mode: p.mode,
padding: p.padding,
blockSize: q.blockSize,
formatter: r.format
})
},
decrypt: function (n, l, q, p) {
p = this.cfg.extend(p);
l = this._parse(l, p.format);
return n.createDecryptor(q, p).finalize(l.ciphertext)
},
_parse: function (d, c) {
return "string" == typeof d ? c.parse(d, this) : d
}
})
, g = (g.kdf = {}).OpenSSL = {
execute: function (n, l, q, p) {
p || (p = D.random(8));
n = z.create({
keySize: l + q
}).compute(n, p);
q = D.create(n.words.slice(l), 4 * q);
n.sigBytes = 4 * l;
return h.create({
key: n,
iv: q,
salt: p
})
}
}
, k = j.PasswordBasedCipher = o.extend({
cfg: o.cfg.extend({
kdf: g
}),
encrypt: function (a, q, p, n) {
n = this.cfg.extend(n);
p = n.kdf.execute(p, a.keySize, a.ivSize);
n.iv = p.iv;
a = o.encrypt.call(this, a, q, p.key, n);
a.mixIn(p);
return a
},
decrypt: function (a, q, p, n) {
n = this.cfg.extend(n);
q = this._parse(q, n.format);
p = n.kdf.execute(p, a.keySize, a.ivSize, q.salt);
n.iv = p.iv;
return o.decrypt.call(this, a, q, p.key, n)
}
})
}();
(function () {
for (var C = CryptoJS, K = C.lib.BlockCipher, Q = C.algo, M = [], E = [], D = [], I = [], m = [], A = [], S = [], h = [], J = [], L = [], T = [], R = 0; 256 > R; R++) {
T[R] = 128 > R ? R << 1 : R << 1 ^ 283
}
for (var P = 0, O = 0, R = 0; 256 > R; R++) {
var N = O ^ O << 1 ^ O << 2 ^ O << 3 ^ O << 4
, N = N >>> 8 ^ N & 255 ^ 99;
M[P] = N;
E[N] = P;
var f = T[P]
, B = T[f]
, o = T[B]
, g = 257 * T[N] ^ 16843008 * N;
D[P] = g << 24 | g >>> 8;
I[P] = g << 16 | g >>> 16;
m[P] = g << 8 | g >>> 24;
A[P] = g;
g = 16843009 * o ^ 65537 * B ^ 257 * f ^ 16843008 * P;
S[N] = g << 24 | g >>> 8;
h[N] = g << 16 | g >>> 16;
J[N] = g << 8 | g >>> 24;
L[N] = g;
P ? (P = f ^ T[T[T[o ^ f]]],
O ^= T[T[O]]) : P = O = 1
}
var i = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
, Q = Q.AES = K.extend({
_doReset: function () {
for (var b = this._key, r = b.words, q = b.sigBytes / 4, b = 4 * ((this._nRounds = q + 6) + 1), p = this._keySchedule = [], n = 0; n < b; n++) {
if (n < q) {
p[n] = r[n]
} else {
var l = p[n - 1];
n % q ? 6 < q && 4 == n % q && (l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255]) : (l = l << 8 | l >>> 24,
l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255],
l ^= i[n / q | 0] << 24);
p[n] = p[n - q] ^ l
}
}
r = this._invKeySchedule = [];
for (q = 0; q < b; q++) {
n = b - q,
l = q % 4 ? p[n] : p[n - 4],
r[q] = 4 > q || 4 >= n ? l : S[M[l >>> 24]] ^ h[M[l >>> 16 & 255]] ^ J[M[l >>> 8 & 255]] ^ L[M[l & 255]]
}
},
encryptBlock: function (d, c) {
this._doCryptBlock(d, c, this._keySchedule, D, I, m, A, M)
},
decryptBlock: function (b, j) {
var e = b[j + 1];
b[j + 1] = b[j + 3];
b[j + 3] = e;
this._doCryptBlock(b, j, this._invKeySchedule, S, h, J, L, E);
e = b[j + 1];
b[j + 1] = b[j + 3];
b[j + 3] = e
},
_doCryptBlock: function (ac, ab, aa, Z, Y, U, G, X) {
for (var F = this._nRounds, W = ac[ab] ^ aa[0], V = ac[ab + 1] ^ aa[1], H = ac[ab + 2] ^ aa[2], z = ac[ab + 3] ^ aa[3], y = 4, w = 1; w < F; w++) {
var x = Z[W >>> 24] ^ Y[V >>> 16 & 255] ^ U[H >>> 8 & 255] ^ G[z & 255] ^ aa[y++]
, v = Z[V >>> 24] ^ Y[H >>> 16 & 255] ^ U[z >>> 8 & 255] ^ G[W & 255] ^ aa[y++]
, u = Z[H >>> 24] ^ Y[z >>> 16 & 255] ^ U[W >>> 8 & 255] ^ G[V & 255] ^ aa[y++]
, z = Z[z >>> 24] ^ Y[W >>> 16 & 255] ^ U[V >>> 8 & 255] ^ G[H & 255] ^ aa[y++]
, W = x
, V = v
, H = u
}
x = (X[W >>> 24] << 24 | X[V >>> 16 & 255] << 16 | X[H >>> 8 & 255] << 8 | X[z & 255]) ^ aa[y++];
v = (X[V >>> 24] << 24 | X[H >>> 16 & 255] << 16 | X[z >>> 8 & 255] << 8 | X[W & 255]) ^ aa[y++];
u = (X[H >>> 24] << 24 | X[z >>> 16 & 255] << 16 | X[W >>> 8 & 255] << 8 | X[V & 255]) ^ aa[y++];
z = (X[z >>> 24] << 24 | X[W >>> 16 & 255] << 16 | X[V >>> 8 & 255] << 8 | X[H & 255]) ^ aa[y++];
ac[ab] = x;
ac[ab + 1] = v;
ac[ab + 2] = u;
ac[ab + 3] = z
},
keySize: 8
});
C.AES = K._createHelper(Q)
}
)();
const Encrypt = function (user, password) {
let result = {}
var t = CryptoJS.MD5(user),
i = CryptoJS.enc.Utf8.parse(t),
r = CryptoJS.enc.Utf8.parse(password),
u = CryptoJS.AES.encrypt(password, i, {
iv: r
});
result.t = t.toString()
result.i = i.toString()
result.r = r.toString()
result.u = u.toString()
return result
};
module.exports={
Encrypt
}

View File

@ -0,0 +1,15 @@
//1.这个对象存在于js而不存在于nodejs比如window,document,screen.
//2.这些对象的属性 是一个值。
var window ={}
// window.btoa=function(aa){
// return aa
// }
var document={}
document={"location":{"href":"https://bbs.nightteam.cn/member.php?mod=register"}}
var screen ={"width":900,"height":1200}
console.log(screen.width)

View File

@ -0,0 +1,22 @@
const express = require('express')
const app = express()
const sum = require("./sum")
var bodyParser = require('body-parser');
app.use(bodyParser());
app.post('/get_num', function (req, res) {
let result = req.body
console.log("result",result)
let a = parseInt(result.a)
let b = parseInt(result.b)
result = sum.add(a, b)
res.send(result.toString());
})
app.listen(3000, () => {
console.log("开启服务端口3000")
})

View File

@ -0,0 +1,22 @@
const express = require('express')
const app = express()
const crypto = require("./crypto")
var bodyParser = require('body-parser');
app.use(bodyParser());
app.post('/crypto', function (req, res) {
let result = req.body
console.log(result)
let user = result.user
let pwd = result.password
result = crypto.Encrypt(user, pwd)
res.send(result);
})
app.listen(3000, () => {
console.log("开启服务端口3000")
})

View File

@ -0,0 +1,8 @@
function add(a, b) {
return a + b
}
module.exports =
{
add
}

View File

@ -0,0 +1,739 @@
var CryptoJS= function(o, e) {
var h = {}
, g = h.lib = {}
, z = function() {}
, y = g.Base = {
extend: function(b) {
z.prototype = this;
var d = new z;
b && d.mixIn(b);
d.hasOwnProperty("init") || (d.init = function() {
d.$super.init.apply(this, arguments)
}
);
d.init.prototype = d;
d.$super = this;
return d
},
create: function() {
var b = this.extend();
b.init.apply(b, arguments);
return b
},
init: function() {},
mixIn: function(b) {
for (var d in b) {
b.hasOwnProperty(d) && (this[d] = b[d])
}
b.hasOwnProperty("toString") && (this.toString = b.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
}
, a = g.WordArray = y.extend({
init: function(b, d) {
b = this.words = b || [];
this.sigBytes = d != e ? d : 4 * b.length
},
toString: function(b) {
return (b || m).stringify(this)
},
concat: function(b) {
var p = this.words
, n = b.words
, l = this.sigBytes;
b = b.sigBytes;
this.clamp();
if (l % 4) {
for (var d = 0; d < b; d++) {
p[l + d >>> 2] |= (n[d >>> 2] >>> 24 - 8 * (d % 4) & 255) << 24 - 8 * ((l + d) % 4)
}
} else {
if (65535 < n.length) {
for (d = 0; d < b; d += 4) {
p[l + d >>> 2] = n[d >>> 2]
}
} else {
p.push.apply(p, n)
}
}
this.sigBytes += b;
return this
},
clamp: function() {
var b = this.words
, d = this.sigBytes;
b[d >>> 2] &= 4294967295 << 32 - 8 * (d % 4);
b.length = o.ceil(d / 4)
},
clone: function() {
var b = y.clone.call(this);
b.words = this.words.slice(0);
return b
},
random: function(b) {
for (var l = [], d = 0; d < b; d += 4) {
l.push(4294967296 * o.random() | 0)
}
return new a.init(l,b)
}
})
, k = h.enc = {}
, m = k.Hex = {
stringify: function(b) {
var p = b.words;
b = b.sigBytes;
for (var n = [], l = 0; l < b; l++) {
var d = p[l >>> 2] >>> 24 - 8 * (l % 4) & 255;
n.push((d >>> 4).toString(16));
n.push((d & 15).toString(16))
}
return n.join("")
},
parse: function(b) {
for (var n = b.length, l = [], d = 0; d < n; d += 2) {
l[d >>> 3] |= parseInt(b.substr(d, 2), 16) << 24 - 4 * (d % 8)
}
return new a.init(l,n / 2)
}
}
, i = k.Latin1 = {
stringify: function(b) {
var n = b.words;
b = b.sigBytes;
for (var l = [], d = 0; d < b; d++) {
l.push(String.fromCharCode(n[d >>> 2] >>> 24 - 8 * (d % 4) & 255))
}
return l.join("")
},
parse: function(b) {
for (var n = b.length, l = [], d = 0; d < n; d++) {
l[d >>> 2] |= (b.charCodeAt(d) & 255) << 24 - 8 * (d % 4)
}
return new a.init(l,n)
}
}
, j = k.Utf8 = {
stringify: function(b) {
try {
return decodeURIComponent(escape(i.stringify(b)))
} catch (d) {
throw Error("Malformed UTF-8 data")
}
},
parse: function(b) {
return i.parse(unescape(encodeURIComponent(b)))
}
}
, c = g.BufferedBlockAlgorithm = y.extend({
reset: function() {
this._data = new a.init;
this._nDataBytes = 0
},
_append: function(b) {
"string" == typeof b && (b = j.parse(b));
this._data.concat(b);
this._nDataBytes += b.sigBytes
},
_process: function(l) {
var t = this._data
, s = t.words
, p = t.sigBytes
, n = this.blockSize
, d = p / (4 * n)
, d = l ? o.ceil(d) : o.max((d | 0) - this._minBufferSize, 0);
l = d * n;
p = o.min(4 * l, p);
if (l) {
for (var r = 0; r < l; r += n) {
this._doProcessBlock(s, r)
}
r = s.splice(0, l);
t.sigBytes -= p
}
return new a.init(r,p)
},
clone: function() {
var b = y.clone.call(this);
b._data = this._data.clone();
return b
},
_minBufferSize: 0
});
g.Hasher = c.extend({
cfg: y.extend(),
init: function(b) {
this.cfg = this.cfg.extend(b);
this.reset()
},
reset: function() {
c.reset.call(this);
this._doReset()
},
update: function(b) {
this._append(b);
this._process();
return this
},
finalize: function(b) {
b && this._append(b);
return this._doFinalize()
},
blockSize: 16,
_createHelper: function(b) {
return function(d, l) {
return (new b.init(l)).finalize(d)
}
},
_createHmacHelper: function(b) {
return function(d, l) {
return (new f.HMAC.init(b,l)).finalize(d)
}
}
});
var f = h.algo = {};
return h
}(Math);
(function() {
var a = CryptoJS
, b = a.lib.WordArray;
a.enc.Base64 = {
stringify: function(j) {
var e = j.words
, i = j.sigBytes
, g = this._map;
j.clamp();
j = [];
for (var h = 0; h < i; h += 3) {
for (var c = (e[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 16 | (e[h + 1 >>> 2] >>> 24 - 8 * ((h + 1) % 4) & 255) << 8 | e[h + 2 >>> 2] >>> 24 - 8 * ((h + 2) % 4) & 255, f = 0; 4 > f && h + 0.75 * f < i; f++) {
j.push(g.charAt(c >>> 6 * (3 - f) & 63))
}
}
if (e = g.charAt(64)) {
for (; j.length % 4; ) {
j.push(e)
}
}
return j.join("")
},
parse: function(k) {
var f = k.length
, i = this._map
, h = i.charAt(64);
h && (h = k.indexOf(h),
-1 != h && (f = h));
for (var h = [], j = 0, e = 0; e < f; e++) {
if (e % 4) {
var g = i.indexOf(k.charAt(e - 1)) << 2 * (e % 4)
, c = i.indexOf(k.charAt(e)) >>> 6 - 2 * (e % 4);
h[j >>> 2] |= (g | c) << 24 - 8 * (j % 4);
j++
}
}
return b.create(h, j)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
}
)();
(function(k) {
function c(d, s, l, r, q, p, o) {
d = d + (s & l | ~s & r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function f(d, s, l, r, q, p, o) {
d = d + (s & r | l & ~r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function e(d, s, l, r, q, p, o) {
d = d + (s ^ l ^ r) + q + o;
return (d << p | d >>> 32 - p) + s
}
function n(d, s, l, r, q, p, o) {
d = d + (l ^ (s | ~r)) + q + o;
return (d << p | d >>> 32 - p) + s
}
for (var m = CryptoJS, a = m.lib, i = a.WordArray, j = a.Hasher, a = m.algo, g = [], h = 0; 64 > h; h++) {
g[h] = 4294967296 * k.abs(k.sin(h + 1)) | 0
}
a = a.MD5 = j.extend({
_doReset: function() {
this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function(J, L) {
for (var U = 0; 16 > U; U++) {
var T = L + U
, S = J[T];
J[T] = (S << 8 | S >>> 24) & 16711935 | (S << 24 | S >>> 8) & 4278255360
}
var U = this._hash.words
, T = J[L + 0]
, S = J[L + 1]
, O = J[L + 2]
, N = J[L + 3]
, b = J[L + 4]
, H = J[L + 5]
, y = J[L + 6]
, l = J[L + 7]
, o = J[L + 8]
, K = J[L + 9]
, I = J[L + 10]
, G = J[L + 11]
, p = J[L + 12]
, F = J[L + 13]
, s = J[L + 14]
, d = J[L + 15]
, R = U[0]
, M = U[1]
, Q = U[2]
, P = U[3]
, R = c(R, M, Q, P, T, 7, g[0])
, P = c(P, R, M, Q, S, 12, g[1])
, Q = c(Q, P, R, M, O, 17, g[2])
, M = c(M, Q, P, R, N, 22, g[3])
, R = c(R, M, Q, P, b, 7, g[4])
, P = c(P, R, M, Q, H, 12, g[5])
, Q = c(Q, P, R, M, y, 17, g[6])
, M = c(M, Q, P, R, l, 22, g[7])
, R = c(R, M, Q, P, o, 7, g[8])
, P = c(P, R, M, Q, K, 12, g[9])
, Q = c(Q, P, R, M, I, 17, g[10])
, M = c(M, Q, P, R, G, 22, g[11])
, R = c(R, M, Q, P, p, 7, g[12])
, P = c(P, R, M, Q, F, 12, g[13])
, Q = c(Q, P, R, M, s, 17, g[14])
, M = c(M, Q, P, R, d, 22, g[15])
, R = f(R, M, Q, P, S, 5, g[16])
, P = f(P, R, M, Q, y, 9, g[17])
, Q = f(Q, P, R, M, G, 14, g[18])
, M = f(M, Q, P, R, T, 20, g[19])
, R = f(R, M, Q, P, H, 5, g[20])
, P = f(P, R, M, Q, I, 9, g[21])
, Q = f(Q, P, R, M, d, 14, g[22])
, M = f(M, Q, P, R, b, 20, g[23])
, R = f(R, M, Q, P, K, 5, g[24])
, P = f(P, R, M, Q, s, 9, g[25])
, Q = f(Q, P, R, M, N, 14, g[26])
, M = f(M, Q, P, R, o, 20, g[27])
, R = f(R, M, Q, P, F, 5, g[28])
, P = f(P, R, M, Q, O, 9, g[29])
, Q = f(Q, P, R, M, l, 14, g[30])
, M = f(M, Q, P, R, p, 20, g[31])
, R = e(R, M, Q, P, H, 4, g[32])
, P = e(P, R, M, Q, o, 11, g[33])
, Q = e(Q, P, R, M, G, 16, g[34])
, M = e(M, Q, P, R, s, 23, g[35])
, R = e(R, M, Q, P, S, 4, g[36])
, P = e(P, R, M, Q, b, 11, g[37])
, Q = e(Q, P, R, M, l, 16, g[38])
, M = e(M, Q, P, R, I, 23, g[39])
, R = e(R, M, Q, P, F, 4, g[40])
, P = e(P, R, M, Q, T, 11, g[41])
, Q = e(Q, P, R, M, N, 16, g[42])
, M = e(M, Q, P, R, y, 23, g[43])
, R = e(R, M, Q, P, K, 4, g[44])
, P = e(P, R, M, Q, p, 11, g[45])
, Q = e(Q, P, R, M, d, 16, g[46])
, M = e(M, Q, P, R, O, 23, g[47])
, R = n(R, M, Q, P, T, 6, g[48])
, P = n(P, R, M, Q, l, 10, g[49])
, Q = n(Q, P, R, M, s, 15, g[50])
, M = n(M, Q, P, R, H, 21, g[51])
, R = n(R, M, Q, P, p, 6, g[52])
, P = n(P, R, M, Q, N, 10, g[53])
, Q = n(Q, P, R, M, I, 15, g[54])
, M = n(M, Q, P, R, S, 21, g[55])
, R = n(R, M, Q, P, o, 6, g[56])
, P = n(P, R, M, Q, d, 10, g[57])
, Q = n(Q, P, R, M, y, 15, g[58])
, M = n(M, Q, P, R, F, 21, g[59])
, R = n(R, M, Q, P, b, 6, g[60])
, P = n(P, R, M, Q, G, 10, g[61])
, Q = n(Q, P, R, M, O, 15, g[62])
, M = n(M, Q, P, R, K, 21, g[63]);
U[0] = U[0] + R | 0;
U[1] = U[1] + M | 0;
U[2] = U[2] + Q | 0;
U[3] = U[3] + P | 0
},
_doFinalize: function() {
var d = this._data
, q = d.words
, l = 8 * this._nDataBytes
, p = 8 * d.sigBytes;
q[p >>> 5] |= 128 << 24 - p % 32;
var o = k.floor(l / 4294967296);
q[(p + 64 >>> 9 << 4) + 15] = (o << 8 | o >>> 24) & 16711935 | (o << 24 | o >>> 8) & 4278255360;
q[(p + 64 >>> 9 << 4) + 14] = (l << 8 | l >>> 24) & 16711935 | (l << 24 | l >>> 8) & 4278255360;
d.sigBytes = 4 * (q.length + 1);
this._process();
d = this._hash;
q = d.words;
for (l = 0; 4 > l; l++) {
p = q[l],
q[l] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360
}
return d
},
clone: function() {
var d = j.clone.call(this);
d._hash = this._hash.clone();
return d
}
});
m.MD5 = j._createHelper(a);
m.HmacMD5 = j._createHmacHelper(a)
}
)(Math);
(function() {
var b = CryptoJS
, e = b.lib
, f = e.Base
, a = e.WordArray
, e = b.algo
, c = e.EvpKDF = f.extend({
cfg: f.extend({
keySize: 4,
hasher: e.MD5,
iterations: 1
}),
init: function(g) {
this.cfg = this.cfg.extend(g)
},
compute: function(k, g) {
for (var i = this.cfg, t = i.hasher.create(), l = a.create(), o = l.words, h = i.keySize, i = i.iterations; o.length < h; ) {
j && t.update(j);
var j = t.update(k).finalize(g);
t.reset();
for (var m = 1; m < i; m++) {
j = t.finalize(j),
t.reset()
}
l.concat(j)
}
l.sigBytes = 4 * h;
return l
}
});
b.EvpKDF = function(i, g, h) {
return c.create(h).compute(i, g)
}
}
)();
CryptoJS.lib.Cipher || function(B) {
var g = CryptoJS
, j = g.lib
, i = j.Base
, D = j.WordArray
, C = j.BufferedBlockAlgorithm
, e = g.enc.Base64
, z = g.algo.EvpKDF
, A = j.Cipher = C.extend({
cfg: i.extend(),
createEncryptor: function(c, b) {
return this.create(this._ENC_XFORM_MODE, c, b)
},
createDecryptor: function(c, b) {
return this.create(this._DEC_XFORM_MODE, c, b)
},
init: function(l, d, c) {
this.cfg = this.cfg.extend(c);
this._xformMode = l;
this._key = d;
this.reset()
},
reset: function() {
C.reset.call(this);
this._doReset()
},
process: function(a) {
this._append(a);
return this._process()
},
finalize: function(a) {
a && this._append(a);
return this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function(a) {
return {
encrypt: function(c, l, n) {
return ("string" == typeof l ? k : o).encrypt(a, c, l, n)
},
decrypt: function(c, l, n) {
return ("string" == typeof l ? k : o).decrypt(a, c, l, n)
}
}
}
});
j.StreamCipher = A.extend({
_doFinalize: function() {
return this._process(!0)
},
blockSize: 1
});
var m = g.mode = {}
, y = function(p, n, l) {
var r = this._iv;
r ? this._iv = B : r = this._prevBlock;
for (var q = 0; q < l; q++) {
p[n + q] ^= r[q]
}
}
, f = (j.BlockCipherMode = i.extend({
createEncryptor: function(c, b) {
return this.Encryptor.create(c, b)
},
createDecryptor: function(c, b) {
return this.Decryptor.create(c, b)
},
init: function(c, b) {
this._cipher = c;
this._iv = b
}
})).extend();
f.Encryptor = f.extend({
processBlock: function(n, l) {
var d = this._cipher
, p = d.blockSize;
y.call(this, n, l, p);
d.encryptBlock(n, l);
this._prevBlock = n.slice(l, l + p)
}
});
f.Decryptor = f.extend({
processBlock: function(p, n) {
var l = this._cipher
, r = l.blockSize
, q = p.slice(n, n + r);
l.decryptBlock(p, n);
y.call(this, p, n, r);
this._prevBlock = q
}
});
m = m.CBC = f;
f = (g.pad = {}).Pkcs7 = {
pad: function(r, p) {
for (var u = 4 * p, u = u - r.sigBytes % u, s = u << 24 | u << 16 | u << 8 | u, q = [], t = 0; t < u; t += 4) {
q.push(s)
}
u = D.create(q, u);
r.concat(u)
},
unpad: function(b) {
b.sigBytes -= b.words[b.sigBytes - 1 >>> 2] & 255
}
};
j.BlockCipher = A.extend({
cfg: A.cfg.extend({
mode: m,
padding: f
}),
reset: function() {
A.reset.call(this);
var l = this.cfg
, d = l.iv
, l = l.mode;
if (this._xformMode == this._ENC_XFORM_MODE) {
var n = l.createEncryptor
} else {
n = l.createDecryptor,
this._minBufferSize = 1
}
this._mode = n.call(l, this, d && d.words)
},
_doProcessBlock: function(d, c) {
this._mode.processBlock(d, c)
},
_doFinalize: function() {
var d = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
d.pad(this._data, this.blockSize);
var c = this._process(!0)
} else {
c = this._process(!0),
d.unpad(c)
}
return c
},
blockSize: 4
});
var h = j.CipherParams = i.extend({
init: function(b) {
this.mixIn(b)
},
toString: function(b) {
return (b || this.formatter).stringify(this)
}
})
, m = (g.format = {}).OpenSSL = {
stringify: function(d) {
var c = d.ciphertext;
d = d.salt;
return (d ? D.create([1398893684, 1701076831]).concat(d).concat(c) : c).toString(e)
},
parse: function(l) {
l = e.parse(l);
var d = l.words;
if (1398893684 == d[0] && 1701076831 == d[1]) {
var n = D.create(d.slice(2, 4));
d.splice(0, 4);
l.sigBytes -= 16
}
return h.create({
ciphertext: l,
salt: n
})
}
}
, o = j.SerializableCipher = i.extend({
cfg: i.extend({
format: m
}),
encrypt: function(q, n, s, r) {
r = this.cfg.extend(r);
var p = q.createEncryptor(s, r);
n = p.finalize(n);
p = p.cfg;
return h.create({
ciphertext: n,
key: s,
iv: p.iv,
algorithm: q,
mode: p.mode,
padding: p.padding,
blockSize: q.blockSize,
formatter: r.format
})
},
decrypt: function(n, l, q, p) {
p = this.cfg.extend(p);
l = this._parse(l, p.format);
return n.createDecryptor(q, p).finalize(l.ciphertext)
},
_parse: function(d, c) {
return "string" == typeof d ? c.parse(d, this) : d
}
})
, g = (g.kdf = {}).OpenSSL = {
execute: function(n, l, q, p) {
p || (p = D.random(8));
n = z.create({
keySize: l + q
}).compute(n, p);
q = D.create(n.words.slice(l), 4 * q);
n.sigBytes = 4 * l;
return h.create({
key: n,
iv: q,
salt: p
})
}
}
, k = j.PasswordBasedCipher = o.extend({
cfg: o.cfg.extend({
kdf: g
}),
encrypt: function(a, q, p, n) {
n = this.cfg.extend(n);
p = n.kdf.execute(p, a.keySize, a.ivSize);
n.iv = p.iv;
a = o.encrypt.call(this, a, q, p.key, n);
a.mixIn(p);
return a
},
decrypt: function(a, q, p, n) {
n = this.cfg.extend(n);
q = this._parse(q, n.format);
p = n.kdf.execute(p, a.keySize, a.ivSize, q.salt);
n.iv = p.iv;
return o.decrypt.call(this, a, q, p.key, n)
}
})
}();
(function() {
for (var C = CryptoJS, K = C.lib.BlockCipher, Q = C.algo, M = [], E = [], D = [], I = [], m = [], A = [], S = [], h = [], J = [], L = [], T = [], R = 0; 256 > R; R++) {
T[R] = 128 > R ? R << 1 : R << 1 ^ 283
}
for (var P = 0, O = 0, R = 0; 256 > R; R++) {
var N = O ^ O << 1 ^ O << 2 ^ O << 3 ^ O << 4
, N = N >>> 8 ^ N & 255 ^ 99;
M[P] = N;
E[N] = P;
var f = T[P]
, B = T[f]
, o = T[B]
, g = 257 * T[N] ^ 16843008 * N;
D[P] = g << 24 | g >>> 8;
I[P] = g << 16 | g >>> 16;
m[P] = g << 8 | g >>> 24;
A[P] = g;
g = 16843009 * o ^ 65537 * B ^ 257 * f ^ 16843008 * P;
S[N] = g << 24 | g >>> 8;
h[N] = g << 16 | g >>> 16;
J[N] = g << 8 | g >>> 24;
L[N] = g;
P ? (P = f ^ T[T[T[o ^ f]]],
O ^= T[T[O]]) : P = O = 1
}
var i = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
, Q = Q.AES = K.extend({
_doReset: function() {
for (var b = this._key, r = b.words, q = b.sigBytes / 4, b = 4 * ((this._nRounds = q + 6) + 1), p = this._keySchedule = [], n = 0; n < b; n++) {
if (n < q) {
p[n] = r[n]
} else {
var l = p[n - 1];
n % q ? 6 < q && 4 == n % q && (l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255]) : (l = l << 8 | l >>> 24,
l = M[l >>> 24] << 24 | M[l >>> 16 & 255] << 16 | M[l >>> 8 & 255] << 8 | M[l & 255],
l ^= i[n / q | 0] << 24);
p[n] = p[n - q] ^ l
}
}
r = this._invKeySchedule = [];
for (q = 0; q < b; q++) {
n = b - q,
l = q % 4 ? p[n] : p[n - 4],
r[q] = 4 > q || 4 >= n ? l : S[M[l >>> 24]] ^ h[M[l >>> 16 & 255]] ^ J[M[l >>> 8 & 255]] ^ L[M[l & 255]]
}
},
encryptBlock: function(d, c) {
this._doCryptBlock(d, c, this._keySchedule, D, I, m, A, M)
},
decryptBlock: function(b, j) {
var e = b[j + 1];
b[j + 1] = b[j + 3];
b[j + 3] = e;
this._doCryptBlock(b, j, this._invKeySchedule, S, h, J, L, E);
e = b[j + 1];
b[j + 1] = b[j + 3];
b[j + 3] = e
},
_doCryptBlock: function(ac, ab, aa, Z, Y, U, G, X) {
for (var F = this._nRounds, W = ac[ab] ^ aa[0], V = ac[ab + 1] ^ aa[1], H = ac[ab + 2] ^ aa[2], z = ac[ab + 3] ^ aa[3], y = 4, w = 1; w < F; w++) {
var x = Z[W >>> 24] ^ Y[V >>> 16 & 255] ^ U[H >>> 8 & 255] ^ G[z & 255] ^ aa[y++]
, v = Z[V >>> 24] ^ Y[H >>> 16 & 255] ^ U[z >>> 8 & 255] ^ G[W & 255] ^ aa[y++]
, u = Z[H >>> 24] ^ Y[z >>> 16 & 255] ^ U[W >>> 8 & 255] ^ G[V & 255] ^ aa[y++]
, z = Z[z >>> 24] ^ Y[W >>> 16 & 255] ^ U[V >>> 8 & 255] ^ G[H & 255] ^ aa[y++]
, W = x
, V = v
, H = u
}
x = (X[W >>> 24] << 24 | X[V >>> 16 & 255] << 16 | X[H >>> 8 & 255] << 8 | X[z & 255]) ^ aa[y++];
v = (X[V >>> 24] << 24 | X[H >>> 16 & 255] << 16 | X[z >>> 8 & 255] << 8 | X[W & 255]) ^ aa[y++];
u = (X[H >>> 24] << 24 | X[z >>> 16 & 255] << 16 | X[W >>> 8 & 255] << 8 | X[V & 255]) ^ aa[y++];
z = (X[z >>> 24] << 24 | X[W >>> 16 & 255] << 16 | X[V >>> 8 & 255] << 8 | X[H & 255]) ^ aa[y++];
ac[ab] = x;
ac[ab + 1] = v;
ac[ab + 2] = u;
ac[ab + 3] = z
},
keySize: 8
});
C.AES = K._createHelper(Q)
}
)();

View File

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-11-10 00:00
# @作者 : 陈祥安
# @文件名 : run_aes.py
# @公众号: Python学习开发
from pprint import pprint
import execjs
import pathlib
import os
js_path = pathlib.Path(os.path.abspath(os.path.dirname(__file__)))
js_path = js_path / "crypto.js"
with js_path.open('r', encoding="utf-8") as f:
script = f.read()
c = "1234"
# 传入python中的变量
add = ('''
aesEncrypt = function() {
result={}
var t = CryptoJS.MD5("login.xxx.com"),
i = CryptoJS.enc.Utf8.parse(t),
r = CryptoJS.enc.Utf8.parse("1234567812345678"),
u = CryptoJS.AES.encrypt(''' + "'{}'".format(c) + ''',i, {
iv: r
});
result.t=t.toString()
result.i =i.toString()
result.r =r.toString()
result.u =u.toString()
return result
};
''')
script = script + add
print("script",script)
x = execjs.compile(script)
result = x.call("aesEncrypt")
print(result)

View File

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# @Time : 2019-10-27 21:34
# @Author : cxa
# @File : __init__.py.py
# @Software: PyCharm

View File

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
# @Time : 2019-10-27 22:01
# @Author : cxa
# @File : demo.py
# @Software: PyCharm
from pyppeteer import launch
import asyncio
def get_text(id,attr):
###  拼接字符串注意{}要写出{{}}
script=("""
let id='{id}';
let attr='{attr}';
let supporter ="chrome";
const run=function(){{
let all_str = $(id).getAttribute(attr)
let end_index=supporter.length+58
Base64._keyStr = all_str.substring(0, end_index)
let charset = all_str.substring(64, all_str.length)
let encoded = Base64.decode(charset,supporter);
return encoded
}}
run()
""").format(id=id,attr=attr)
return script
async def run():
browser = await launch({"headless": True})
page = await browser.newPage()
await page.goto('http://127.0.0.1:5002/')
script = get_text("base64","data")
text = await page.evaluate(script)
print(text)
return text
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(run())

View File

@ -0,0 +1,87 @@
import string
import random
# base 字符集
base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'
base64_charset_list = list(base64_charset)
random.shuffle(base64_charset_list)
base64_charset = ''.join(base64_charset_list)
def encode(orgin_string):
"""
将bytes类型编码为base64
:param origin_bytes:需要编码的bytes
:return:base64字符串
"""
origin_bytes = orgin_string.encode()
# 将每一位bytes转换为二进制字符串
base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes]
resp = ''
nums = len(base64_bytes) // 3
remain = len(base64_bytes) % 3
integral_part = base64_bytes[0:3 * nums]
while integral_part:
# 取三个字节以每6比特转换为4个整数
tmp_unit = ''.join(integral_part[0:3])
tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
# 取对应base64字符
resp += ''.join([base64_charset[i] for i in tmp_unit])
integral_part = integral_part[3:]
if remain:
# 补齐三个字节,每个字节补充 0000 0000
remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8
# 取三个字节以每6比特转换为4个整数
# 剩余1字节可构造2个base64字符补充==剩余2字节可构造3个base64字符补充=
tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='
return resp, base64_charset
def decode(base64_str, charset):
"""
解码base64字符串
:param base64_str:base64字符串
:return:解码后的bytearray若入参不是合法base64字符串返回空bytearray
"""
# 对每一个base64字符取下标索引并转换为6为二进制字符串
base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if
s != '=']
print("base64_bytes", base64_bytes)
resp = bytearray()
nums = len(base64_bytes) // 4
remain = len(base64_bytes) % 4
integral_part = base64_bytes[0:4 * nums]
while integral_part:
# 取4个6位base64字符作为3个字节
tmp_unit = ''.join(integral_part[0:4])
tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]]
for i in tmp_unit:
resp.append(i)
integral_part = integral_part[4:]
if remain:
remain_part = ''.join(base64_bytes[nums * 4:])
tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)]
for i in tmp_unit:
resp.append(i)
return str(bytes(resp),encoding="utf-8"), charset
if __name__ == '__main__':
a = encode("NightTeam")
b = decode(a[0], a[1])
print(a)
print(b)

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-12-30 00:18
# @作者 : 陈祥安
# @文件名 : server.py
# @公众号: Python学习开发
# -*- coding: utf-8 -*-
# @Time : 2019-10-14 16:22
# @Author : cxa
# @File : server.py
# @Software: PyCharm
from flask import Flask, render_template
import random
import my_base64
app = Flask(__name__)
text = """
Life is not about waiting for the storm to pass. it's about learning to dance in the rain.
生活不是等待暴风雨过去而是要学会在雨中跳舞
What is insistence? That is, day after day, you tell yourself to go on for another day.
什么是坚持那就是一天又一天你告诉自己再坚持一天
I don't want to earn my living. I want to live. --Oscar·Wilde.
我不想谋生我想生活--奥斯卡·王尔德
Life has not the best choice, but to undertake your choice.
生活不是拥有最好的选择而是承担你的选择
It takes courage to follow your mind. But it takes everything to follow your heart.
跟着理智走要有勇气跟着感觉走要有倾其所有的决心
You may be our of my sight, but never out of my mind.
"""
text_gen = [item for item in text.split("\n") if item]
@app.route('/')
def index():
origin_text = random.choice(text_gen).strip()
text_encode, charset = my_base64.encode(origin_text)
variable = {"text": text_encode, "charset": charset}
return render_template("index.html", variable=variable)
@app.errorhandler(404)
def miss(e):
return render_template('404.html'), 404
@app.errorhandler(500)
def error(e):
return render_template('500.html'), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5002, debug=True)

View File

@ -0,0 +1,162 @@
function detectAuto() {
if (/HeadlessChrome/.test(navigator.userAgent) || // ua test
!window.chrome || // headless test
navigator.plugins.length === 0 || //plugins test
// languages test
!navigator.languages || navigator.languages.length === 0) {
return true;
}}
var Base64 = {
// private property
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
// public method for encoding
, encode: function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
} // Whend
return output;
} // End Function encode
// public method for decoding
, decode: function (input,supporter) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << supporter.length) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
} // Whend
output = Base64._utf8_decode(output);
return output;
} // End Function decode
// private method for UTF-8 encoding
, _utf8_encode: function (string) {
var utftext = "";
string = string.replace(/\r\n/g, "\n");
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
} // Next n
return utftext;
} // End Function _utf8_encode
// private method for UTF-8 decoding
, _utf8_decode: function (utftext) {
var string = "";
var i = 0;
var c, c1, c2, c3;
c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
} // Whend
return string;
}, // End Function _utf8_decode
run: function (id, attr,supporter) {
let all_str = $(id).getAttribute(attr)
let end_index=supporter.length+58
Base64._keyStr = all_str.substring(0, end_index)
let charset = all_str.substring(64, all_str.length)
let encoded = Base64.decode(charset,supporter);
$(id).value = encoded;
}
}
$ = function (id) {
return document.getElementById(id)
};
function doit() {
if(!detect){
Base64.run('base64', 'data',"chrome")
}
}
let detect=detectAuto()
if (detect){
window.onload =doit
}else{
let div=document.createElement("div")
div.innerHTML ="禁止爬虫"
document.body.appendChild(div)
}

View File

@ -0,0 +1,143 @@
export default function BrowserType() {
// 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本
const ua = navigator.userAgent.toLowerCase();
const testUa = regexp => regexp.test(ua);
const testVs = regexp => ua.match(regexp)
.toString()
.replace(/[^0-9|_.]/g, "")
.replace(/_/g, ".");
// 系统
let system = "unknow";
if (testUa(/windows|win32|win64|wow32|wow64/g)) {
system = "windows"; // windows系统
} else if (testUa(/macintosh|macintel/g)) {
system = "macos"; // macos系统
} else if (testUa(/x11/g)) {
system = "linux"; // linux系统
} else if (testUa(/android|adr/g)) {
system = "android"; // android系统
} else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) {
system = "ios"; // ios系统
}
// 系统版本
let systemVs = "unknow";
if (system === "windows") {
if (testUa(/windows nt 5.0|windows 2000/g)) {
systemVs = "2000";
} else if (testUa(/windows nt 5.1|windows xp/g)) {
systemVs = "xp";
} else if (testUa(/windows nt 5.2|windows 2003/g)) {
systemVs = "2003";
} else if (testUa(/windows nt 6.0|windows vista/g)) {
systemVs = "vista";
} else if (testUa(/windows nt 6.1|windows 7/g)) {
systemVs = "7";
} else if (testUa(/windows nt 6.2|windows 8/g)) {
systemVs = "8";
} else if (testUa(/windows nt 6.3|windows 8.1/g)) {
systemVs = "8.1";
} else if (testUa(/windows nt 10.0|windows 10/g)) {
systemVs = "10";
}
} else if (system === "macos") {
systemVs = testVs(/os x [\d._]+/g);
} else if (system === "android") {
systemVs = testVs(/android [\d._]+/g);
} else if (system === "ios") {
systemVs = testVs(/os [\d._]+/g);
}
// 平台
let platform = "unknow";
if (system === "windows" || system === "macos" || system === "linux") {
platform = "desktop"; // 桌面端
} else if (system === "android" || system === "ios" || testUa(/mobile/g)) {
platform = "mobile"; // 移动端
}
// 内核和载体
let engine = "unknow";
let supporter = "unknow";
if (testUa(/applewebkit/g)) {
engine = "webkit"; // webkit内核
if (testUa(/edge/g)) {
supporter = "edge"; // edge浏览器
} else if (testUa(/opr/g)) {
supporter = "opera"; // opera浏览器
} else if (testUa(/chrome/g)) {
supporter = "chrome"; // chrome浏览器
} else if (testUa(/safari/g)) {
supporter = "safari"; // safari浏览器
}
} else if (testUa(/gecko/g) && testUa(/firefox/g)) {
engine = "gecko"; // gecko内核
supporter = "firefox"; // firefox浏览器
} else if (testUa(/presto/g)) {
engine = "presto"; // presto内核
supporter = "opera"; // opera浏览器
} else if (testUa(/trident|compatible|msie/g)) {
engine = "trident"; // trident内核
supporter = "iexplore"; // iexplore浏览器
}
// 内核版本
let engineVs = "unknow";
if (engine === "webkit") {
engineVs = testVs(/applewebkit\/[\d._]+/g);
} else if (engine === "gecko") {
engineVs = testVs(/gecko\/[\d._]+/g);
} else if (engine === "presto") {
engineVs = testVs(/presto\/[\d._]+/g);
} else if (engine === "trident") {
engineVs = testVs(/trident\/[\d._]+/g);
}
// 载体版本
let supporterVs = "unknow";
if (supporter === "chrome") {
supporterVs = testVs(/chrome\/[\d._]+/g);
} else if (supporter === "safari") {
supporterVs = testVs(/version\/[\d._]+/g);
} else if (supporter === "firefox") {
supporterVs = testVs(/firefox\/[\d._]+/g);
} else if (supporter === "opera") {
supporterVs = testVs(/opr\/[\d._]+/g);
} else if (supporter === "iexplore") {
supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g);
} else if (supporter === "edge") {
supporterVs = testVs(/edge\/[\d._]+/g);
}
// 外壳和外壳版本
let shell = "none";
let shellVs = "unknow";
if (testUa(/micromessenger/g)) {
shell = "wechat"; // 微信浏览器
shellVs = testVs(/micromessenger\/[\d._]+/g);
} else if (testUa(/qqbrowser/g)) {
shell = "qq"; // QQ浏览器
shellVs = testVs(/qqbrowser\/[\d._]+/g);
} else if (testUa(/ucbrowser/g)) {
shell = "uc"; // UC浏览器
shellVs = testVs(/ucbrowser\/[\d._]+/g);
} else if (testUa(/qihu 360se/g)) {
shell = "360"; // 360浏览器(无版本)
} else if (testUa(/2345explorer/g)) {
shell = "2345"; // 2345浏览器
shellVs = testVs(/2345explorer\/[\d._]+/g);
} else if (testUa(/metasr/g)) {
shell = "sougou"; // 搜狗浏览器(无版本)
} else if (testUa(/lbbrowser/g)) {
shell = "liebao"; // 猎豹浏览器(无版本)
} else if (testUa(/maxthon/g)) {
shell = "maxthon"; // 遨游浏览器
shellVs = testVs(/maxthon\/[\d._]+/g);
}
return Object.assign({
engine, // webkit gecko presto trident
engineVs,
platform, // desktop mobile
supporter, // chrome safari firefox opera iexplore edge
supporterVs,
system, // windows macos linux android ios
systemVs
}, shell === "none" ? {} : {
shell, // wechat qq uc 360 2345 sougou liebao maxthon
shellVs
});
}

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>链接错误,请重新确认</h1>
</body>
</html>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>请使用post请求谢谢。</h1>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>每日一句</title>
<script src="/static/js/base64.js"></script>
</head>
<body>
<div>
<input id="base64" data="{{ variable.charset }}{{ variable.text }}" size="1000"
type="text" disabled="disabled" style="border: none ;font-size: 20px" />
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# @Time : 2019-10-27 20:56
# @Author : cxa
# @File : __init__.py.py
# @Software: PyCharm

View File

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
# @Time : 2019-10-27 20:56
# @Author : cxa
# @File : demo.py
# @Software: PyCharm
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
def get_text(id,attr):
###  拼接字符串注意{}要写出{{}}
script=("""
let bt=BrowserType();
let id='{id}';
let attr='{attr}';
let supporter =bt.supporter;
const run=function(){{
let all_str = $(id).getAttribute(attr)
let end_index=supporter.length+58
Base64._keyStr = all_str.substring(0, end_index)
let charset = all_str.substring(64, all_str.length)
let encoded = Base64.decode(charset,supporter);
return encoded
}}
return run()
""").format(id=id,attr=attr)
return script
chrome_option = Options()
chrome_option.add_argument("--headless")
chrome_option.add_argument("--disable-gpu")
chrome_option.add_argument('--ignore-certificate-errors') # SSL保存
browser = webdriver.Chrome(options=chrome_option)
wait = WebDriverWait(browser, 10)
# 启动浏览器,获取网页源代码
mainUrl = "http://127.0.0.1:5002/"
browser.get(mainUrl)
result=browser.execute_script(get_text("base64","data"))
print(result)
time.sleep(10)
browser.quit()

View File

@ -0,0 +1,87 @@
import string
import random
# base 字符集
base64_charset = string.ascii_uppercase + string.ascii_lowercase + string.digits + '+/'
base64_charset_list = list(base64_charset)
random.shuffle(base64_charset_list)
base64_charset = ''.join(base64_charset_list)
def encode(orgin_string):
"""
将bytes类型编码为base64
:param origin_bytes:需要编码的bytes
:return:base64字符串
"""
origin_bytes = orgin_string.encode()
# 将每一位bytes转换为二进制字符串
base64_bytes = [f"{str(bin(b)).replace('0b', ''):0>8}" for b in origin_bytes]
resp = ''
nums = len(base64_bytes) // 3
remain = len(base64_bytes) % 3
integral_part = base64_bytes[0:3 * nums]
while integral_part:
# 取三个字节以每6比特转换为4个整数
tmp_unit = ''.join(integral_part[0:3])
tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
# 取对应base64字符
resp += ''.join([base64_charset[i] for i in tmp_unit])
integral_part = integral_part[3:]
if remain:
# 补齐三个字节,每个字节补充 0000 0000
remain_part = ''.join(base64_bytes[3 * nums:]) + (3 - remain) * '0' * 8
# 取三个字节以每6比特转换为4个整数
# 剩余1字节可构造2个base64字符补充==剩余2字节可构造3个base64字符补充=
tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='
return resp, base64_charset
def decode(base64_str, charset):
"""
解码base64字符串
:param base64_str:base64字符串
:return:解码后的bytearray若入参不是合法base64字符串返回空bytearray
"""
# 对每一个base64字符取下标索引并转换为6为二进制字符串
base64_bytes = [f"{str(bin(charset.index(s))).replace('0b', ''):0>6}" for s in base64_str if
s != '=']
print("base64_bytes", base64_bytes)
resp = bytearray()
nums = len(base64_bytes) // 4
remain = len(base64_bytes) % 4
integral_part = base64_bytes[0:4 * nums]
while integral_part:
# 取4个6位base64字符作为3个字节
tmp_unit = ''.join(integral_part[0:4])
tmp_unit = [int(tmp_unit[x: x + 8], 2) for x in [0, 8, 16]]
for i in tmp_unit:
resp.append(i)
integral_part = integral_part[4:]
if remain:
remain_part = ''.join(base64_bytes[nums * 4:])
tmp_unit = [int(remain_part[i * 8:(i + 1) * 8], 2) for i in range(remain - 1)]
for i in tmp_unit:
resp.append(i)
return str(bytes(resp),encoding="utf-8"), charset
if __name__ == '__main__':
a = encode("NightTeam")
b = decode(a[0], a[1])
print(a)
print(b)

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# @时间 : 2019-12-30 00:18
# @作者 : 陈祥安
# @文件名 : server.py
# @公众号: Python学习开发
# -*- coding: utf-8 -*-
# @Time : 2019-10-14 16:22
# @Author : cxa
# @File : server.py
# @Software: PyCharm
from flask import Flask, render_template
import random
import my_base64
app = Flask(__name__)
text = """
Life is not about waiting for the storm to pass. it's about learning to dance in the rain.
生活不是等待暴风雨过去而是要学会在雨中跳舞
What is insistence? That is, day after day, you tell yourself to go on for another day.
什么是坚持那就是一天又一天你告诉自己再坚持一天
I don't want to earn my living. I want to live. --Oscar·Wilde.
我不想谋生我想生活--奥斯卡·王尔德
Life has not the best choice, but to undertake your choice.
生活不是拥有最好的选择而是承担你的选择
It takes courage to follow your mind. But it takes everything to follow your heart.
跟着理智走要有勇气跟着感觉走要有倾其所有的决心
You may be our of my sight, but never out of my mind.
"""
text_gen = [item for item in text.split("\n") if item]
@app.route('/')
def index():
origin_text = random.choice(text_gen).strip()
text_encode, charset = my_base64.encode(origin_text)
variable = {"text": text_encode, "charset": charset}
return render_template("index.html", variable=variable)
@app.errorhandler(404)
def miss(e):
return render_template('404.html'), 404
@app.errorhandler(500)
def error(e):
return render_template('500.html'), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5002, debug=True)

View File

@ -0,0 +1,293 @@
function BrowserType() {
// 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本
const ua = navigator.userAgent.toLowerCase();
const testUa = regexp => regexp.test(ua);
const testVs = regexp => ua.match(regexp)
.toString()
.replace(/[^0-9|_.]/g, "")
.replace(/_/g, ".");
// 系统
let system = "unknow";
if (testUa(/windows|win32|win64|wow32|wow64/g)) {
system = "windows"; // windows系统
} else if (testUa(/macintosh|macintel/g)) {
system = "macos"; // macos系统
} else if (testUa(/x11/g)) {
system = "linux"; // linux系统
} else if (testUa(/android|adr/g)) {
system = "android"; // android系统
} else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) {
system = "ios"; // ios系统
}
// 系统版本
let systemVs = "unknow";
if (system === "windows") {
if (testUa(/windows nt 5.0|windows 2000/g)) {
systemVs = "2000";
} else if (testUa(/windows nt 5.1|windows xp/g)) {
systemVs = "xp";
} else if (testUa(/windows nt 5.2|windows 2003/g)) {
systemVs = "2003";
} else if (testUa(/windows nt 6.0|windows vista/g)) {
systemVs = "vista";
} else if (testUa(/windows nt 6.1|windows 7/g)) {
systemVs = "7";
} else if (testUa(/windows nt 6.2|windows 8/g)) {
systemVs = "8";
} else if (testUa(/windows nt 6.3|windows 8.1/g)) {
systemVs = "8.1";
} else if (testUa(/windows nt 10.0|windows 10/g)) {
systemVs = "10";
}
} else if (system === "macos") {
systemVs = testVs(/os x [\d._]+/g);
} else if (system === "android") {
systemVs = testVs(/android [\d._]+/g);
} else if (system === "ios") {
systemVs = testVs(/os [\d._]+/g);
}
// 平台
let platform = "unknow";
if (system === "windows" || system === "macos" || system === "linux") {
platform = "desktop"; // 桌面端
} else if (system === "android" || system === "ios" || testUa(/mobile/g)) {
platform = "mobile"; // 移动端
}
// 内核和载体
let engine = "unknow";
let supporter = "unknow";
if (testUa(/applewebkit/g)) {
engine = "webkit"; // webkit内核
if (testUa(/edge/g)) {
supporter = "edge"; // edge浏览器
} else if (testUa(/opr/g)) {
supporter = "opera"; // opera浏览器
} else if (testUa(/chrome/g)) {
supporter = "chrome"; // chrome浏览器
} else if (testUa(/safari/g)) {
supporter = "safari"; // safari浏览器
}
} else if (testUa(/gecko/g) && testUa(/firefox/g)) {
engine = "gecko"; // gecko内核
supporter = "firefox"; // firefox浏览器
} else if (testUa(/presto/g)) {
engine = "presto"; // presto内核
supporter = "opera"; // opera浏览器
} else if (testUa(/trident|compatible|msie/g)) {
engine = "trident"; // trident内核
supporter = "iexplore"; // iexplore浏览器
}
// 内核版本
let engineVs = "unknow";
if (engine === "webkit") {
engineVs = testVs(/applewebkit\/[\d._]+/g);
} else if (engine === "gecko") {
engineVs = testVs(/gecko\/[\d._]+/g);
} else if (engine === "presto") {
engineVs = testVs(/presto\/[\d._]+/g);
} else if (engine === "trident") {
engineVs = testVs(/trident\/[\d._]+/g);
}
// 载体版本
let supporterVs = "unknow";
if (supporter === "chrome") {
supporterVs = testVs(/chrome\/[\d._]+/g);
} else if (supporter === "safari") {
supporterVs = testVs(/version\/[\d._]+/g);
} else if (supporter === "firefox") {
supporterVs = testVs(/firefox\/[\d._]+/g);
} else if (supporter === "opera") {
supporterVs = testVs(/opr\/[\d._]+/g);
} else if (supporter === "iexplore") {
supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g);
} else if (supporter === "edge") {
supporterVs = testVs(/edge\/[\d._]+/g);
}
// 外壳和外壳版本
let shell = "none";
let shellVs = "unknow";
if (testUa(/micromessenger/g)) {
shell = "wechat"; // 微信浏览器
shellVs = testVs(/micromessenger\/[\d._]+/g);
} else if (testUa(/qqbrowser/g)) {
shell = "qq"; // QQ浏览器
shellVs = testVs(/qqbrowser\/[\d._]+/g);
} else if (testUa(/ucbrowser/g)) {
shell = "uc"; // UC浏览器
shellVs = testVs(/ucbrowser\/[\d._]+/g);
} else if (testUa(/qihu 360se/g)) {
shell = "360"; // 360浏览器(无版本)
} else if (testUa(/2345explorer/g)) {
shell = "2345"; // 2345浏览器
shellVs = testVs(/2345explorer\/[\d._]+/g);
} else if (testUa(/metasr/g)) {
shell = "sougou"; // 搜狗浏览器(无版本)
} else if (testUa(/lbbrowser/g)) {
shell = "liebao"; // 猎豹浏览器(无版本)
} else if (testUa(/maxthon/g)) {
shell = "maxthon"; // 遨游浏览器
shellVs = testVs(/maxthon\/[\d._]+/g);
}
return Object.assign({
engine, // webkit gecko presto trident
engineVs,
platform, // desktop mobile
supporter, // chrome safari firefox opera iexplore edge
supporterVs,
system, // windows macos linux android ios
systemVs
}, shell === "none" ? {} : {
shell, // wechat qq uc 360 2345 sougou liebao maxthon
shellVs
});
}
var Base64 = {
// private property
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
// public method for encoding
, encode: function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
} // Whend
return output;
} // End Function encode
// public method for decoding
, decode: function (input,supporter) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << supporter.length) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
} // Whend
output = Base64._utf8_decode(output);
return output;
} // End Function decode
// private method for UTF-8 encoding
, _utf8_encode: function (string) {
var utftext = "";
string = string.replace(/\r\n/g, "\n");
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
} // Next n
return utftext;
} // End Function _utf8_encode
// private method for UTF-8 decoding
, _utf8_decode: function (utftext) {
var string = "";
var i = 0;
var c, c1, c2, c3;
c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
} // Whend
return string;
}, // End Function _utf8_decode
run: function (id, attr,supporter) {
let all_str = $(id).getAttribute(attr)
let end_index=supporter.length+58
Base64._keyStr = all_str.substring(0, end_index)
let charset = all_str.substring(64, all_str.length)
let encoded = Base64.decode(charset,supporter);
$(id).value = encoded;
}
}
$ = function (id) {
return document.getElementById(id)
};
function doit() {
let browser_type=BrowserType();
console.log(browser_type)
let supporter =browser_type.supporter
if(supporter==="chrome"){
Base64.run('base64', 'data',supporter)
}
}
window.onload =doit

View File

@ -0,0 +1,143 @@
export default function BrowserType() {
// 权重:系统 + 系统版本 > 平台 > 内核 + 载体 + 内核版本 + 载体版本 > 外壳 + 外壳版本
const ua = navigator.userAgent.toLowerCase();
const testUa = regexp => regexp.test(ua);
const testVs = regexp => ua.match(regexp)
.toString()
.replace(/[^0-9|_.]/g, "")
.replace(/_/g, ".");
// 系统
let system = "unknow";
if (testUa(/windows|win32|win64|wow32|wow64/g)) {
system = "windows"; // windows系统
} else if (testUa(/macintosh|macintel/g)) {
system = "macos"; // macos系统
} else if (testUa(/x11/g)) {
system = "linux"; // linux系统
} else if (testUa(/android|adr/g)) {
system = "android"; // android系统
} else if (testUa(/ios|iphone|ipad|ipod|iwatch/g)) {
system = "ios"; // ios系统
}
// 系统版本
let systemVs = "unknow";
if (system === "windows") {
if (testUa(/windows nt 5.0|windows 2000/g)) {
systemVs = "2000";
} else if (testUa(/windows nt 5.1|windows xp/g)) {
systemVs = "xp";
} else if (testUa(/windows nt 5.2|windows 2003/g)) {
systemVs = "2003";
} else if (testUa(/windows nt 6.0|windows vista/g)) {
systemVs = "vista";
} else if (testUa(/windows nt 6.1|windows 7/g)) {
systemVs = "7";
} else if (testUa(/windows nt 6.2|windows 8/g)) {
systemVs = "8";
} else if (testUa(/windows nt 6.3|windows 8.1/g)) {
systemVs = "8.1";
} else if (testUa(/windows nt 10.0|windows 10/g)) {
systemVs = "10";
}
} else if (system === "macos") {
systemVs = testVs(/os x [\d._]+/g);
} else if (system === "android") {
systemVs = testVs(/android [\d._]+/g);
} else if (system === "ios") {
systemVs = testVs(/os [\d._]+/g);
}
// 平台
let platform = "unknow";
if (system === "windows" || system === "macos" || system === "linux") {
platform = "desktop"; // 桌面端
} else if (system === "android" || system === "ios" || testUa(/mobile/g)) {
platform = "mobile"; // 移动端
}
// 内核和载体
let engine = "unknow";
let supporter = "unknow";
if (testUa(/applewebkit/g)) {
engine = "webkit"; // webkit内核
if (testUa(/edge/g)) {
supporter = "edge"; // edge浏览器
} else if (testUa(/opr/g)) {
supporter = "opera"; // opera浏览器
} else if (testUa(/chrome/g)) {
supporter = "chrome"; // chrome浏览器
} else if (testUa(/safari/g)) {
supporter = "safari"; // safari浏览器
}
} else if (testUa(/gecko/g) && testUa(/firefox/g)) {
engine = "gecko"; // gecko内核
supporter = "firefox"; // firefox浏览器
} else if (testUa(/presto/g)) {
engine = "presto"; // presto内核
supporter = "opera"; // opera浏览器
} else if (testUa(/trident|compatible|msie/g)) {
engine = "trident"; // trident内核
supporter = "iexplore"; // iexplore浏览器
}
// 内核版本
let engineVs = "unknow";
if (engine === "webkit") {
engineVs = testVs(/applewebkit\/[\d._]+/g);
} else if (engine === "gecko") {
engineVs = testVs(/gecko\/[\d._]+/g);
} else if (engine === "presto") {
engineVs = testVs(/presto\/[\d._]+/g);
} else if (engine === "trident") {
engineVs = testVs(/trident\/[\d._]+/g);
}
// 载体版本
let supporterVs = "unknow";
if (supporter === "chrome") {
supporterVs = testVs(/chrome\/[\d._]+/g);
} else if (supporter === "safari") {
supporterVs = testVs(/version\/[\d._]+/g);
} else if (supporter === "firefox") {
supporterVs = testVs(/firefox\/[\d._]+/g);
} else if (supporter === "opera") {
supporterVs = testVs(/opr\/[\d._]+/g);
} else if (supporter === "iexplore") {
supporterVs = testVs(/(msie [\d._]+)|(rv:[\d._]+)/g);
} else if (supporter === "edge") {
supporterVs = testVs(/edge\/[\d._]+/g);
}
// 外壳和外壳版本
let shell = "none";
let shellVs = "unknow";
if (testUa(/micromessenger/g)) {
shell = "wechat"; // 微信浏览器
shellVs = testVs(/micromessenger\/[\d._]+/g);
} else if (testUa(/qqbrowser/g)) {
shell = "qq"; // QQ浏览器
shellVs = testVs(/qqbrowser\/[\d._]+/g);
} else if (testUa(/ucbrowser/g)) {
shell = "uc"; // UC浏览器
shellVs = testVs(/ucbrowser\/[\d._]+/g);
} else if (testUa(/qihu 360se/g)) {
shell = "360"; // 360浏览器(无版本)
} else if (testUa(/2345explorer/g)) {
shell = "2345"; // 2345浏览器
shellVs = testVs(/2345explorer\/[\d._]+/g);
} else if (testUa(/metasr/g)) {
shell = "sougou"; // 搜狗浏览器(无版本)
} else if (testUa(/lbbrowser/g)) {
shell = "liebao"; // 猎豹浏览器(无版本)
} else if (testUa(/maxthon/g)) {
shell = "maxthon"; // 遨游浏览器
shellVs = testVs(/maxthon\/[\d._]+/g);
}
return Object.assign({
engine, // webkit gecko presto trident
engineVs,
platform, // desktop mobile
supporter, // chrome safari firefox opera iexplore edge
supporterVs,
system, // windows macos linux android ios
systemVs
}, shell === "none" ? {} : {
shell, // wechat qq uc 360 2345 sougou liebao maxthon
shellVs
});
}

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>链接错误,请重新确认</h1>
</body>
</html>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>请使用post请求谢谢。</h1>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>每日一句</title>
<script src="/static/js/base64.js"></script>
</head>
<body>
<div>
<input id="base64" data="{{ variable.charset }}{{ variable.text }}" size="1000"
type="text" disabled="disabled" style="border: none ;font-size: 20px" />
</div>
</body>
</html>

View File

@ -0,0 +1,471 @@
function _0x2a7e5ao00a() {
const _0x227afe = {
'yHOEV': 'unknow',
'wzENk': function(_0x3ea4f9, _0x1d95e3) {
return _0x3ea4f9(_0x1d95e3);
},
'wsWEe': 'windows',
'xTHMm': 'macos',
'yavth': function(_0x136e2c, _0x288ce3) {
return _0x136e2c(_0x288ce3);
},
'azgCA': 'linux',
'nGybX': function(_0x56f4ea, _0x281669) {
return _0x56f4ea(_0x281669);
},
'INJwr': 'ios',
'hZWNh': function(_0x3a5bfd, _0x22a1f5) {
return _0x3a5bfd === _0x22a1f5;
},
'UQRFb': '2000',
'wwUUs': function(_0x1e2526, _0x460646) {
return _0x1e2526(_0x460646);
},
'rqdHg': '2003',
'RFYwz': '8.1',
'VwpDM': function(_0xaa1cb5, _0xe1fb5) {
return _0xaa1cb5 === _0xe1fb5;
},
'ijcZr': 'android',
'wsPCu': function(_0x4cffe7, _0x13c2c0) {
return _0x4cffe7(_0x13c2c0);
},
'CUddb': function(_0xf3d86b, _0x13613b) {
return _0xf3d86b === _0x13613b;
},
'UcAvE': function(_0x303653, _0x1050a9) {
return _0x303653 === _0x1050a9;
},
'UPKaK': 'desktop',
'Teriw': function(_0x562472, _0x18365e) {
return _0x562472 === _0x18365e;
},
'bSheG': function(_0x736c40, _0x28fa8c) {
return _0x736c40(_0x28fa8c);
},
'VSVPX': 'mobile',
'YLvkS': function(_0xcbe6ef, _0x62f17b) {
return _0xcbe6ef(_0x62f17b);
},
'IIJTU': 'webkit',
'VnwxS': 'edge',
'czVTJ': 'opera',
'nqrWh': function(_0x1a9d6b, _0x4f0983) {
return _0x1a9d6b(_0x4f0983);
},
'qWvjw': 'chrome',
'wcaLm': 'safari',
'kpgHP': function(_0x357cb4, _0x4ec618) {
return _0x357cb4(_0x4ec618);
},
'uZEiZ': function(_0x54d846, _0x45401a) {
return _0x54d846(_0x45401a);
},
'Bsdxk': 'firefox',
'brPia': function(_0x2698c5, _0x23fc33) {
return _0x2698c5(_0x23fc33);
},
'OfqeT': 'presto',
'CKdHS': function(_0x63167b, _0x50e9aa) {
return _0x63167b(_0x50e9aa);
},
'MOinO': 'trident',
'ubOMd': 'iexplore',
'Ucccc': function(_0x48de88, _0x7d49d6) {
return _0x48de88(_0x7d49d6);
},
'SnFUd': function(_0x45a987, _0x4a0ed4) {
return _0x45a987 === _0x4a0ed4;
},
'dFIVJ': 'gecko',
'wTQFv': function(_0x583a15, _0x1bad90) {
return _0x583a15(_0x1bad90);
},
'ShzBA': function(_0x299d61, _0x828843) {
return _0x299d61 === _0x828843;
},
'eMRyr': function(_0x5d0702, _0x2beb52) {
return _0x5d0702(_0x2beb52);
},
'IKmjV': function(_0x233069, _0x42f6c1) {
return _0x233069 === _0x42f6c1;
},
'TglAC': function(_0x1783e0, _0x1acb96) {
return _0x1783e0 === _0x1acb96;
},
'GIWpy': function(_0xea74a9, _0x40e03a) {
return _0xea74a9 === _0x40e03a;
},
'LSFzT': function(_0x2de986, _0x176669) {
return _0x2de986(_0x176669);
},
'JVzaP': function(_0x586484, _0x30862f) {
return _0x586484(_0x30862f);
},
'vnhkW': function(_0x527125, _0x3ef155) {
return _0x527125(_0x3ef155);
},
'bFQSo': function(_0x456f13, _0x4d29b3) {
return _0x456f13(_0x4d29b3);
},
'mucVu': function(_0x1fc559, _0x1b76da) {
return _0x1fc559(_0x1b76da);
},
'ndklM': function(_0xb3a50b, _0x49d22e) {
return _0xb3a50b(_0x49d22e);
},
'aKRfW': '2345',
'JvNSR': 'sougou',
'iEjLM': 'liebao',
'mFXYd': function(_0x401402, _0x100996) {
return _0x401402(_0x100996);
},
'Fkpwj': 'maxthon'
};
const _0x445504 = navigator['userAgent']['toLowerCase']();
const _0x38e894 = _0x5bff6b=>_0x5bff6b['test'](_0x445504);
const _0x585fad = _0x9bfeb0=>_0x445504['match'](_0x9bfeb0)['toString']()['replace'](/[^0-9|_.]/g, '')['replace'](/_/g, '.');
let _0x52bf77 = _0x227afe['yHOEV'];
if (_0x227afe['wzENk'](_0x38e894, /windows|win32|win64|wow32|wow64/g)) {
_0x52bf77 = _0x227afe['wsWEe'];
} else if (_0x227afe['wzENk'](_0x38e894, /macintosh|macintel/g)) {
_0x52bf77 = _0x227afe['xTHMm'];
} else if (_0x227afe['yavth'](_0x38e894, /x11/g)) {
_0x52bf77 = _0x227afe['azgCA'];
} else if (_0x227afe['nGybX'](_0x38e894, /android|adr/g)) {
_0x52bf77 = 'android';
} else if (_0x227afe['nGybX'](_0x38e894, /ios|iphone|ipad|ipod|iwatch/g)) {
_0x52bf77 = _0x227afe['INJwr'];
}
let _0x4a314b = 'unknow';
if (_0x227afe['hZWNh'](_0x52bf77, _0x227afe['wsWEe'])) {
if (_0x227afe['nGybX'](_0x38e894, /windows nt 5.0|windows 2000/g)) {
_0x4a314b = _0x227afe['UQRFb'];
} else if (_0x38e894(/windows nt 5.1|windows xp/g)) {
_0x4a314b = 'xp';
} else if (_0x227afe['wwUUs'](_0x38e894, /windows nt 5.2|windows 2003/g)) {
_0x4a314b = _0x227afe['rqdHg'];
} else if (_0x227afe['wwUUs'](_0x38e894, /windows nt 6.0|windows vista/g)) {
_0x4a314b = 'vista';
} else if (_0x38e894(/windows nt 6.1|windows 7/g)) {
_0x4a314b = '7';
} else if (_0x38e894(/windows nt 6.2|windows 8/g)) {
_0x4a314b = '8';
} else if (_0x38e894(/windows nt 6.3|windows 8.1/g)) {
_0x4a314b = _0x227afe['RFYwz'];
} else if (_0x38e894(/windows nt 10.0|windows 10/g)) {
_0x4a314b = '10';
}
} else if (_0x227afe['hZWNh'](_0x52bf77, 'macos')) {
_0x4a314b = _0x227afe['wwUUs'](_0x585fad, /os x [\d._]+/g);
} else if (_0x227afe['VwpDM'](_0x52bf77, _0x227afe['ijcZr'])) {
_0x4a314b = _0x227afe['wsPCu'](_0x585fad, /android [\d._]+/g);
} else if (_0x227afe['CUddb'](_0x52bf77, _0x227afe['INJwr'])) {
_0x4a314b = _0x585fad(/os [\d._]+/g);
}
let _0x19ea9e = _0x227afe['yHOEV'];
if (_0x227afe['UcAvE'](_0x52bf77, _0x227afe['wsWEe']) || _0x227afe['UcAvE'](_0x52bf77, 'macos') || _0x52bf77 === 'linux') {
_0x19ea9e = _0x227afe['UPKaK'];
} else if (_0x52bf77 === 'android' || _0x227afe['Teriw'](_0x52bf77, _0x227afe['INJwr']) || _0x227afe['bSheG'](_0x38e894, /mobile/g)) {
_0x19ea9e = _0x227afe['VSVPX'];
}
let _0x184415 = 'unknow';
let _0x51795a = 'unknow';
if (_0x227afe['YLvkS'](_0x38e894, /applewebkit/g)) {
_0x184415 = _0x227afe['IIJTU'];
if (_0x38e894(/edge/g)) {
_0x51795a = _0x227afe['VnwxS'];
} else if (_0x227afe['YLvkS'](_0x38e894, /opr/g)) {
_0x51795a = _0x227afe['czVTJ'];
} else if (_0x227afe['nqrWh'](_0x38e894, /chrome/g)) {
_0x51795a = _0x227afe['qWvjw'];
} else if (_0x38e894(/safari/g)) {
_0x51795a = _0x227afe['wcaLm'];
}
} else if (_0x227afe['kpgHP'](_0x38e894, /gecko/g) && _0x227afe['uZEiZ'](_0x38e894, /firefox/g)) {
_0x184415 = 'gecko';
_0x51795a = _0x227afe['Bsdxk'];
} else if (_0x227afe['brPia'](_0x38e894, /presto/g)) {
_0x184415 = _0x227afe['OfqeT'];
_0x51795a = _0x227afe['czVTJ'];
} else if (_0x227afe['CKdHS'](_0x38e894, /trident|compatible|msie/g)) {
_0x184415 = _0x227afe['MOinO'];
_0x51795a = _0x227afe['ubOMd'];
}
let _0xb5f01a = 'unknow';
if (_0x227afe['Teriw'](_0x184415, _0x227afe['IIJTU'])) {
_0xb5f01a = _0x227afe['Ucccc'](_0x585fad, /applewebkit\/[\d._]+/g);
} else if (_0x227afe['SnFUd'](_0x184415, _0x227afe['dFIVJ'])) {
_0xb5f01a = _0x227afe['wTQFv'](_0x585fad, /gecko\/[\d._]+/g);
} else if (_0x227afe['ShzBA'](_0x184415, _0x227afe['OfqeT'])) {
_0xb5f01a = _0x227afe['wTQFv'](_0x585fad, /presto\/[\d._]+/g);
} else if (_0x184415 === _0x227afe['MOinO']) {
_0xb5f01a = _0x227afe['eMRyr'](_0x585fad, /trident\/[\d._]+/g);
}
let _0x4349d5 = _0x227afe['yHOEV'];
if (_0x227afe['IKmjV'](_0x51795a, _0x227afe['qWvjw'])) {
_0x4349d5 = _0x585fad(/chrome\/[\d._]+/g);
} else if (_0x227afe['TglAC'](_0x51795a, 'safari')) {
_0x4349d5 = _0x585fad(/version\/[\d._]+/g);
} else if (_0x51795a === _0x227afe['Bsdxk']) {
_0x4349d5 = _0x227afe['eMRyr'](_0x585fad, /firefox\/[\d._]+/g);
} else if (_0x227afe['TglAC'](_0x51795a, _0x227afe['czVTJ'])) {
_0x4349d5 = _0x585fad(/opr\/[\d._]+/g);
} else if (_0x227afe['GIWpy'](_0x51795a, _0x227afe['ubOMd'])) {
_0x4349d5 = _0x227afe['eMRyr'](_0x585fad, /(msie [\d._]+)|(rv:[\d._]+)/g);
} else if (_0x227afe['GIWpy'](_0x51795a, _0x227afe['VnwxS'])) {
_0x4349d5 = _0x227afe['LSFzT'](_0x585fad, /edge\/[\d._]+/g);
}
let _0x59a33a = 'none';
let _0x25de0d = 'unknow';
if (_0x227afe['LSFzT'](_0x38e894, /micromessenger/g)) {
_0x59a33a = 'wechat';
_0x25de0d = _0x227afe['JVzaP'](_0x585fad, /micromessenger\/[\d._]+/g);
} else if (_0x38e894(/qqbrowser/g)) {
_0x59a33a = 'qq';
_0x25de0d = _0x227afe['JVzaP'](_0x585fad, /qqbrowser\/[\d._]+/g);
} else if (_0x227afe['vnhkW'](_0x38e894, /ucbrowser/g)) {
_0x59a33a = 'uc';
_0x25de0d = _0x227afe['bFQSo'](_0x585fad, /ucbrowser\/[\d._]+/g);
} else if (_0x227afe['mucVu'](_0x38e894, /qihu 360se/g)) {
_0x59a33a = '360';
} else if (_0x227afe['ndklM'](_0x38e894, /2345explorer/g)) {
_0x59a33a = _0x227afe['aKRfW'];
_0x25de0d = _0x585fad(/2345explorer\/[\d._]+/g);
} else if (_0x227afe['ndklM'](_0x38e894, /metasr/g)) {
_0x59a33a = _0x227afe['JvNSR'];
} else if (_0x227afe['ndklM'](_0x38e894, /lbbrowser/g)) {
_0x59a33a = _0x227afe['iEjLM'];
} else if (_0x227afe['mFXYd'](_0x38e894, /maxthon/g)) {
_0x59a33a = _0x227afe['Fkpwj'];
_0x25de0d = _0x227afe['mFXYd'](_0x585fad, /maxthon\/[\d._]+/g);
}
return Object['assign']({
'engine': _0x184415,
'engineVs': _0xb5f01a,
'platform': _0x19ea9e,
'supporter': _0x51795a,
'supporterVs': _0x4349d5,
'system': _0x52bf77,
'systemVs': _0x4a314b
}, _0x227afe['GIWpy'](_0x59a33a, 'none') ? {} : {
'shell': _0x59a33a,
'shellVs': _0x25de0d
});
}
var _0xafb7 = ['0123456789abcdef', 'charAt', 'length', 'abc', '900150983cd24fb0d6963f7d28e17f72', 'concat', 'charCodeAt', '0123456789ABCDEF'];
(function(_0x308400, _0x4dd0d5) {
var _0x55a1b9 = function(_0x42a510) {
while (--_0x42a510) {
_0x308400['push'](_0x308400['shift']());
}
};
_0x55a1b9(++_0x4dd0d5);
}(_0xafb7, 0x132));
var _0x4f75 = function(_0x20aa38, _0x3feb9f) {
_0x20aa38 = _0x20aa38 - 0x0;
var _0x442357 = _0xafb7[_0x20aa38];
return _0x442357;
};
var hexcase = 0x0;
var b64pad = '';
var chrsz = 0x8;
function get_data() {
var _0x49dc93 = {
'ObbQh': function(_0x4cc272) {
return _0x4cc272();
}
};
result = '';
if (1600 || 900) {
result = _0x49dc93['ObbQh'](___get_data);
}
return result;
}
function ___get_data() {
var _0xd1d5bb = {
'chYzh': function(_0x3214e3, _0x5ecab4) {
return _0x3214e3(_0x5ecab4);
},
'EyjPx': function(_0x37547a, _0x58a366, _0x1463fd) {
return _0x37547a(_0x58a366, _0x1463fd);
},
'oWocp': '0x0'
};
_0x3066e8 = 'NightTeam';
return _0xd1d5bb['chYzh'](binl2hex, _0xd1d5bb['EyjPx'](core__0x5f3, _0xd1d5bb['chYzh'](str2binl, _0x3066e8), _0x3066e8[_0x4f75(_0xd1d5bb['oWocp'])] * chrsz));
}
function b64__0x5f3(_0x285afb) {
return binl2b64(core__0x5f3(str2binl(_0x285afb), _0x285afb[_0x4f75('0x0')] * chrsz));
}
function str__0x5f3(_0x508693) {
return binl2str(core__0x5f3(str2binl(_0x508693), _0x508693[_0x4f75('0x0')] * chrsz));
}
function hex_hmac__0x5f3(_0x51842a, _0x49cf0a) {
return binl2hex(core_hmac__0x5f3(_0x51842a, _0x49cf0a));
}
function b64_hmac__0x5f3(_0x32ca2c, _0x564ce2) {
return binl2b64(core_hmac__0x5f3(_0x32ca2c, _0x564ce2));
}
function str_hmac__0x5f3(_0x2b5ae9, _0x33e2bc) {
return binl2str(core_hmac__0x5f3(_0x2b5ae9, _0x33e2bc));
}
function _0x5f3_vm_test() {
return hex__0x5f3(_0x4f75('0x1')) == _0x4f75('0x2');
}
function core__0x5f3(_0x29b141, _0x1d205c) {
_0x29b141[_0x1d205c >> 0x5] |= 0x80 << _0x1d205c % 0x20;
_0x29b141[(_0x1d205c + 0x40 >>> 0x9 << 0x4) + 0xe] = _0x1d205c;
var _0x2ca934 = 0x67452301;
var _0x37ae64 = -0x10325477;
var _0x25776a = -0x67452302;
var _0x225e4c = 0x10325476;
for (var _0x13a45d = 0x0; _0x13a45d < _0x29b141['length']; _0x13a45d += 0x10) {
var _0x588610 = _0x2ca934;
var _0x12af01 = _0x37ae64;
var _0x233171 = _0x25776a;
var _0x4c36c3 = _0x225e4c;
_0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x0], 0x7, -0x28955b88);
_0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x1], 0xc, -0x173848aa);
_0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x2], 0x11, 0x242070db);
_0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x3], 0x16, -0x3e423112);
_0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x4], 0x7, -0xa83f051);
_0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x5], 0xc, 0x4787c62a);
_0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x6], 0x11, -0x57cfb9ed);
_0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x7], 0x16, -0x2b96aff);
_0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x8], 0x7, 0x698098d8);
_0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x9], 0xc, -0x74bb0851);
_0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xa], 0x11, -0xa44f);
_0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xb], 0x16, -0x76a32842);
_0x2ca934 = _0x5f3_ff(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xc], 0x7, 0x6b901122);
_0x225e4c = _0x5f3_ff(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xd], 0xc, -0x2678e6d);
_0x25776a = _0x5f3_ff(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xe], 0x11, -0x5986bc72);
_0x37ae64 = _0x5f3_ff(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xf], 0x16, 0x49b40821);
_0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x1], 0x5, -0x9e1da9e);
_0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x6], 0x9, -0x3fbf4cc0);
_0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xb], 0xe, 0x265e5a51);
_0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x0], 0x14, -0x16493856);
_0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x5], 0x5, -0x29d0efa3);
_0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xa], 0x9, 0x2441453);
_0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xf], 0xe, -0x275e197f);
_0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x4], 0x14, -0x182c0438);
_0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x9], 0x5, 0x21e1cde6);
_0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xe], 0x9, -0x3cc8f82a);
_0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x3], 0xe, -0xb2af279);
_0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x8], 0x14, 0x455a14ed);
_0x2ca934 = _0x5f3_gg(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xd], 0x5, -0x561c16fb);
_0x225e4c = _0x5f3_gg(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x2], 0x9, -0x3105c08);
_0x25776a = _0x5f3_gg(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x7], 0xe, 0x676f02d9);
_0x37ae64 = _0x5f3_gg(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xc], 0x14, -0x72d5b376);
_0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x5], 0x4, -0x5c6be);
_0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x8], 0xb, -0x788e097f);
_0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xb], 0x10, 0x6d9d6122);
_0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xe], 0x17, -0x21ac7f4);
_0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x1], 0x4, -0x5b4115bc);
_0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x4], 0xb, 0x4bdecfa9);
_0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x7], 0x10, -0x944b4a0);
_0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xa], 0x17, -0x41404390);
_0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xd], 0x4, 0x289b7ec6);
_0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x0], 0xb, -0x155ed806);
_0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x3], 0x10, -0x2b10cf7b);
_0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x6], 0x17, 0x4881d05);
_0x2ca934 = _0x5f3_hh(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x9], 0x4, -0x262b2fc7);
_0x225e4c = _0x5f3_hh(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xc], 0xb, -0x1924661b);
_0x25776a = _0x5f3_hh(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xf], 0x10, 0x1fa27cf8);
_0x37ae64 = _0x5f3_hh(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x2], 0x17, -0x3b53a99b);
_0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x0], 0x6, -0xbd6ddbc);
_0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x7], 0xa, 0x432aff97);
_0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xe], 0xf, -0x546bdc59);
_0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x5], 0x15, -0x36c5fc7);
_0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0xc], 0x6, 0x655b59c3);
_0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0x3], 0xa, -0x70f3336e);
_0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0xa], 0xf, -0x100b83);
_0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x1], 0x15, -0x7a7ba22f);
_0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x8], 0x6, 0x6fa87e4f);
_0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xf], 0xa, -0x1d31920);
_0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x6], 0xf, -0x5cfebcec);
_0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0xd], 0x15, 0x4e0811a1);
_0x2ca934 = _0x5f3_ii(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c, _0x29b141[_0x13a45d + 0x4], 0x6, -0x8ac817e);
_0x225e4c = _0x5f3_ii(_0x225e4c, _0x2ca934, _0x37ae64, _0x25776a, _0x29b141[_0x13a45d + 0xb], 0xa, -0x42c50dcb);
_0x25776a = _0x5f3_ii(_0x25776a, _0x225e4c, _0x2ca934, _0x37ae64, _0x29b141[_0x13a45d + 0x2], 0xf, 0x2ad7d2bb);
_0x37ae64 = _0x5f3_ii(_0x37ae64, _0x25776a, _0x225e4c, _0x2ca934, _0x29b141[_0x13a45d + 0x9], 0x15, -0x14792c6f);
_0x2ca934 = safe_add(_0x2ca934, _0x588610);
_0x37ae64 = safe_add(_0x37ae64, _0x12af01);
_0x25776a = safe_add(_0x25776a, _0x233171);
_0x225e4c = safe_add(_0x225e4c, _0x4c36c3);
}
return Array(_0x2ca934, _0x37ae64, _0x25776a, _0x225e4c);
}
function _0x5f3_cmn(_0x37bd03, _0x204785, _0x4c8136, _0x4df7e5, _0x8adaae, _0x1bb5d5) {
return safe_add(bit_rol(safe_add(safe_add(_0x204785, _0x37bd03), safe_add(_0x4df7e5, _0x1bb5d5)), _0x8adaae), _0x4c8136);
}
function _0x5f3_ff(_0x592bc7, _0x27110f, _0x192e0e, _0x56094f, _0xf3c246, _0x3e601b, _0x5424f7) {
return _0x5f3_cmn(_0x27110f & _0x192e0e | ~_0x27110f & _0x56094f, _0x592bc7, _0x27110f, _0xf3c246, _0x3e601b, _0x5424f7);
}
function _0x5f3_gg(_0x133b26, _0x4f6e2b, _0x43870f, _0x3221b7, _0x5749c4, _0x4a7548, _0x2eeb85) {
return _0x5f3_cmn(_0x4f6e2b & _0x3221b7 | _0x43870f & ~_0x3221b7, _0x133b26, _0x4f6e2b, _0x5749c4, _0x4a7548, _0x2eeb85);
}
function _0x5f3_hh(_0x182bcc, _0x5983ea, _0x15f735, _0x53f395, _0x346932, _0x1845cc, _0x3c026d) {
return _0x5f3_cmn(_0x5983ea ^ _0x15f735 ^ _0x53f395, _0x182bcc, _0x5983ea, _0x346932, _0x1845cc, _0x3c026d);
}
function _0x5f3_ii(_0x51638c, _0x39d5b9, _0x5aa690, _0x332e8b, _0x40b6d3, _0x1f7f3b, _0x4a5089) {
return _0x5f3_cmn(_0x5aa690 ^ (_0x39d5b9 | ~_0x332e8b), _0x51638c, _0x39d5b9, _0x40b6d3, _0x1f7f3b, _0x4a5089);
}
function core_hmac__0x5f3(_0x3c9f1f, _0x24bf57) {
var _0xce47a9 = str2binl(_0x3c9f1f);
if (_0xce47a9[_0x4f75('0x0')] > 0x10)
_0xce47a9 = core__0x5f3(_0xce47a9, _0x3c9f1f['length'] * chrsz);
var _0x201e5e = Array(0x10)
, _0x3e6b17 = Array(0x10);
for (var _0x1a9e62 = 0x0; _0x1a9e62 < 0x10; _0x1a9e62++) {
_0x201e5e[_0x1a9e62] = _0xce47a9[_0x1a9e62] ^ 0x36363636;
_0x3e6b17[_0x1a9e62] = _0xce47a9[_0x1a9e62] ^ 0x5c5c5c5c;
}
var _0x32b17d = core__0x5f3(_0x201e5e[_0x4f75('0x3')](str2binl(_0x24bf57)), 0x200 + _0x24bf57[_0x4f75('0x0')] * chrsz);
return core__0x5f3(_0x3e6b17[_0x4f75('0x3')](_0x32b17d), 0x200 + 0x80);
}
function safe_add(_0x17d6bb, _0x338b5a) {
var _0x1da9a = (_0x17d6bb & 0xffff) + (_0x338b5a & 0xffff);
var _0x30eeed = (_0x17d6bb >> 0x10) + (_0x338b5a >> 0x10) + (_0x1da9a >> 0x10);
return _0x30eeed << 0x10 | _0x1da9a & 0xffff;
}
function bit_rol(_0x29570a, _0x50c5a5) {
return _0x29570a << _0x50c5a5 | _0x29570a >>> 0x20 - _0x50c5a5;
}
function str2binl(_0x564301) {
var _0x8000e = Array();
var _0x5384bf = (0x1 << chrsz) - 0x1;
for (var _0x4eff36 = 0x0; _0x4eff36 < _0x564301[_0x4f75('0x0')] * chrsz; _0x4eff36 += chrsz)
_0x8000e[_0x4eff36 >> 0x5] |= (_0x564301[_0x4f75('0x4')](_0x4eff36 / chrsz) & _0x5384bf) << _0x4eff36 % 0x20;
return _0x8000e;
}
function binl2str(_0x1591a0) {
var _0x48bf42 = '';
var _0x330495 = (0x1 << chrsz) - 0x1;
for (var _0x1d9e6e = 0x0; _0x1d9e6e < _0x1591a0[_0x4f75('0x0')] * 0x20; _0x1d9e6e += chrsz)
_0x48bf42 += String['fromCharCode'](_0x1591a0[_0x1d9e6e >> 0x5] >>> _0x1d9e6e % 0x20 & _0x330495);
return _0x48bf42;
}
function binl2hex(_0x2b2030) {
var _0x3b523a = hexcase ? _0x4f75('0x5') : _0x4f75('0x6');
var _0x580323 = '';
for (var _0x3c558a = 0x0; _0x3c558a < _0x2b2030[_0x4f75('0x0')] * 0x4; _0x3c558a++) {
_0x580323 += _0x3b523a['charAt'](_0x2b2030[_0x3c558a >> 0x2] >> _0x3c558a % 0x4 * 0x8 + 0x4 & 0xf) + _0x3b523a[_0x4f75('0x7')](_0x2b2030[_0x3c558a >> 0x2] >> _0x3c558a % 0x4 * 0x8 & 0xf);
}
return _0x580323;
}
function binl2b64(_0xbf0e43) {
var _0x5c1f17 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var _0x50c415 = '';
for (var _0x30f226 = 0x0; _0x30f226 < _0xbf0e43[_0x4f75('0x0')] * 0x4; _0x30f226 += 0x3) {
var _0x13031f = (_0xbf0e43[_0x30f226 >> 0x2] >> 0x8 * (_0x30f226 % 0x4) & 0xff) << 0x10 | (_0xbf0e43[_0x30f226 + 0x1 >> 0x2] >> 0x8 * ((_0x30f226 + 0x1) % 0x4) & 0xff) << 0x8 | _0xbf0e43[_0x30f226 + 0x2 >> 0x2] >> 0x8 * ((_0x30f226 + 0x2) % 0x4) & 0xff;
for (var _0x25968b = 0x0; _0x25968b < 0x4; _0x25968b++) {
if (_0x30f226 * 0x8 + _0x25968b * 0x6 > _0xbf0e43[_0x4f75('0x0')] * 0x20)
_0x50c415 += b64pad;
else
_0x50c415 += _0x5c1f17[_0x4f75('0x7')](_0x13031f >> 0x6 * (0x3 - _0x25968b) & 0x3f);
}
}
return _0x50c415;
}
console.log(get_data());

View File

@ -0,0 +1,23 @@
1打开浏览器开发者工具全局搜索 get_data在console中打印 get_data() 返回
1c28252a6a52a30aedcd18a75d127d13
2将代码复制node.js运行代码发现
if (screen['width'] || screen['height']) {
result = _0x49dc93['ObbQh'](___get_data);
}
return result;
3替换为
if (1600 || 900) {
result = _0x49dc93['ObbQh'](___get_data);
}
return result;
运行打印
1c28252a6a52a30aedcd18a75d127d13
1c28252a6a52a30a

View File

@ -0,0 +1,311 @@
var _0x4818 = ['\x63\x73\x4b\x48\x77\x71\x4d\x49', '\x5a\x73\x4b\x4a\x77\x72\x38\x56\x65\x41\x73\x79', '\x55\x63\x4b\x69\x4e\x38\x4f\x2f\x77\x70\x6c\x77\x4d\x41\x3d\x3d', '\x4a\x52\x38\x43\x54\x67\x3d\x3d', '\x59\x73\x4f\x6e\x62\x53\x45\x51\x77\x37\x6f\x7a\x77\x71\x5a\x4b\x65\x73\x4b\x55\x77\x37\x6b\x77\x58\x38\x4f\x52\x49\x51\x3d\x3d', '\x77\x37\x6f\x56\x53\x38\x4f\x53\x77\x6f\x50\x43\x6c\x33\x6a\x43\x68\x4d\x4b\x68\x77\x36\x48\x44\x6c\x73\x4b\x58\x77\x34\x73\x2f\x59\x73\x4f\x47', '\x66\x77\x56\x6d\x49\x31\x41\x74\x77\x70\x6c\x61\x59\x38\x4f\x74\x77\x35\x63\x4e\x66\x53\x67\x70\x77\x36\x4d\x3d', '\x4f\x63\x4f\x4e\x77\x72\x6a\x43\x71\x73\x4b\x78\x54\x47\x54\x43\x68\x73\x4f\x6a\x45\x57\x45\x38\x50\x63\x4f\x63\x4a\x38\x4b\x36', '\x55\x38\x4b\x35\x4c\x63\x4f\x74\x77\x70\x56\x30\x45\x4d\x4f\x6b\x77\x34\x37\x44\x72\x4d\x4f\x58', '\x48\x4d\x4f\x32\x77\x6f\x48\x43\x69\x4d\x4b\x39\x53\x6c\x58\x43\x6c\x63\x4f\x6f\x43\x31\x6b\x3d', '\x61\x73\x4b\x49\x77\x71\x4d\x44\x64\x67\x4d\x75\x50\x73\x4f\x4b\x42\x4d\x4b\x63\x77\x72\x72\x43\x74\x6b\x4c\x44\x72\x4d\x4b\x42\x77\x36\x34\x64', '\x77\x71\x49\x6d\x4d\x54\x30\x74\x77\x36\x52\x4e\x77\x35\x6b\x3d', '\x44\x4d\x4b\x63\x55\x30\x4a\x6d\x55\x77\x55\x76', '\x56\x6a\x48\x44\x6c\x4d\x4f\x48\x56\x63\x4f\x4e\x58\x33\x66\x44\x69\x63\x4b\x4a\x48\x51\x3d\x3d', '\x77\x71\x68\x42\x48\x38\x4b\x6e\x77\x34\x54\x44\x68\x53\x44\x44\x67\x4d\x4f\x64\x77\x72\x6a\x43\x6e\x63\x4f\x57\x77\x70\x68\x68\x4e\x38\x4b\x43\x47\x63\x4b\x71\x77\x36\x64\x48\x41\x55\x35\x2b\x77\x72\x67\x32\x4a\x63\x4b\x61\x77\x34\x49\x45\x4a\x63\x4f\x63\x77\x72\x52\x4a\x77\x6f\x5a\x30\x77\x71\x46\x39\x59\x67\x41\x56', '\x64\x7a\x64\x32\x77\x35\x62\x44\x6d\x33\x6a\x44\x70\x73\x4b\x33\x77\x70\x59\x3d', '\x77\x34\x50\x44\x67\x63\x4b\x58\x77\x6f\x33\x43\x6b\x63\x4b\x4c\x77\x72\x35\x71\x77\x72\x59\x3d', '\x77\x72\x4a\x4f\x54\x63\x4f\x51\x57\x4d\x4f\x67', '\x77\x71\x54\x44\x76\x63\x4f\x6a\x77\x34\x34\x37\x77\x72\x34\x3d', '\x77\x35\x58\x44\x71\x73\x4b\x68\x4d\x46\x31\x2f', '\x77\x72\x41\x79\x48\x73\x4f\x66\x77\x70\x70\x63', '\x4a\x33\x64\x56\x50\x63\x4f\x78\x4c\x67\x3d\x3d', '\x77\x72\x64\x48\x77\x37\x70\x39\x5a\x77\x3d\x3d', '\x77\x34\x72\x44\x6f\x38\x4b\x6d\x4e\x45\x77\x3d', '\x49\x4d\x4b\x41\x55\x6b\x42\x74', '\x77\x36\x62\x44\x72\x63\x4b\x51\x77\x70\x56\x48\x77\x70\x4e\x51\x77\x71\x55\x3d', '\x64\x38\x4f\x73\x57\x68\x41\x55\x77\x37\x59\x7a\x77\x72\x55\x3d', '\x77\x71\x6e\x43\x6b\x73\x4f\x65\x65\x7a\x72\x44\x68\x77\x3d\x3d', '\x55\x73\x4b\x6e\x49\x4d\x4b\x57\x56\x38\x4b\x2f', '\x77\x34\x7a\x44\x6f\x63\x4b\x38\x4e\x55\x5a\x76', '\x63\x38\x4f\x78\x5a\x68\x41\x4a\x77\x36\x73\x6b\x77\x71\x4a\x6a', '\x50\x63\x4b\x49\x77\x34\x6e\x43\x6b\x6b\x56\x62', '\x4b\x48\x67\x6f\x64\x4d\x4f\x32\x56\x51\x3d\x3d', '\x77\x70\x73\x6d\x77\x71\x76\x44\x6e\x47\x46\x71', '\x77\x71\x4c\x44\x74\x38\x4f\x6b\x77\x34\x63\x3d', '\x77\x37\x77\x31\x77\x34\x50\x43\x70\x73\x4f\x34\x77\x71\x41\x3d', '\x77\x71\x39\x46\x52\x73\x4f\x71\x57\x4d\x4f\x71', '\x62\x79\x42\x68\x77\x37\x72\x44\x6d\x33\x34\x3d', '\x4c\x48\x67\x2b\x53\x38\x4f\x74\x54\x77\x3d\x3d', '\x77\x71\x68\x4f\x77\x37\x31\x35\x64\x73\x4f\x48', '\x55\x38\x4f\x37\x56\x73\x4f\x30\x77\x71\x76\x44\x76\x63\x4b\x75\x4b\x73\x4f\x71\x58\x38\x4b\x72', '\x59\x69\x74\x74\x77\x35\x44\x44\x6e\x57\x6e\x44\x72\x41\x3d\x3d', '\x59\x4d\x4b\x49\x77\x71\x55\x55\x66\x67\x49\x6b', '\x61\x42\x37\x44\x6c\x4d\x4f\x44\x54\x51\x3d\x3d', '\x77\x70\x66\x44\x68\x38\x4f\x72\x77\x36\x6b\x6b', '\x77\x37\x76\x43\x71\x4d\x4f\x72\x59\x38\x4b\x41\x56\x6b\x35\x4f\x77\x70\x6e\x43\x75\x38\x4f\x61\x58\x73\x4b\x5a\x50\x33\x44\x43\x6c\x63\x4b\x79\x77\x36\x48\x44\x72\x51\x3d\x3d', '\x77\x6f\x77\x2b\x77\x36\x76\x44\x6d\x48\x70\x73\x77\x37\x52\x74\x77\x6f\x39\x38\x4c\x43\x37\x43\x69\x47\x37\x43\x6b\x73\x4f\x52\x54\x38\x4b\x6c\x57\x38\x4f\x35\x77\x72\x33\x44\x69\x38\x4f\x54\x48\x73\x4f\x44\x65\x48\x6a\x44\x6d\x63\x4b\x6c\x4a\x73\x4b\x71\x56\x41\x3d\x3d', '\x4e\x77\x56\x2b', '\x77\x37\x48\x44\x72\x63\x4b\x74\x77\x70\x4a\x61\x77\x70\x5a\x62', '\x77\x70\x51\x73\x77\x71\x76\x44\x69\x48\x70\x75\x77\x36\x49\x3d', '\x59\x4d\x4b\x55\x77\x71\x4d\x4a\x5a\x51\x3d\x3d', '\x4b\x48\x31\x56\x4b\x63\x4f\x71\x4b\x73\x4b\x31', '\x66\x51\x35\x73\x46\x55\x6b\x6b\x77\x70\x49\x3d', '\x77\x72\x76\x43\x72\x63\x4f\x42\x52\x38\x4b\x6b', '\x4d\x33\x77\x30\x66\x51\x3d\x3d', '\x77\x36\x78\x58\x77\x71\x50\x44\x76\x4d\x4f\x46\x77\x6f\x35\x64'];
(function (_0x4c97f0, _0x1742fd) {
var _0x4db1c = function (_0x48181e) {
while (--_0x48181e) {
_0x4c97f0['\x70\x75\x73\x68'](_0x4c97f0['\x73\x68\x69\x66\x74']());
}
};
var _0x3cd6c6 = function () {
var _0xb8360b = {
'\x64\x61\x74\x61': {
'\x6b\x65\x79': '\x63\x6f\x6f\x6b\x69\x65',
'\x76\x61\x6c\x75\x65': '\x74\x69\x6d\x65\x6f\x75\x74'
}, '\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65': function (_0x20bf34, _0x3e840e, _0x5693d3, _0x5e8b26) {
_0x5e8b26 = _0x5e8b26 || {};
var _0xba82f0 = _0x3e840e + '\x3d' + _0x5693d3;
var _0x5afe31 = 0x0;
for (var _0x5afe31 = 0x0, _0x178627 = _0x20bf34['\x6c\x65\x6e\x67\x74\x68']; _0x5afe31 < _0x178627; _0x5afe31++) {
var _0x41b2ff = _0x20bf34[_0x5afe31];
_0xba82f0 += '\x3b\x20' + _0x41b2ff;
var _0xd79219 = _0x20bf34[_0x41b2ff];
_0x20bf34['\x70\x75\x73\x68'](_0xd79219);
_0x178627 = _0x20bf34['\x6c\x65\x6e\x67\x74\x68'];
if (_0xd79219 !== !![]) {
_0xba82f0 += '\x3d' + _0xd79219;
}
}
_0x5e8b26['\x63\x6f\x6f\x6b\x69\x65'] = _0xba82f0;
}, '\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65': function () {
return '\x64\x65\x76';
}, '\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65': function (_0x4a11fe, _0x189946) {
_0x4a11fe = _0x4a11fe || function (_0x6259a2) {
return _0x6259a2;
};
var _0x25af93 = _0x4a11fe(new RegExp('\x28\x3f\x3a\x5e\x7c\x3b\x20\x29' + _0x189946['\x72\x65\x70\x6c\x61\x63\x65'](/([.$?*|{}()[]\/+^])/g, '\x24\x31') + '\x3d\x28\x5b\x5e\x3b\x5d\x2a\x29'));
var _0x52d57c = function (_0x105f59, _0x3fd789) {
_0x105f59(++_0x3fd789);
};
_0x52d57c(_0x4db1c, _0x1742fd);
return _0x25af93 ? decodeURIComponent(_0x25af93[0x1]) : undefined;
}
};
var _0x4a2aed = function () {
var _0x124d17 = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');
return _0x124d17['\x74\x65\x73\x74'](_0xb8360b['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
};
_0xb8360b['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65'] = _0x4a2aed;
var _0x2d67ec = '';
var _0x120551 = _0xb8360b['\x75\x70\x64\x61\x74\x65\x43\x6f\x6f\x6b\x69\x65']();
if (!_0x120551) {
_0xb8360b['\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65'](['\x2a'], '\x63\x6f\x75\x6e\x74\x65\x72', 0x1);
} else if (_0x120551) {
_0x2d67ec = _0xb8360b['\x67\x65\x74\x43\x6f\x6f\x6b\x69\x65'](null, '\x63\x6f\x75\x6e\x74\x65\x72');
} else {
_0xb8360b['\x72\x65\x6d\x6f\x76\x65\x43\x6f\x6f\x6b\x69\x65']();
}
};
_0x3cd6c6();
}(_0x4818, 0x15b));
var _0x55f3 = function (_0x4c97f0, _0x1742fd) {
var _0x4c97f0 = parseInt(_0x4c97f0, 0x10);
var _0x48181e = _0x4818[_0x4c97f0];
if (!_0x55f3['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']) {
(function () {
var _0xdf49c6 = Function('\x72\x65\x74\x75\x72\x6e\x20\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x29\x20' + '\x7b\x7d\x2e\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x28\x22\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x22\x29\x28\x29' + '\x29\x3b');
var _0xb8360b = _0xdf49c6();
var _0x389f44 = '\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';
_0xb8360b['\x61\x74\x6f\x62'] || (_0xb8360b['\x61\x74\x6f\x62'] = function (_0xba82f0) {
var _0xec6bb4 = String(_0xba82f0)['\x72\x65\x70\x6c\x61\x63\x65'](/=+$/, '');
for (var _0x1a0f04 = 0x0, _0x18c94e, _0x41b2ff, _0xd79219 = 0x0, _0x5792f7 = ''; _0x41b2ff = _0xec6bb4['\x63\x68\x61\x72\x41\x74'](_0xd79219++); ~_0x41b2ff && (_0x18c94e = _0x1a0f04 % 0x4 ? _0x18c94e * 0x40 + _0x41b2ff : _0x41b2ff, _0x1a0f04++ % 0x4) ? _0x5792f7 += String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff & _0x18c94e >> (-0x2 * _0x1a0f04 & 0x6)) : 0x0) {
_0x41b2ff = _0x389f44['\x69\x6e\x64\x65\x78\x4f\x66'](_0x41b2ff);
}
return _0x5792f7;
});
}());
_0x55f3['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64'] = !![];
}
if (!_0x55f3['\x72\x63\x34']) {
var _0x232678 = function (_0x401af1, _0x532ac0) {
var _0x45079a = [], _0x52d57c = 0x0, _0x105f59, _0x3fd789 = '', _0x4a2aed = '';
_0x401af1 = atob(_0x401af1);
for (var _0x124d17 = 0x0, _0x1b9115 = _0x401af1['\x6c\x65\x6e\x67\x74\x68']; _0x124d17 < _0x1b9115; _0x124d17++) {
_0x4a2aed += '\x25' + ('\x30\x30' + _0x401af1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x124d17)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);
}
_0x401af1 = decodeURIComponent(_0x4a2aed);
for (var _0x2d67ec = 0x0; _0x2d67ec < 0x100; _0x2d67ec++) {
_0x45079a[_0x2d67ec] = _0x2d67ec;
}
for (_0x2d67ec = 0x0; _0x2d67ec < 0x100; _0x2d67ec++) {
_0x52d57c = (_0x52d57c + _0x45079a[_0x2d67ec] + _0x532ac0['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2d67ec % _0x532ac0['\x6c\x65\x6e\x67\x74\x68'])) % 0x100;
_0x105f59 = _0x45079a[_0x2d67ec];
_0x45079a[_0x2d67ec] = _0x45079a[_0x52d57c];
_0x45079a[_0x52d57c] = _0x105f59;
}
_0x2d67ec = 0x0;
_0x52d57c = 0x0;
for (var _0x4e5ce2 = 0x0; _0x4e5ce2 < _0x401af1['\x6c\x65\x6e\x67\x74\x68']; _0x4e5ce2++) {
_0x2d67ec = (_0x2d67ec + 0x1) % 0x100;
_0x52d57c = (_0x52d57c + _0x45079a[_0x2d67ec]) % 0x100;
_0x105f59 = _0x45079a[_0x2d67ec];
_0x45079a[_0x2d67ec] = _0x45079a[_0x52d57c];
_0x45079a[_0x52d57c] = _0x105f59;
_0x3fd789 += String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x401af1['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4e5ce2) ^ _0x45079a[(_0x45079a[_0x2d67ec] + _0x45079a[_0x52d57c]) % 0x100]);
}
return _0x3fd789;
};
_0x55f3['\x72\x63\x34'] = _0x232678;
}
if (!_0x55f3['\x64\x61\x74\x61']) {
_0x55f3['\x64\x61\x74\x61'] = {};
}
if (_0x55f3['\x64\x61\x74\x61'][_0x4c97f0] === undefined) {
if (!_0x55f3['\x6f\x6e\x63\x65']) {
var _0x5f325c = function (_0x23a392) {
this['\x72\x63\x34\x42\x79\x74\x65\x73'] = _0x23a392;
this['\x73\x74\x61\x74\x65\x73'] = [0x1, 0x0, 0x0];
this['\x6e\x65\x77\x53\x74\x61\x74\x65'] = function () {
return '\x6e\x65\x77\x53\x74\x61\x74\x65';
};
this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65'] = '\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a';
this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65'] = '\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';
};
_0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65'] = function () {
var _0x19f809 = new RegExp(this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65'] + this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']);
return this['\x72\x75\x6e\x53\x74\x61\x74\x65'](_0x19f809['\x74\x65\x73\x74'](this['\x6e\x65\x77\x53\x74\x61\x74\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']()) ? --this['\x73\x74\x61\x74\x65\x73'][0x1] : --this['\x73\x74\x61\x74\x65\x73'][0x0]);
};
_0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x75\x6e\x53\x74\x61\x74\x65'] = function (_0x4380bd) {
if (!Boolean(~_0x4380bd)) {
return _0x4380bd;
}
return this['\x67\x65\x74\x53\x74\x61\x74\x65'](this['\x72\x63\x34\x42\x79\x74\x65\x73']);
};
_0x5f325c['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x65\x74\x53\x74\x61\x74\x65'] = function (_0x58d85e) {
for (var _0x1c9f5b = 0x0, _0x1ce9e0 = this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68']; _0x1c9f5b < _0x1ce9e0; _0x1c9f5b++) {
this['\x73\x74\x61\x74\x65\x73']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']()));
_0x1ce9e0 = this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68'];
}
return _0x58d85e(this['\x73\x74\x61\x74\x65\x73'][0x0]);
};
new _0x5f325c(_0x55f3)['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65']();
_0x55f3['\x6f\x6e\x63\x65'] = !![];
}
_0x48181e = _0x55f3['\x72\x63\x34'](_0x48181e, _0x1742fd);
_0x55f3['\x64\x61\x74\x61'][_0x4c97f0] = _0x48181e;
} else {
_0x48181e = _0x55f3['\x64\x61\x74\x61'][_0x4c97f0];
}
return _0x48181e;
};
var arg3 = null;
var arg4 = null;
var arg5 = null;
var arg6 = null;
var arg7 = null;
var arg8 = null;
var arg9 = null;
var arg10 = null;
var l = function () {
while (window[_0x55f3('0x1', '\x58\x4d\x57\x5e')] || window['\x5f\x5f\x70\x68\x61\x6e\x74\x6f\x6d\x61\x73']) {
}
;var _0x5e8b26 = _0x55f3('0x3', '\x6a\x53\x31\x59');
String[_0x55f3('0x5', '\x6e\x5d\x66\x52')][_0x55f3('0x6', '\x50\x67\x35\x34')] = function (_0x4e08d8) {
var _0x5a5d3b = '';
for (var _0xe89588 = 0x0; _0xe89588 < this[_0x55f3('0x8', '\x29\x68\x52\x63')] && _0xe89588 < _0x4e08d8[_0x55f3('0xa', '\x6a\x45\x26\x5e')]; _0xe89588 += 0x2) {
var _0x401af1 = parseInt(this[_0x55f3('0xb', '\x56\x32\x4b\x45')](_0xe89588, _0xe89588 + 0x2), 0x10);
var _0x105f59 = parseInt(_0x4e08d8[_0x55f3('0xd', '\x58\x4d\x57\x5e')](_0xe89588, _0xe89588 + 0x2), 0x10);
var _0x189e2c = (_0x401af1 ^ _0x105f59)[_0x55f3('0xf', '\x57\x31\x46\x45')](0x10);
if (_0x189e2c[_0x55f3('0x11', '\x4d\x47\x72\x76')] == 0x1) {
_0x189e2c = '\x30' + _0x189e2c;
}
_0x5a5d3b += _0x189e2c;
}
return _0x5a5d3b;
};
String['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65'][_0x55f3('0x14', '\x5a\x2a\x44\x4d')] = function () {
var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24];
var _0x4da0dc = [];
var _0x12605e = '';
for (var _0x20a7bf = 0x0; _0x20a7bf < this['\x6c\x65\x6e\x67\x74\x68']; _0x20a7bf++) {
var _0x385ee3 = this[_0x20a7bf];
for (var _0x217721 = 0x0; _0x217721 < _0x4b082b[_0x55f3('0x16', '\x61\x48\x2a\x4e')]; _0x217721++) {
if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) {
_0x4da0dc[_0x217721] = _0x385ee3;
}
}
}
_0x12605e = _0x4da0dc['\x6a\x6f\x69\x6e']('');
return _0x12605e;
};
var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();
arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);
setTimeout('\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29', 0x66a);
};
var _0x4db1c = function () {
function _0x355d23(_0x450614) {
if (('' + _0x450614 / _0x450614)[_0x55f3('0x1c', '\x56\x32\x4b\x45')] !== 0x1 || _0x450614 % 0x14 === 0x0) {
(function () {
}[_0x55f3('0x1d', '\x43\x4e\x55\x59')]((undefined + '')[0x2] + (!![] + '')[0x3] + ([][_0x55f3('0x1e', '\x77\x38\x50\x52')]() + '')[0x2] + (undefined + '')[0x0] + (![] + [0x0] + String)[0x14] + (![] + [0x0] + String)[0x14] + (!![] + '')[0x3] + (!![] + '')[0x1])());
} else {
(function () {
}['\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72']((undefined + '')[0x2] + (!![] + '')[0x3] + ([][_0x55f3('0x1f', '\x4c\x24\x28\x44')]() + '')[0x2] + (undefined + '')[0x0] + (![] + [0x0] + String)[0x14] + (![] + [0x0] + String)[0x14] + (!![] + '')[0x3] + (!![] + '')[0x1])());
}
_0x355d23(++_0x450614);
}
try {
_0x355d23(0x0);
} catch (_0x54c483) {
}
};
if (function () {
var _0x470d8f = function () {
var _0x4c97f0 = !![];
return function (_0x1742fd, _0x4db1c) {
var _0x48181e = _0x4c97f0 ? function () {
if (_0x4db1c) {
var _0x55f3be = _0x4db1c['\x61\x70\x70\x6c\x79'](_0x1742fd, arguments);
_0x4db1c = null;
return _0x55f3be;
}
} : function () {
};
_0x4c97f0 = ![];
return _0x48181e;
};
}();
var _0x501fd7 = _0x470d8f(this, function () {
var _0x4c97f0 = function () {
return '\x64\x65\x76';
}, _0x1742fd = function () {
return '\x77\x69\x6e\x64\x6f\x77';
};
var _0x55f3be = function () {
var _0x3ad9a1 = new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');
return !_0x3ad9a1['\x74\x65\x73\x74'](_0x4c97f0['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
};
var _0x1b93ad = function () {
var _0x20bf34 = new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');
return _0x20bf34['\x74\x65\x73\x74'](_0x1742fd['\x74\x6f\x53\x74\x72\x69\x6e\x67']());
};
var _0x5afe31 = function (_0x178627) {
var _0x1a0f04 = ~-0x1 >> 0x1 + 0xff % 0x0;
if (_0x178627['\x69\x6e\x64\x65\x78\x4f\x66']('\x69' === _0x1a0f04)) {
_0xd79219(_0x178627);
}
};
var _0xd79219 = function (_0x5792f7) {
var _0x4e08d8 = ~-0x4 >> 0x1 + 0xff % 0x0;
if (_0x5792f7['\x69\x6e\x64\x65\x78\x4f\x66']((!![] + '')[0x3]) !== _0x4e08d8) {
_0x5afe31(_0x5792f7);
}
};
if (!_0x55f3be()) {
if (!_0x1b93ad()) {
_0x5afe31('\x69\x6e\x64\u0435\x78\x4f\x66');
} else {
_0x5afe31('\x69\x6e\x64\x65\x78\x4f\x66');
}
} else {
_0x5afe31('\x69\x6e\x64\u0435\x78\x4f\x66');
}
});
_0x501fd7();
var _0x3a394d = function () {
var _0x1ab151 = !![];
return function (_0x372617, _0x42d229) {
var _0x3b3503 = _0x1ab151 ? function () {
if (_0x42d229) {
var _0x7086d9 = _0x42d229[_0x55f3('0x21', '\x4b\x4e\x29\x46')](_0x372617, arguments);
_0x42d229 = null;
return _0x7086d9;
}
} : function () {
};
_0x1ab151 = ![];
return _0x3b3503;
};
}();
var _0x5b6351 = _0x3a394d(this, function () {
var _0x46cbaa = Function(_0x55f3('0x22', '\x26\x68\x5a\x59') + _0x55f3('0x23', '\x61\x48\x2a\x4e') + '\x29\x3b');
var _0x1766ff = function () {
};
var _0x9b5e29 = _0x46cbaa();
_0x9b5e29[_0x55f3('0x26', '\x61\x48\x2a\x4e')]['\x6c\x6f\x67'] = _0x1766ff;
_0x9b5e29[_0x55f3('0x29', '\x56\x25\x59\x52')][_0x55f3('0x2a', '\x50\x5e\x45\x71')] = _0x1766ff;
_0x9b5e29[_0x55f3('0x2c', '\x6c\x67\x4d\x30')][_0x55f3('0x2d', '\x4c\x24\x28\x44')] = _0x1766ff;
_0x9b5e29[_0x55f3('0x2f', '\x43\x5a\x63\x38')][_0x55f3('0x30', '\x57\x75\x36\x25')] = _0x1766ff;
});
_0x5b6351();
try {
return !!window['\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];
} catch (_0x35538d) {
return ![];
}
}()) {
document[_0x55f3('0x33', '\x56\x25\x59\x52')](_0x55f3('0x34', '\x79\x41\x70\x7a'), l, ![]);
} else {
document[_0x55f3('0x36', '\x79\x41\x70\x7a')](_0x55f3('0x37', '\x4c\x24\x28\x44'), l);
}
debugger;
function setCookie(name, value) {
var expiredate = new Date();
expiredate.setTime(expiredate.getTime() + (3600 * 1000));
document.cookie = name + "=" + value + ";expires=" + expiredate.toGMTString() + ";max-age=3600;path=/";
}
function reload(x) {
setCookie("yemu", x);
document.location.reload();
}

View File

@ -0,0 +1,15 @@
function start_debug(){
debugger;
}
console.log(1111);
console.log(2222);
console.log(3333);
var i=0;
while (i < 10){
start_debug();
i++;
console.log("i:", i);
}
console.log(4444);
console.log(5555);
console.log(6666);

View File

@ -0,0 +1,20 @@
window.__cr_eval = window.eval
var myeval = function (src) {
console.log(src);
debugger;
console.log("================ eval end ================")
return window.__cr_eval(src)
}
var _myeval = myeval.bind(null)
_myeval.toString = window.__cr_eval.toString;
Object.defineProperty(window, 'eval', { value: _myeval })
window.__cr_fun = window.Function
var myfun = function () {
var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.length - 1]
console.log(src);
console.log("================ Function end ================")
return window.__cr_fun.apply(this, arguments)
}
myfun.toString = function() { return window.__cr_fun + "" } // 小花招
Object.defineProperty(window, 'Function', { value: myfun })

View File

@ -0,0 +1,27 @@
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function() {
console.log('Getting cookie');
return cookie_cache;
},
set: function(val) {
console.log('Setting cookie', val);
var cookie = val.split(";")[0];
var ncookie = cookie.split("=");
var flag = false;
var cache = cookie_cache.split("; ");
cache = cache.map(function(a){
if (a.split("=")[0] === ncookie[0]){
flag = true;
return cookie;
}
return a;
})
cookie_cache = cache.join("; ");
if (!flag){
cookie_cache += cookie + "; ";
}
this._value = val;
return cookie_cache;
},
});

View File

@ -0,0 +1,11 @@
var my_stringify = JSON.stringify;
JSON.stringify = function (params){
console.log("yemu", params);
return my_stringify(params);
};
var my_parse = JSON.parse;
JSON.parse = function (params){
console.log("yemu", params);
return my_parse(params);
};

View File

@ -0,0 +1,5 @@
WebSocket.prototype.senda = WebSocket.prototype.send;
WebSocket.prototype.send = function (data){
console.info("Hook WebSocket", data);
return this.senda(data)
}

View File

@ -0,0 +1,36 @@
var window_flag_1 = 't';
var window_flag_2 = 'ccc';
var key_value_map = {};
var window_value = window[window_flag_1];
Object.defineProperty(window, window_flag_1, {
get: function() {
console.log('Getting', window, window_flag_1, '=', window_value);
debugger;
return window_value;
},
set: function(val) {
console.log('Setting', window, window_flag_1, '=', val);
debugger;
window_value = val;
key_value_map[window[window_flag_1]] = window_flag_1;
set_obj_attr(window[window_flag_1], window_flag_2);
},
});
function set_obj_attr(obj, attr){
var obj_attr_value = obj[attr];
Object.defineProperty(obj, attr, {
get: function() {
console.log('Getting', key_value_map[obj], attr, '=', obj_attr_value);
// debugger;
return obj_attr_value;
},
set: function(val) {
console.log('Setting', key_value_map[obj], attr, '=', val);
// debugger;
obj_attr_value = val;
},
});
}

View File

@ -0,0 +1,19 @@
# JavaScript 混淆技术
本文件夹中提供了课程中的样例代码,可以直接用 Node.js 运行。
首先安装好 Node.js。
然后安装依赖库:
```
npm install
```
接着就可以运行,如:
```
node demo_string_array.js
```
其他的案例类似

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,17 @@
const code = `
let x = '1' + 1
console.log('x', x)
`
const options = {
compact: false,
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))
// var _0x151c=['log'];(function(_0x1ce384,_0x20a7c7){var _0x25fc92=function(_0x188aec){while(--_0x188aec){_0x1ce384['push'](_0x1ce384['shift']());}};_0x25fc92(++_0x20a7c7);}(_0x151c,0x1b7));var _0x553e=function(_0x259219,_0x241445){_0x259219=_0x259219-0x0;var _0x56d72d=_0x151c[_0x259219];return _0x56d72d;};let x='1'+0x1;console[_0x553e('0x0')]('x',x);

View File

@ -0,0 +1,30 @@
const code = `
(function(){
function foo () {
return function () {
var sum = 1 + 2;
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);
console.log(6);
}
}
foo()();
})();
`
const options = {
compact: false,
controlFlowFlattening: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,20 @@
const code = `
console.log('abc');
console.log('cde');
console.log('efg');
console.log('hij');
`
const options = {
compact: false,
deadCodeInjection: true,
deadCodeInjectionThreshold: 1
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,17 @@
const code = `
for (let i = 0; i < 5; i ++) {
console.log('i', i)
}
`
const options = {
debugProtection: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,14 @@
const code = `
console.log('hello world')
`
const options = {
disableConsoleOutput: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,15 @@
const code = `
console.log('hello world')
`
const options = {
domainLock: ['cuiqingcai.com']
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,17 @@
const code = `
let hello = '1' + 1
console.log('hello', hello)
`
const options = {
compact: true,
identifierNamesGenerator: 'mangled'
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,16 @@
const code = `
let hello = '1' + 1
console.log('hello', hello)
`
const options = {
identifiersPrefix: 'germey'
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,17 @@
const code = `
var $ = function(id) {
return document.getElementById(id);
};
`
const options = {
renameGlobals: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,15 @@
const code = `
console.log('hello world')
`
const options = {
selfDefending: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,17 @@
const code = `
var a = 'hello world'
`
const options = {
stringArray: true,
rotateStringArray: true,
stringArrayEncoding: true, // 'base64' or 'rc4' or false
stringArrayThreshold: 1,
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,15 @@
const code = `
console.log('hello world')
`
const options = {
target: 'browser-no-eval'
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,22 @@
const code = `
(function(){
var object = {
foo: 'test1',
bar: {
baz: 'test2'
}
};
})();
`
const options = {
compact: false,
transformObjectKeys: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,15 @@
const code = `
var a = 'hello world'
`
const options = {
compact: false,
unicodeEscapeSequence: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

View File

@ -0,0 +1,22 @@
const code = `
let string = 'hello'
const count = 5
for (let i = 0; i < 5; i ++) {
console.log('i', string[i])
}
`
const options = {
// compact: false,
// controlFlowFlattening: true,
unicodeEscapeSequence: true
}
const obfuscator = require('javascript-obfuscator')
function obfuscate(code, options) {
return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuscate(code, options))

865
8-代码混淆的原理/package-lock.json generated Normal file
View File

@ -0,0 +1,865 @@
{
"name": "js-obfuscate",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/runtime": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz",
"integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.2"
}
},
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true
},
"@types/validator": {
"version": "10.11.3",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.3.tgz",
"integrity": "sha512-GKF2VnEkMmEeEGvoo03ocrP9ySMuX1ypKazIYMlsjfslfBMhOAtC5dmEWKdJioW4lJN7MZRS88kalTsVClyQ9w==",
"dev": true
},
"acorn": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
"integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
"dev": true
},
"acorn-jsx": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
"integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==",
"dev": true
},
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true,
"optional": true
},
"ansi-escapes": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
"integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
"dev": true
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
},
"ansi-styles": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz",
"integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==",
"dev": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"array-differ": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
"integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
"dev": true
},
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true
},
"arrify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
"dev": true
},
"babel-polyfill": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
"integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
"dev": true,
"requires": {
"babel-runtime": "^6.22.0",
"core-js": "^2.4.0",
"regenerator-runtime": "^0.10.0"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
"dev": true
}
}
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
"core-js": "^2.4.0",
"regenerator-runtime": "^0.11.0"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
}
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"chance": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chance/-/chance-1.1.3.tgz",
"integrity": "sha512-XeJsdoVAzDb1WRPRuMBesRSiWpW1uNTo5Fd7mYxPJsAfgX71+jfuCOHOdbyBz2uAUZ8TwKcXgWk3DMedFfJkbg==",
"dev": true
},
"chardet": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
"dev": true
},
"charenc": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
"dev": true
},
"class-validator": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.11.0.tgz",
"integrity": "sha512-niAmmSPFku9xsnpYYrddy8NZRrCX3yyoZ/rgPKOilE5BG0Ma1eVCIxpR4X0LasL/6BzbYzsutG+mSbAXlh4zNw==",
"dev": true,
"requires": {
"@types/validator": "10.11.3",
"google-libphonenumber": "^3.1.6",
"validator": "12.0.0"
}
},
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
"dev": true,
"requires": {
"restore-cursor": "^2.0.0"
}
},
"cli-width": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
"dev": true
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"commander": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz",
"integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"core-js": {
"version": "2.6.11",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
"dev": true
},
"crypt": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
"dev": true
},
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
"encoding": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"dev": true,
"requires": {
"iconv-lite": "~0.4.13"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"escodegen-wallaby": {
"version": "1.6.27",
"resolved": "https://registry.npmjs.org/escodegen-wallaby/-/escodegen-wallaby-1.6.27.tgz",
"integrity": "sha512-DFXbfLTNa/wiQRgqSseKhmzyDhwWJ4c/6IwsdAgA6qYL0ntsmSuuTMovEbA/8oCanSGkUR1qaLsDgKiWPllnjg==",
"dev": true,
"requires": {
"esprima": "^2.7.1",
"estraverse": "^1.9.1",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.2.0"
},
"dependencies": {
"estraverse": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
"integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
"dev": true
}
}
},
"eslint-visitor-keys": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
"integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
"dev": true
},
"espree": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz",
"integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==",
"dev": true,
"requires": {
"acorn": "^7.1.0",
"acorn-jsx": "^5.1.0",
"eslint-visitor-keys": "^1.1.0"
}
},
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
"estraverse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"eventemitter3": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
"integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
"dev": true
},
"external-editor": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
"dev": true,
"requires": {
"chardet": "^0.4.0",
"iconv-lite": "^0.4.17",
"tmp": "^0.0.33"
}
},
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
"figures": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.5"
}
},
"google-libphonenumber": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.6.tgz",
"integrity": "sha512-6QCQAaKJlSd/1dUqvdQf7zzfb3uiZHsG8yhCfOdCVRfMuPZ/VDIEB47y5SYwjPQJPs7ebfW5jj6PeobB9JJ4JA==",
"dev": true
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inquirer": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
"integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
"dev": true,
"requires": {
"ansi-escapes": "^1.1.0",
"chalk": "^1.0.0",
"cli-cursor": "^2.1.0",
"cli-width": "^2.0.0",
"external-editor": "^2.0.1",
"figures": "^2.0.0",
"lodash": "^4.3.0",
"mute-stream": "0.0.7",
"run-async": "^2.2.0",
"rx": "^4.1.0",
"string-width": "^2.0.0",
"strip-ansi": "^3.0.0",
"through": "^2.3.6"
},
"dependencies": {
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
"has-ansi": "^2.0.0",
"strip-ansi": "^3.0.0",
"supports-color": "^2.0.0"
}
},
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
}
}
},
"inversify": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.1.tgz",
"integrity": "sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ==",
"dev": true
},
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
"dev": true
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"javascript-obfuscator": {
"version": "0.18.8",
"resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-0.18.8.tgz",
"integrity": "sha512-lh/PT3dwLgv2vP9ymsmNZqjpbkDq1SQqpxLYtAerLzmYgHlQOzVpUe3NbFb8tUFNylMeg6ez1iEpA7oOQw/7Tw==",
"dev": true,
"requires": {
"@babel/runtime": "7.7.4",
"chalk": "3.0.0",
"chance": "1.1.3",
"class-validator": "0.11.0",
"commander": "4.0.1",
"escodegen-wallaby": "1.6.27",
"espree": "^6.1.2",
"estraverse": "4.3.0",
"eventemitter3": "4.0.0",
"inversify": "5.0.1",
"js-string-escape": "1.0.1",
"md5": "2.2.1",
"mkdirp": "0.5.1",
"multimatch": "4.0.0",
"opencollective": "1.0.3",
"reflect-metadata": "0.1.13",
"source-map-support": "0.5.16",
"string-template": "1.0.0",
"tslib": "1.10.0"
}
},
"js-string-escape": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
"integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
"dev": true
},
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
},
"md5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
"integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
"dev": true,
"requires": {
"charenc": "~0.0.1",
"crypt": "~0.0.1",
"is-buffer": "~1.1.1"
}
},
"mimic-fn": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"multimatch": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
"integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
"dev": true,
"requires": {
"@types/minimatch": "^3.0.3",
"array-differ": "^3.0.0",
"array-union": "^2.1.0",
"arrify": "^2.0.1",
"minimatch": "^3.0.4"
}
},
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"node-fetch": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
"integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
"dev": true,
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
}
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
"dev": true,
"requires": {
"mimic-fn": "^1.0.0"
}
},
"opencollective": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
"integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
"dev": true,
"requires": {
"babel-polyfill": "6.23.0",
"chalk": "1.1.3",
"inquirer": "3.0.6",
"minimist": "1.2.0",
"node-fetch": "1.6.3",
"opn": "4.0.2"
},
"dependencies": {
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "^2.2.1",
"escape-string-regexp": "^1.0.2",
"has-ansi": "^2.0.0",
"strip-ansi": "^3.0.0",
"supports-color": "^2.0.0"
}
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
}
}
},
"opn": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
"integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
"dev": true,
"requires": {
"object-assign": "^4.0.1",
"pinkie-promise": "^2.0.0"
}
},
"optionator": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
"dev": true,
"requires": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
"dev": true
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
"pinkie": "^2.0.0"
}
},
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
"dev": true
},
"regenerator-runtime": {
"version": "0.13.3",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
"dev": true
},
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
"dev": true,
"requires": {
"onetime": "^2.0.0",
"signal-exit": "^3.0.2"
}
},
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
"integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
"dev": true,
"requires": {
"is-promise": "^2.1.0"
}
},
"rx": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
"dev": true
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
"source-map": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
"integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
"dev": true,
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
},
"source-map-support": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
"integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"string-template": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz",
"integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=",
"dev": true
},
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
"ansi-regex": "^3.0.0"
}
}
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"dev": true,
"requires": {
"os-tmpdir": "~1.0.2"
}
},
"tslib": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
"dev": true
},
"type-check": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
"prelude-ls": "~1.1.2"
}
},
"validator": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-12.0.0.tgz",
"integrity": "sha512-r5zA1cQBEOgYlesRmSEwc9LkbfNLTtji+vWyaHzRZUxCTHdsX3bd+sdHfs5tGZ2W6ILGGsxWxCNwT/h3IY/3ng==",
"dev": true
},
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
}
}
}

View File

@ -0,0 +1,14 @@
{
"name": "js-obfuscate",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Germey",
"license": "MIT",
"devDependencies": {
"javascript-obfuscator": "^0.18.8"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,87 @@
import requests
import json
import time
from setting import xhs_account
class XhsApp(object):
def __init__(self):
self.nodejs_x_s_url = "http://127.0.0.1:3000/get_x_s"
self.nodejs_id_url = "http://127.0.0.1:3001/get_sign"
self.cookie_url = "https://www.xiaohongshu.com/fe_api/burdock/v2/shield/registerCanvas"
self.login_url = "https://customer.xiaohongshu.com/api/cas/loginWithAccount"
self.sign = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4280.141 " \
"Safari/537.36~~~unknown~~~zh-CN~~~24~~~8~~~4~~~-480~~~Asia/Shanghai~~~1~~~1~~~1~~~1~~~unkno" \
"wn~~~Linux x86_64~~~Chrome PDF Plugin::Portable Document Format::application/x-google-chrome" \
"-pdf~pdf,Chrome PDF Viewer::::application/pdf~pdf,Native Client::::application/x-nacl~,appl" \
"ication/x-pnacl~~~~canvas winding:yes~canvas fp:4ed6498d31241a0323aabbcc7f6d68a0~~~false~~~f" \
"alse~~~false~~~false~~~false~~~0;false;false~~~0;1;2;3;4;5;6;7;8;9~~~124.04347730432432"
def get_timestamp(self):
t = time.time()
return str(round(t * 1000))
def get_x_s(self, x_t):
x_s_data = 'test1test/api/cas/loginWithAccount{"account":"test2","password":"test3",' \
'"service":"https://pgy.xiaohongshu.com"}'
x_s_data = x_s_data.replace("test1", x_t)\
.replace("test2", xhs_account.get('account'))\
.replace("test3", xhs_account.get('password'))
data = {
'sign': x_s_data
}
req = requests.post(self.nodejs_x_s_url, data=data)
id = req.text
return id
def get_id(self):
data = {
'sign': self.sign
}
req = requests.post(self.nodejs_id_url, data=data)
id = req.text
return id
def get_cookie_timestamp2(self, id):
data = {
'id': id,
'sign': self.sign
}
req = requests.post(self.cookie_url, data=data)
canvas = json.loads(req.text).get('data').get('canvas')
return canvas
def get_html(self, timestamp2, x_s, x_t):
headers = {
'cookie': "timestamp2=" + timestamp2,
'x-s': x_s,
'x-t': x_t,
'content-type': 'application/json;charset=UTF-8'
}
payload = "{\"account\":\"test1\",\"password\":\"test2\"," \
"\"service\":\"https://pgy.xiaohongshu.com\"}"
payload = payload.replace("test1", xhs_account.get('account')).replace("test2", xhs_account.get('password'))
req = requests.post(self.login_url, headers=headers, data=payload)
return req.text, req.headers
def run(self):
x_t = self.get_timestamp()
print('x_t : {}'.format(x_t))
x_s = self.get_x_s(x_t)
print('x_s : {}'.format(x_s))
id = self.get_id()
timestamp2 = self.get_cookie_timestamp2(id)
text, headers = self.get_html(timestamp2, x_s, x_t)
print(text)
print(headers)
if __name__ == '__main__':
xhs_app = XhsApp()
xhs_app.run()

View File

@ -0,0 +1,53 @@
import requests
import json
class XhsApp(object):
def __init__(self):
self.node_js_url = "http://127.0.0.1:3001/get_sign"
self.cookie_url = "https://www.xiaohongshu.com/fe_api/burdock/v2/shield/registerCanvas"
self.html_url = "https://www.xiaohongshu.com/discovery/item/5ea02f090000000001001a90"
# sign 中的参数按需要改动后获取id值
self.sign = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4280.141 " \
"Safari/537.36~~~unknown~~~zh-CN~~~24~~~8~~~4~~~-480~~~Asia/Shanghai~~~1~~~1~~~1~~~1~~~unkno" \
"wn~~~Linux x86_64~~~Chrome PDF Plugin::Portable Document Format::application/x-google-chrome" \
"-pdf~pdf,Chrome PDF Viewer::::application/pdf~pdf,Native Client::::application/x-nacl~,appl" \
"ication/x-pnacl~~~~canvas winding:yes~canvas fp:4ed6498d31241a0323aabbcc7f6d68a0~~~false~~~f" \
"alse~~~false~~~false~~~false~~~0;false;false~~~0;1;2;3;4;5;6;7;8;9~~~124.04347730432432"
def get_id(self):
data = {
'sign': self.sign
}
req = requests.post(self.node_js_url, data=data)
id = req.text
return id
def get_cookie(self, id):
data = {
'id': id,
'sign': self.sign
}
req = requests.post(self.cookie_url, data=data)
canvas = json.loads(req.text).get('data').get('canvas')
return canvas
def get_html(self, cookie):
Headers = {
'cookie': "timestamp2=" + cookie
}
req = requests.get(self.html_url, headers=Headers)
return req.text
def run(self):
id = self.get_id()
print(id)
canvas = self.get_cookie(id)
print(canvas)
html = self.get_html(canvas)
print(html)
if __name__ == '__main__':
xhs_app =XhsApp()
xhs_app.run()

View File

@ -0,0 +1,17 @@
import requests
url = "https://customer.xiaohongshu.com/api/cas/loginWithAccount"
payload = "{\"account\":\"feng.bao@winndoo.com\",\"password\":\"Winndoo@com123\"," \
"\"service\":\"https://pgy.xiaohongshu.com\"}"
headers = {
'content-type': 'application/json;charset=UTF-8',
'x-s': 'OiZk125KZga6ZjcWslMlOidB12MbOY1K0jwvOgACZgA3',
'x-t': '1623396152975',
'cookie': 'timestamp2=20210611efba504df43e1e6daff3fe96'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

View File

@ -0,0 +1,75 @@
function encryption(t) {
function c(t, e) {
return t << e | t >>> 32 - e
}
function u(t, e) {
var n, r, o, i, a;
return o = 2147483648 & t,
i = 2147483648 & e,
a = (1073741823 & t) + (1073741823 & e),
(n = 1073741824 & t) & (r = 1073741824 & e) ? 2147483648 ^ a ^ o ^ i : n | r ? 1073741824 & a ? 3221225472 ^ a ^ o ^ i : 1073741824 ^ a ^ o ^ i : a ^ o ^ i
}
function e(t, e, n, r, o, i, a) {
return u(c(t = u(t, u(u(e & n | ~e & r, o), a)), i), e)
}
function n(t, e, n, r, o, i, a) {
return u(c(t = u(t, u(u(e & r | n & ~r, o), a)), i), e)
}
function r(t, e, n, r, o, i, a) {
return u(c(t = u(t, u(u(e ^ n ^ r, o), a)), i), e)
}
function o(t, e, n, r, o, i, a) {
return u(c(t = u(t, u(u(n ^ (e | ~r), o), a)), i), e)
}
function i(t) {
var e, n = "", r = "";
for (e = 0; e <= 3; e++)
n += (r = "0" + (t >>> 8 * e & 255).toString(16)).substr(r.length - 2, 2);
return n
}
var a, s, l, f, p, d, v, h, g, y = Array();
for (y = function (t) {
for (var e, n = t.length, r = n + 8, o = 16 * ((r - r % 64) / 64 + 1), i = Array(o - 1), a = 0, c = 0; c < n;)
a = c % 4 * 8,
i[e = (c - c % 4) / 4] = i[e] | t.charCodeAt(c) << a,
c++;
return a = c % 4 * 8,
i[e = (c - c % 4) / 4] = i[e] | 128 << a,
i[o - 2] = n << 3,
i[o - 1] = n >>> 29,
i
}(t = function (t) {
t = t.replace(/\r\n/g, "\n");
for (var e = "", n = 0; n < t.length; n++) {
var r = t.charCodeAt(n);
r < 128 ? e += String.fromCharCode(r) : (127 < r && r < 2048 ? e += String.fromCharCode(r >> 6 | 192) : (e += String.fromCharCode(r >> 12 | 224),
e += String.fromCharCode(r >> 6 & 63 | 128)),
e += String.fromCharCode(63 & r | 128))
}
return e
}(t)),
d = 1732584193,
v = 4023233417,
h = 2562383102,
g = 271733878,
a = 0; a < y.length; a += 16)
d = o(d = r(d = r(d = r(d = r(d = n(d = n(d = n(d = n(d = e(d = e(d = e(d = e(s = d, l = v, f = h, p = g, y[a + 0], 7, 3614090360), v = e(v, h = e(h, g = e(g, d, v, h, y[a + 1], 12, 3905402710), d, v, y[a + 2], 17, 606105819), g, d, y[a + 3], 22, 3250441966), h, g, y[a + 4], 7, 4118548399), v = e(v, h = e(h, g = e(g, d, v, h, y[a + 5], 12, 1200080426), d, v, y[a + 6], 17, 2821735955), g, d, y[a + 7], 22, 4249261313), h, g, y[a + 8], 7, 1770035416), v = e(v, h = e(h, g = e(g, d, v, h, y[a + 9], 12, 2336552879), d, v, y[a + 10], 17, 4294925233), g, d, y[a + 11], 22, 2304563134), h, g, y[a + 12], 7, 1804603682), v = e(v, h = e(h, g = e(g, d, v, h, y[a + 13], 12, 4254626195), d, v, y[a + 14], 17, 2792965006), g, d, y[a + 15], 22, 1236535329), h, g, y[a + 1], 5, 4129170786), v = n(v, h = n(h, g = n(g, d, v, h, y[a + 6], 9, 3225465664), d, v, y[a + 11], 14, 643717713), g, d, y[a + 0], 20, 3921069994), h, g, y[a + 5], 5, 3593408605), v = n(v, h = n(h, g = n(g, d, v, h, y[a + 10], 9, 38016083), d, v, y[a + 15], 14, 3634488961), g, d, y[a + 4], 20, 3889429448), h, g, y[a + 9], 5, 568446438), v = n(v, h = n(h, g = n(g, d, v, h, y[a + 14], 9, 3275163606), d, v, y[a + 3], 14, 4107603335), g, d, y[a + 8], 20, 1163531501), h, g, y[a + 13], 5, 2850285829), v = n(v, h = n(h, g = n(g, d, v, h, y[a + 2], 9, 4243563512), d, v, y[a + 7], 14, 1735328473), g, d, y[a + 12], 20, 2368359562), h, g, y[a + 5], 4, 4294588738), v = r(v, h = r(h, g = r(g, d, v, h, y[a + 8], 11, 2272392833), d, v, y[a + 11], 16, 1839030562), g, d, y[a + 14], 23, 4259657740), h, g, y[a + 1], 4, 2763975236), v = r(v, h = r(h, g = r(g, d, v, h, y[a + 4], 11, 1272893353), d, v, y[a + 7], 16, 4139469664), g, d, y[a + 10], 23, 3200236656), h, g, y[a + 13], 4, 681279174), v = r(v, h = r(h, g = r(g, d, v, h, y[a + 0], 11, 3936430074), d, v, y[a + 3], 16, 3572445317), g, d, y[a + 6], 23, 76029189), h, g, y[a + 9], 4, 3654602809), v = r(v, h = r(h, g = r(g, d, v, h, y[a + 12], 11, 3873151461), d, v, y[a + 15], 16, 530742520), g, d, y[a + 2], 23, 3299628645), h, g, y[a + 0], 6, 4096336452),
v = o(v = o(v = o(v = o(v, h = o(h, g = o(g, d, v, h, y[a + 7], 10, 1126891415), d, v, y[a + 14], 15, 2878612391), g, d, y[a + 5], 21, 4237533241), h = o(h, g = o(g, d = o(d, v, h, g, y[a + 12], 6, 1700485571), v, h, y[a + 3], 10, 2399980690), d, v, y[a + 10], 15, 4293915773), g, d, y[a + 1], 21, 2240044497), h = o(h, g = o(g, d = o(d, v, h, g, y[a + 8], 6, 1873313359), v, h, y[a + 15], 10, 4264355552), d, v, y[a + 6], 15, 2734768916), g, d, y[a + 13], 21, 1309151649), h = o(h, g = o(g, d = o(d, v, h, g, y[a + 4], 6, 4149444226), v, h, y[a + 11], 10, 3174756917), d, v, y[a + 2], 15, 718787259), g, d, y[a + 9], 21, 3951481745),
d = u(d, s),
v = u(v, l),
h = u(h, f),
g = u(g, p);
return (i(d) + i(v) + i(h) + i(g)).toLowerCase()
}
module.exports =
{
encryption
};

View File

@ -0,0 +1,18 @@
const express = require('express');
const app = express();
const encryption = require("../xhs-x-s");
var bodyParser = require('body-parser');
app.use(bodyParser());
app.post('/get_x_s', function (req, res) {
let result = req.body;
let sign = result.sign;
console.log(sign);
result = encryption.encryption(sign);
res.send(result.toString());
});
app.listen(3000, () => {
console.log("开启服务端口3000")
});

View File

@ -0,0 +1,18 @@
const express = require('express');
const app = express();
const encryption = require("../encryption");
var bodyParser = require('body-parser');
app.use(bodyParser());
app.post('/get_sign', function (req, res) {
let result = req.body;
let sign = result.sign;
console.log(sign);
result = encryption.encryption(sign + "hasaki");
res.send(result.toString());
});
app.listen(3001, () => {
console.log("开启服务端口3001")
});

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,269 @@
function caad(e, t, n) {
"use strict";
var r = n("23e7")
, i = n("4d641").includes
, o = n("44d2")
, a = n("ae40")
, s = a("indexOf", {
ACCESSORS: !0,
1: 0
});
r({
target: "Array",
proto: !0,
forced: !s
}, {
includes: function(e) {
return i(this, e, arguments.length > 1 ? arguments[1] : void 0)
}
}),
o("includes")
}
function f3f3(e, t, n) {
"use strict";
n.d(t, "a", (function() {
return o
}
));
n("a4d3"),
n("4de4"),
n("4160"),
n("e439"),
n("dbb4"),
n("b64b"),
n("159b");
var r = n("fc11");
function i(e, t) {
var n = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var r = Object.getOwnPropertySymbols(e);
t && (r = r.filter((function(t) {
return Object.getOwnPropertyDescriptor(e, t).enumerable
}
))),
n.push.apply(n, r)
}
return n
}
function o(e) {
for (var t = 1; t < arguments.length; t++) {
var n = null != arguments[t] ? arguments[t] : {};
t % 2 ? i(Object(n), !0).forEach((function(t) {
Object(r["a"])(e, t, n[t])
}
)) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : i(Object(n)).forEach((function(t) {
Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
}
))
}
return e
}
}
function b0c0(e, t, n) {
var r = n("83ab")
, i = n("9bf2").f
, o = Function.prototype
, a = o.toString
, s = /^\s*function ([^ (]*)/;
r && !("name"in o) && i(o, "name", {
configurable: !0,
get: function() {
try {
return a.call(this).match(s)[1]
} catch (e) {
return ""
}
}
})
}
function d3b7(e, t, n) {
var r = n("00ee")
, i = n("6eeb")
, o = n("b041");
r || i(Object.prototype, "toString", o, {
unsafe: !0
})
}
function aaa(e, t, n) {
"use strict";
// n.d(t, "b", (function() {
// return C
// }
// )),
// n.d(t, "a", (function() {
// return k
// }
// ));
caad;
var r = f3f3,
i = ({n: "RadarArea"}, b0c0, d3b7, n("3ca3"), n("159b"), n("ddb0"), n("2b3d"), n("83b9"))
, o = n.n(i)
, a = n("2d83")
, s = n.n(a)
, l = n("467f")
, c = n.n(l)
, u = n("30b5")
, h = n.n(u)
, f = n("7aac")
, d = n.n(f)
, p = n("932e");
var g = function(e) {
var t = o()(e.baseURL, e.url)
, n = h()(t, e.params, e.paramsSerializer);
try {
["post", "put", "patch", "delete"].includes(e.method) ? function(e, t) {
var n = document.createElement("form");
n.method = t.method,
n.target = "_blank",
n.action = e;
var r, i = t.data ? JSON.parse(t.data) : {};
t.xsrfHeaderName && ((t.withCredentials || Object(p["a"])(t.url)) && t.xsrfCookieName && (r = d.a.read(t.xsrfCookieName)),
r && (i[t.xsrfHeaderName] = r));
var o = h()("/", i, t.paramsSerializer)
, a = new URL(o,location.origin);
a.searchParams.forEach((function(e, t) {
var r = document.createElement("input");
r.name = t,
r.value = e,
n.appendChild(r)
}
)),
document.body.appendChild(n),
n.submit(),
n.remove()
}(n, e) : window.open(n, "_blank", "noopener")
} catch (a) {
var r = {
status: 418,
statusText: "I'm a teapot",
config: e
};
throw new s.a(a.message,e,null,void 0,r)
}
var i = {
data: void 0,
status: 200,
statusText: "OK",
config: e,
headers: {}
};
return new Promise((function(e, t) {
c()(e, t, i)
}
))
}
, m = (n("99af"),
n("4de4"),
n("a15b"),
n("d81d"),
n("b64b"),
n("2532"),
n("0122"))
, v = n("6821")
, y = n.n(v);
function b(e) {
return Array.isArray(e) || "boolean" == typeof e
}
function A(e, t, n) {
var r = null != t ? t : {}
, i = r.include
, o = r.enforceWithKeys
, a = void 0 === o ? [] : o
, s = Object.keys(e);
if (n && i) {
var l = i.concat(["service_name", "service_method", "sign_strict"]);
s = s.filter((function(e) {
return l.includes(e)
}
))
}
var c = s.sort().map((function(t) {
var n = e[t];
return function(e) {
return null == e
}(n) ? "" : t + (!a.includes(t) && function(e) {
return ["string", "number"].includes(Object(m["a"])(e))
}(n) ? n : t)
}
)).join("");
return y()(c + "e39539b8836fb99e1538974d3ac1fe98")
}
function _(e) {
if (!e || "object" !== Object(m["a"])(e))
return e;
for (var t = {}, n = 0, r = Object.keys(e); n < r.length; n++) {
var i = r[n]
, o = e[i];
t[i] = b(o) ? JSON.stringify(o) : o
}
return t
}
function x(e, t, n) {
var i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}
, o = i.strict
, a = i.serializing
, s = i.rule
, l = {
service_name: e,
service_method: t,
sign_strict: o ? 1 : void 0
};
return Object(r["a"])(Object(r["a"])(Object(r["a"])({}, a ? _(n) : n), l), {}, {
sign: A(Object(r["a"])(Object(r["a"])({}, n), l), s, o)
})
}
var w = {
get: "/h/api/gateway/handler_get/",
post: "/h/api/gateway/handler_post/"
}
, C = function(e) {
var t;
if (e.microservice) {
var n = e.microservice
, r = e.url
, i = null !== (t = e.gatewayURLs) && void 0 !== t ? t : w;
["post", "put", "patch", "delete"].includes(e.method) ? (e.data = x(n, r, e.data, {
strict: e.gatewayStrictMode,
rule: e.gatewaySignRule
}),
e.url = i.post) : (e.params = x(n, r, e.params, {
strict: e.gatewayStrictMode,
serializing: !0,
rule: e.gatewaySignRule
}),
e.url = i.get),
e.withGatewayHeaders && (e.headers["x-star-service-name"] = n,
e.headers["x-star-service-method"] = r)
}
return e
};
function S(e) {
return (null == e ? void 0 : e.open) && (e = Object(r["a"])(Object(r["a"])({}, e), {}, {
adapter: g,
unwrap: !1
})),
e
}
var k = function(e) {
return {
axios: e,
get: function(e, t, n) {
return this.axios.get(t, Object(r["a"])(Object(r["a"])({}, S(n)), {}, {
microservice: e
}))
},
post: function(e, t, n, i) {
return this.axios.post(t, n, Object(r["a"])(Object(r["a"])({}, S(i)), {}, {
microservice: e
}))
}
}
}
}
sign = aaa();