Delphi实现电脑端微信图片文件解密
电脑端微信收到图片后是存在了“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实现电脑端微信图片文件解密的更多相关文章
- 微信DAT文件解密(dat转图像)
微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...
- h5移动端实现图片文件上传
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现. JS代码 ...
- delphi TeeChart保存3种图片文件
var vForm: Tfrm_ChemaShowMainChild;begin vForm := GetActiveForm; vForm.cht_Edit.SaveToMetafile('C:\1 ...
- 微信DAT文件转JPG图片(图片恢复)
微信电脑版现在已经是日常工作生活必不可少的工具,有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片. 这个时候辛辛苦苦找到了文件,却发现无法查看,因为微信电脑版为了保护我们的隐 ...
- android微信聊天记录导出到电脑【微信安卓版技巧】
微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...
- 使用delphi+intraweb进行微信开发4—微信消息加解密
示例代码已经放出!请移步使用delphi+intraweb进行微信开发1~4代码示例进行下载,虽为示例代码但是是从我项目中移出来的,封装很完备适于自行扩展和修改. 在上一讲当中我做了个简单的微信文本消 ...
- 微信浏览器返回刷新,监听微信浏览器返回事件,网页防复制,移动端禁止图片长按和vivo手机点击img标签放大图片
以下代码都经过iphone7,华为MT7 ,谷歌浏览器,微信开发者工具,PC端微信验证.如有bug,还请在评论区留言. demo链接:https://pan.baidu.com/s/1c35mbjM ...
- web版仿微信聊天界面|h5仿微信电脑端案例开发
前几天开发了一款手机端h5仿微信聊天,人唯有不停学习才能进步,这段时间倒腾着整理了下之前项目,又重新在原先的那版基础上开发了一款仿微信聊天电脑端web版本,聊天页面又重新优化了多图预览.视频播放,右键 ...
- 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 被封了, ...
随机推荐
- 201521123085《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...
- linux下iconv()函数的用法(转载并修改)
linux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不 ...
- c# 浮点数计算问题
给大家看个计算题,看看大家的算术能力. 0.1 +0.1 +0.1 - 0.3 等于几? 大家可能会说这么简单的问题,是不是看不起我?肯定等于0啊. 如果大家直接算的是没有问题的,但是如果用计算机呢? ...
- [02] Servlet获取请求和页面跳转
1.Tomcat和Servlet的关系 之前提到过,Servlet是运行在Web容器里的,Tomcat作为容器的一种,在这里自然也要大概说说两者之间的大致关系. 首先,如上所述,Tomcat是Web应 ...
- u盘分区装机版
第一步:制作启动U盘前的软硬件准备 .准备一个最好大于2G的U盘,并先备份好里面的数据,防止接下来需要清空U盘的数据而出现丢失重要文件: 2.下载U盘启动盘制作工具6.1软件,直接放在桌面,方便接下来 ...
- 【译】The Accidental DBA:Troubleshooting Performance
最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...
- 支持语音识别、自然语言理解的微信小程序(“遥知之”智能小秘)完整源码分享
记录自己搭建https的silk录音文件语音识别服务的调用过程,所有代码可在文中找链接打包下载 >>>>>>>>>>>>> ...
- [UIKit学习]06.懒加载,模型,自定义代码段,重写构造方法
懒加载 在get中加载,且只加载一次 - (NSArray *)shops { if (_shops == nil) { NSString *file = [[NSBundle mainBundle] ...
- python进阶之Socket 网络编程
一:网络编程介绍 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两 ...
- 转自知乎(JAVA后台开发可以纯粹用JAVA SE吗?)
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:巴多崽链接:http://www.zhihu.com/question/29663744/answer/45154839来源: ...