电脑端微信收到图片后是存在了“C:\Users\系统用户名\Documents\WeChat Files\微信帐号\Data”目录下的,但文件不能直接使用图片浏览器打开的,因为做了一些加密,之前有个朋友问我这些文件怎么解密,就抽空研究了下。参考了一篇文章:http://share.iclient.ifeng.com/news/shareNews?forward=1&aid=117431304&from=timeline&isappinstalled=1&forward=1#backhead,文章里提到的是加密值:ox5,其实现在改了,是根据不同的图片格式采用不同的加密值了,今天这里使用Delphi来实现这个图片文件的解密,教你找到被撤回的微信图片或者存储被撤回的图片,哈哈。直接上代码吧!

uses
System.SysUtils, System.Classes, Winapi.Windows, System.Math, System.StrUtils; // 计算MagicCode以及图片类型
function CalcMagicCode(const AHeadCode: Word; var AMagicCode: Word; var AFileExt: string): Boolean;
const
C_TypeCodeArr: array of Word = [$4D42, $D8FF, $4947, $5089];
C_TypeExtArr: array of string = ['.bmp', '.jpeg', '.gif', '.png'];
var
I: Integer;
LByte1, LByte2: Byte;
LMagicCode: Word;
begin
Result := False;
LByte1 := Byte(AHeadCode);
LByte2 := HiByte(AHeadCode);
for I := Low(C_TypeCodeArr) to High(C_TypeCodeArr) do
begin
LMagicCode := Byte(C_TypeCodeArr[I]) xor LByte1;
if LMagicCode = (HiByte(C_TypeCodeArr[I]) xor LByte2) then
begin
AMagicCode := LMagicCode;
AFileExt := C_TypeExtArr[I];
Result := True;
end;
end;
end; procedure MakeFileList(const Path, FileExt: string; AFileList: TStrings);
var
sch: TSearchRec;
tmpPath: string;
begin
if RightStr(Trim(Path), 1) <> '\' then
tmpPath := Trim(Path) + '\'
else
tmpPath := Trim(Path);
if not DirectoryExists(tmpPath) then
Exit;
if FindFirst(tmpPath + '*', faAnyFile, sch) = 0 then
begin
repeat
if ((sch.Name = '.') or (sch.Name = '..')) then
Continue;
if (UpperCase(ExtractFileExt(tmpPath + sch.Name)) = UpperCase(FileExt)) or (FileExt = '.*') then
AFileList.Add(tmpPath + sch.Name);
until FindNext(sch) <> 0;
System.SysUtils.FindClose(sch);
end;
end; procedure DecryptWXImgFile(const ASrcFile, ASavePath: string);
var
LSrcStream: TMemoryStream;
LDesStream: TFileStream;
LFilesize, LPos: Integer;
LBuffer: Word;
LSrcByte, LDesByte: Byte;
LMagicCode: Word;
LFileExt, LFileName: string;
begin
LSrcStream := TMemoryStream.Create;
try
LSrcStream.LoadFromFile(ASrcFile);
LSrcStream.Position := 0;
LSrcStream.ReadBuffer(LBuffer, 2);
if CalcMagicCode(LBuffer, LMagicCode, LFileExt) then
begin
LFileName := ASavePath + ChangeFileExt(ExtractFileName(ASrcFile), LFileExt);
LDesStream := TFileStream.Create(LFileName, fmCreate);
try
LPos := 0;
LFilesize := LSrcStream.Size;
// 此处效率低,需要优化
while LPos < LFilesize do
begin
LSrcStream.Position := LPos;
LSrcStream.ReadBuffer(LSrcByte, 1);
LDesByte := LSrcByte xor LMagicCode;
LDesStream.WriteBuffer(LDesByte, 1);
Inc(LPos);
end;
finally
LDesStream.Free;
end;
end;
finally
LSrcStream.Free;
end;
end;

调用方法:

DecryptWXImgFile(‘C:\Users\5bug\Documents\WeChat Files\Wubug5\Data\1383774871197177544.dat’, ‘C:\Users\5bug\Desktop\test\’);

以上代码里有一处自行优化吧,否则效率非常低下!只要监控这个存储目录,就可以实现找到被撤回的微信图片或者存储被撤回的图片了,还可以实现一些小工具了,比如微信防撤回图片存储器,微信图片整理工具等了。

另外爱好Delphi的而且正在学习Python的同学可以加群一起交流啊QQ群643829693!

Delphi实现电脑端微信图片文件解密的更多相关文章

  1. 微信DAT文件解密(dat转图像)

    微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...

  2. h5移动端实现图片文件上传

    PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. JS代码 ...

  3. delphi TeeChart保存3种图片文件

    var vForm: Tfrm_ChemaShowMainChild;begin vForm := GetActiveForm; vForm.cht_Edit.SaveToMetafile('C:\1 ...

  4. 微信DAT文件转JPG图片(图片恢复)

    微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...

  5. android微信聊天记录导出到电脑【微信安卓版技巧】

    微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...

  6. 使用delphi+intraweb进行微信开发4—微信消息加解密

    示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. 在上一讲当中我做了个简单的微信文本消 ...

  7. 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片

    以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...

  8. web版仿微信聊天界面|h5仿微信电脑端案例开发

    前几天开发了一款手机端h5仿微信聊天,人唯有不停学习才能进步,这段时间倒腾着整理了下之前项目,又重新在原先的那版基础上开发了一款仿微信聊天电脑端web版本,聊天页面又重新优化了多图预览.视频播放,右键 ...

  9. Your wechat account may be LIMITED to log in WEB wechat, error info: <error><ret>1203</ret><message>为了你的帐号安全,此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。Windows微信下载地址:WeChat for PC

    转载:https://zhuanlan.zhihu.com/p/76180564 微信网页版限制登录或禁止登录将影响一大批使用itchat等Web Api方案的微信机器人 网页版微信 API 被封了, ...

随机推荐

  1. [2017BUAA软工助教]博客格式的详细说明

    一.为什么要强调博客格式 可以对比粗读一下这几篇博客然后自己感受一下博客格式对博客阅读体验的影响: MarkDown流:    [schaepher]2017春季 JMU 1414软工助教 链接汇总 ...

  2. 201521123055 《Java程序设计》第5周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1. ...

  3. 201521123059 《Java程序设计》第一周学习总结

    第一周学习总结 1.本周学习总结 开学第周我们开始了JAVA学习,刚开始还有点懵,连熟悉相关的软件都要摸索很久,最后在看老师给的一些教程和课本的情况下安装了JDK和eclipse等软件,并进行了一次实 ...

  4. 201521123096《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 (1)互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  5. 201521123104《java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  6. JAVA课程设计--------五子棋

    1.团队课程设计博客链接 http://www.cnblogs.com/mz201521044152/p/7065575.html 2.个人负责模块或任务说明 1.重新开始:写一个restartgam ...

  7. JAVA课程设计-购物车 (201521123101 柏清晔)

    1.团队课程设计博客链接 /[团队博客链接]http://www.cnblogs.com/yayaya/p/7062197.html 2.个人负责模板或任务说明 1.连接数据库 2.修改购物车的jsp ...

  8. dup和dup2详解

    C语言中dup和dup2函数的不同和使用 发表时间: 2012年11月15日 | 作者: 陈杰斌 | 所属分类: C语言 | 评论: 0 | 浏览: 1024 在unix高级编程中有介绍dup和dup ...

  9. Modeling -> Mixamo auto rigging -> UE4 retargeting

    In general, there are 3 ways we can work with the Blender-UE4 pipeline:   1 Model character Export m ...

  10. Sql Server——基础

    前言: 在了解数据库之前,我们应该首先了解一下和数据库有关的知识,如:什么是数据,什么又是数据库等.  数据:描述事物的符号记录称为数据,它是数据库中存储的基本对象.  数据库(Datebase):数 ...