PC板微信图片解密-javascript
微信图片路径:
%Documents%\WeChat Files\%微信ID%\FileStorage\Image\yyyy-mm\
解密方法原理网上很容易搜罗到, 就是没有javascript的代码(解密后方便直接在网页显示),于是找来魔改
关键代码如下:
1 function getRealMimeType(data){ 2 var arr = data.subarray(0,4); 3 var header = ''; 4 var realMimeType; 5 for (var i = 0; i < arr.length; i++) { 6 header += arr[i].toString(16); 7 } 8 // magic numbers: http://www.garykessler.net/library/file_sigs.html 9 switch (header) { 10 case "89504e47": 11 realMimeType = "image/png"; 12 break; 13 case "47494638": 14 realMimeType = "image/gif"; 15 break; 16 case "ffd8ffDB": 17 case "ffd8ffe0": 18 case "ffd8ffe1": 19 case "ffd8ffe2": 20 case "ffd8ffe3": 21 case "ffd8ffe8": 22 realMimeType = "image/jpeg"; 23 break; 24 default: 25 realMimeType = "unknown"; // Or you can use the blob.type as fallback 26 break; 27 } 28 return realMimeType; 29 } 30 31 function getCode(data){ 32 // 图片字节头信息, 33 // [0][1]为jpg头信息, 34 // [2][3]为png头信息, 35 // [4][5]为gif头信息 36 var pic_head = [0xff, 0xd8, 0x89, 0x50, 0x47, 0x49] 37 var code=0; 38 var head_index = 0 39 while(head_index < pic_head.length){ 40 // 使用第一个头信息字节来计算加密码 41 // 第二个字节来验证解密码是否正确 42 code = data[0] ^ pic_head[head_index] 43 var idf_code = data[1] ^ code 44 head_index = head_index + 1 45 if (idf_code == pic_head[head_index]) 46 return code 47 head_index = head_index + 1 48 } 49 //print("not jpg, png, gif") 50 return 0 51 } 52 53 //监听change事件 54 fileInput.addEventListener('change',function(){ 55 //检查文件是否选择 56 if(!this.value){ 57 fileInfo.innerHTML = "没有选择任何文件"; 58 return; 59 } 60 61 var files=this.files; 62 for(var i=0;i<files.length;i++){ 63 //获取file的引用 64 var file = files[i]; 65 66 //获取file信息 67 fileInfo.innerHTML = '文件: '+files.length; 68 69 var reader=new FileReader(); 70 reader.onload = (e)=>{ 71 DecodeXor(e.target.result, file.name+' '+ '大小: '+file.size+' '+ '修改: '+file.lastModifiedDate) 72 } 73 reader.readAsArrayBuffer(file); 74 } 75 }); 76 77 function DecodeXor(buff,s){ 78 var data=new Uint8Array(buff); 79 var code=getCode(data); 80 if(code<1)return fileInfo.innerHTML+=s+"--------解密失败<br/>"; 81 for(var i=0;i<data.length;i++){ 82 data[i]=data[i]^code; 83 } 84 //let blob = new Blob(data,{type:getRealMimeType(data)});// 不能加`MIME`,数据 本身带有`MIME`信息,加了反而破坏数据了,搞死了 o(╥﹏╥)o 85 //show(blob); 86 show(new Blob([data]),s); 87 //downloadFile("aaa.jpg",data); 88 } 89 90 function show(blob,s){ 91 var img = document.createElement("img"); 92 img.onload = function (e) { 93 window.URL.revokeObjectURL(this.src); // 清除释放 94 }; 95 //img.src为Blob格式的img资源 96 img.title=s; 97 img.src = window.URL.createObjectURL(blob); 98 console.log(img.src) 99 imgs.append(img); 100 }
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
原文链接:https://www.cnblogs.com/lzpong/p/15123242.html
--- auth:lzpong
分类:
JavaScript
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2016-08-10 CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)