电脑端微信收到图片后是存在了“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. 团队作业4----第一次项目冲刺(Alpha版本)4.24

    a.提供当天站立式会议照片 会议内容: ①:对数据库的设计存在问题的进一步讨论 ②:讨论需求分析中的存在的难解决的问题,比如要做到较好的反应用户的行为. ③:分配今天的任务 b. 每个人的工作 工作完 ...

  2. sudoku--设想

    在查阅了一些资料和自己动手写一写后,找到一种可行的解法. 第一步 首先将9x9的数独方格分成九份3x3的九宫格,如下图 B1 B2 B3 B4 B5 B6 B7 B8 B9 而后在左上角的B1上随机生 ...

  3. 201521123012 《Java程序设计》第七周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代 ...

  4. 201521123115 《Java程序设计》第4周学习总结

    1.本周学习总结 2.书面作业 1.注释的作用 2.面向对象设计 2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事.(不得少于50字,参考QQ群中PPT的范例). 感觉自己在代码方 ...

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

    本周学习总结 String常量,创建之后不能再进行修改 使用+连接字符串会产生新字符串,要大量使用重复性连接应用StringBuilder,检测字符串相等应用equal方法. 枚举类型变量的取值在一个 ...

  6. Java 课程设计 "Give it up"小游戏(团队)

    JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...

  7. 201521123039《java程序设计》第十四周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 2 ...

  8. 201521123113《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  9. python 浅析模块

    今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块. 首先说一下对模块 ...

  10. Python学习笔记006_异常_else_with

    >>> # try-except语句 >>> >>> # try : >>> # 检测范围 >>> # exc ...