//后面有r.a.AES.decrypt用到了一个变量D,这个j函数没有//滚动条拉到上面就找到了varD= r.a.enc.Utf8.parse("PVGDwmcvfs1uV3d1");functionj(e){var t = r.a.enc.Base64.parse(e), n = t.clone(), i = n.words.splice(4);
n.init(n.words),
t.init(i);var o = r.a.enc.Base64.stringify(t), a = r.a.AES.decrypt(o,D,{iv: n,mode: r.a.mode.CBC,padding: r.a.pad.Pkcs7
}), s = a.toString(r.a.enc.Utf8);return s.toString()}
测试看是不是,可以看到,数据从一个不可阅读的变到了一个可阅读的
这种加密一看就是cryptojs,我们使用nodejs仿写一下
var CryptoJS =require("crypto-js");const text ="DqZaLkcdO3f5vgWsUsS65mSBPxq7ZbLf1IdBveR2MbkGnT9kBZ57+vhTr/imVX76Y+rj/7poXCPSf4L0JPEiVFsg1K3kNsVfaqCDqAMqTsp9NUWyUaivaXf3I05LGoDHGA3WEhMUZtBeMfuhrZni2Zywm/bejF52uUVg6t/KtbMMMBRrQRCcQrrEK/JvEHmZtVMC127kSG88TZOQ90qFwYk+Dz8mHcU0MvQpggdoSC788UgaXWlVZ/9EMwseLbpxs0YjZtR1lJyEb9JjMSQ3MjFTlOzoCxpf5AYhqVPd3N1tYsSzfCMhEl1YNRz9El++ev+Xk/05wi0DOVgQYxMiaXxpOxhgarBP+N9KDGoYctwIzAPqyh1wny1CPNv6sJ56";try{varD= CryptoJS.enc.Utf8.parse("PVGDwmcvfs1uV3d1");const t = CryptoJS.enc.Base64.parse(text),
n = t.clone(),
i = n.words.splice(4);
n.init(n.words);
t.init(i);var o = CryptoJS.enc.Base64.stringify(t);var a = CryptoJS.AES.decrypt(o,D,{iv: n,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,});
console.log(a.toString(CryptoJS.enc.Utf8));}catch(e){
console.error("解密过程出错:", e.message);}
varD= r.a.enc.Utf8.parse("PVGDwmcvfs1uV3d1");functionI(e){var t = r.a.lib.WordArray.random(16), n ="";if("string"==typeof e){var o = r.a.enc.Utf8.parse(e);
n = r.a.AES.encrypt(o,D,{iv: t,mode: r.a.mode.CBC,padding: r.a.pad.Pkcs7
})}elseif("object"==Object(i["a"])(e)){var a =JSON.stringify(e), s = r.a.enc.Utf8.parse(a);
n = r.a.AES.encrypt(s,D,{iv: t,mode: r.a.mode.CBC,padding: r.a.pad.Pkcs7
})}return r.a.enc.Base64.stringify(t.concat(n.ciphertext))}
里面还有一个i["a"],发现是下面图的内容
丢给gpt重写下,自己懒得写了
就是获取类型的
functiongetType(t){const isSymbolSupported =typeof Symbol ==='function'&&typeof Symbol.iterator ==='symbol';if(isSymbolSupported){returntypeof t;}else{return t &&typeof Symbol ==='function'&& t.constructor === Symbol && t !==Symbol.prototype ?'symbol':typeof t;}}
示例
console.log(getType('hello'));// 'string'
console.log(getType(123));// 'number'
console.log(getType(true));// 'boolean'
console.log(getType(null));// 'object'
console.log(getType(undefined));// 'undefined'
console.log(getType(Symbol('foo')));// 'symbol'
用nodejs重新书写下
const CryptoJS =require("crypto-js");//加密内容const data ={getOutLinkInfoReq:{account:"",linkID:"035Cgf2N6FFR6",passwd:"",caSrt:0,coSrt:0,srtDr:1,bNum:1,pCaID:"root",eNum:200,},};const r ={a: CryptoJS,};const i ={a:functiongetType(t){const isSymbolSupported =typeof Symbol ==="function"&&typeof Symbol.iterator ==="symbol";if(isSymbolSupported){returntypeof t;}else{return t &&typeof Symbol ==="function"&&
t.constructor === Symbol &&
t !==Symbol.prototype
?"symbol":typeof t;}},};varD= CryptoJS.enc.Utf8.parse("PVGDwmcvfs1uV3d1");functionI(e){var t = r.a.lib.WordArray.random(16),
n ="";if("string"==typeof e){var o = r.a.enc.Utf8.parse(e);
n = r.a.AES.encrypt(o,D,{iv: t,mode: r.a.mode.CBC,padding: r.a.pad.Pkcs7,});}elseif("object"==Object(i["a"])(e)){var a =JSON.stringify(e),
s = r.a.enc.Utf8.parse(a);
n = r.a.AES.encrypt(s,D,{iv: t,mode: r.a.mode.CBC,padding: r.a.pad.Pkcs7,});}return r.a.enc.Base64.stringify(t.concat(n.ciphertext));}const result =I(data);
console.log("加密结果", result);
运行
测试正常
链接失效基本上是返回这个,当然不排除其他的,什么资源违规啥的
{"resultCode":"200000727","desc":"[501237|D181AA79D09743338F661AC067B56EE2]Failed to invoke the service.The link[035CtYLTLHFdT] does not exist or has been canceled[NDA(100556)][Flag:D181AA79D09743338F661AC067B56EE2]","data":null,"code":"200000727","success":true}
因为移动云盘分享链接强制提取码(移动端没试过),所以应该可以使用下面状态来判断有效
{"resultCode":"9188","desc":"[501273|4C4E7986B7E0453999D5A65634ED8DD7]Failed to invoke the service.wrong password for outlink, linkID=035CtYLTLHFdT[NDA(100576)][Flag:4C4E7986B7E0453999D5A65634ED8DD7]","data":null,"code":"9188","success":true}