图片句柄_PC微信逆向:自动保存加密的聊天图片

前言

本文基于anhkgg大佬的文章《微信PC端技术研究(2)-拿下语音》原文链接:https://bbs.pediy.com/thread-249274.htm

anhkgg大佬的这篇文章找到了保存语音消息的接口,这里直接给出相关特征码,方便定位(我使用的微信版本依旧是2.6.8.52)

偏移为0x30E326,下面的特征码

7e7aa323a3c01935eac05e1e5eb5cad9.png

基于保存语音的相关延伸

其实这个地方不单单有语音消息,还有图片消息,当我们发送一条图片消息时

61c8a401d5c65aff0945f1cdbec0fbdc.png

[edi+0x30]的内容里面保存有这一次发送图片的相关数据,包括微信ID等一系列原始的数据。我们当然可以在这个地方写HOOK来保存图片,但是没有必要。因为这里的消息内容过多,处理起来相对会比较麻烦。

图片处理的相关流程

既然这个地方是最原始的消息内容,那么后面肯定会对消息进行相关处理。而且我们已经知道微信的接收的图片会用异或加密的方式保存到本地。那么我们不妨猜测一下图片相关的处理流程。

首先接收到原始的消息后,会对消息进行一系列的处理,其中就包括判断消息是否是图片。那么如果是图片则会取出图片数据,然后在内存中对图片进行加密。加密完成之后调用文件操作的API,写入加密后的图片到本地。

整个过程如图所示:

c654caa6e6409a8402d202bd2fc57d63.png

自动保存图片相关思路

既然了解图片处理的流程,而且已经有了接收图片消息的call,那么我们就可以在接收到图片消息之后,在CreateFileW创建图片之前,找到对图片进行加密的算法和函数,将未加密前的图片保存出来。

实战保存聊天图片

26fb6c634d645f2be5b637b65be5611a.png

在OD中找到保存语音的call,发送图片消息让程序断下的同时,对CreateFileW进行下断。之后F9运行

6e87ec0f9b5c9c4ba08e36e8a87e5cf6.png


此时文件路径为xlog,这个明显不符合我们的要求,继续F9运行

bb872fb9aa8bbe36a2bd07e7e36f2de6.png


一直找到图片路径带有Image关键字时,在创建图片

777d216bc082d37cbe57b841dbbc70f5.png


此时我们点击K显示堆栈,找到第一层返回地址,右键显示调用

cefaf2215539650504ffed8a74c270f6.png


当微信运行到这里的时候,图片加密已经完成,我们要在这个函数之前找到图片的加密算法,其实就在上面一点点的位置,鼠标稍微往上翻一下就能看到

831de28b706548334a6dcfc35b9398fa.png


找到这个地方之后清除剩下的所有的断点,只保留这一个

对保存图片call的相关分析

再次发送一张图片,程序断下。这段代码首先用循环的方式对图片进行加密,循环的次数即ecx的值,也就是图片的大小。其中有两个数据比较重要。

3fdfa5efc3ff03e4d7aa23b755806ea6.png

我们先在内存中查看[ebp-0x14]的内容,想要知道这段数据是什么其实很简单。先下CreateFileW断点

32a8e2bd6b179911301f2e7393d58147.png


当CreateFileW断点断下后,执行到返回,查看打开的文件句柄

76b056a9819da8e3d991087bfcae701f.png


此时打开的图片句柄为0xF80,此时再下WriteFile断点

92b36d8a2449756103f1c3c66878f3ec.png


WriteFile断下后可以看到句柄为F80,写入的缓冲区地址为39FE820,而[ebp-0x14]的地址正好也是39FE820。也就是说[ebp-0x14]这个位置保存的是加密后的图片数据

回到之前的断点,再次发送一张图片,查看[ebp-0x4]的数据

c671c7220ab996406e7f98a065e69e13.png

此时[ebp-0x4]中保存了接收的图片,而ecx保存了图片的大小

3bfc4e1e7c7547e98235c6cca454d5e2.png
ecdc468cb60bb103e79bb5bd19732878.png


这里借用PCHunter查看->进程内存,将这一段数据dump下来

2408d3ea111a37bb0d2080fab3b84281.png

问题就在于这里只是一张大小为4KB的缩略图,回到OD,再次按F9运行

b1a3045bb9f443a904a4c0ae133db25b.png


断点断下,但是此时ecx的值变成0x5A140

edd6039d6d7766ce9374d23d413e70f0.png


用同样的方法dump下内存,大小为360KB,这个就是我们需要的原图了。

也就是说这个地方会端下来两次,第一次是缩略图,第二次才是我们要的原图。

代码实现保存聊天图片

示例代码如下:

a7c62eca08167e9993b6410d419ddb7c.png
12cfc976c8abbad9d82563c76cb6ac77.png
5092b4eee5590bfd092aed4b96c76e1d.png

实际效果

83d3a52446d7ba61a17cd804945ca4bf.gif


原文链接:https://blog.csdn.net/qq_38474570/article/details/101755586

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复制密钥文件到另一台服务器,使用所有ssh密钥从第三台服务器在两台服务器之间远程复制...

我正在用python编写一个部署脚本,但是在我完成它之后,我发现可能不可能实现我的想法。在情况是这样的。在我有三个主人。在主机1:Ubuntu 12.04主机2:SUSE Linux Enterprise Server 11 SP1主机3:Windows Server 2008 R2,安装了Cygwin 1.7.8&am…

Unity手游之路十自动寻路Navmesh之跳跃,攀爬,斜坡

转载 Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡 分类&#xff1a; unity2013-12-27 00:50 6545人阅读 评论(5) 收藏 举报unity3dNavmesh手游自动寻路在之前的几篇Blog总&#xff0c;我们已经系统学习了自动寻路插件Navmesh的相关概念和细节。然而&#xff0c;如…

热点分析图_通过分析功率MOSFET管的工作特性,判断其损坏原因

0 前言目前&#xff0c;功率 MOSFET管广泛地应用于开关电源系统及其它的一些功率电子电路中&#xff0c;然而&#xff0c;在实际的应用中&#xff0c;通常&#xff0c;在一些极端的边界条件下&#xff0c;如系统的输出短路及过载测试&#xff0c;输入过电压测试以及动态的老化测…

隔年增长的题_资料分析——隔年增长

【导读】中公事业单位为帮助各位考生顺利通过事业单位招聘考试&#xff01;今天为大家带来事业单位考试题库及答案&#xff1a;资料分析——隔年增长。希望可以帮助各位考生顺利备考&#xff01;在公考中&#xff0c;资料分析的重要性显得尤为重要&#xff0c;面对激烈的竞争和…

Nim博弈游戏

给定n堆石子&#xff0c;每次每人能从一堆石子中取若干个石子&#xff08;不能不取&#xff09;&#xff0c;最后不能取石子者败 对于这个游戏&#xff0c;我们要判断的是&#xff0c;给定局势下&#xff0c;先手者胜还是败 设先手胜的局势为N-postion&#xff0c;先手败的局势…

显示多个页面退出登陆_软件测试小白如何第一次登陆时给LINUX的配置网络

接着上一期分享&#xff0c;今天分享的是虚拟机配置完成以后我们接下来怎么做首先我们进入终端登录以后先显示的是user用户点击user输入密码&#xff0c;回车或者点击sigh ln第一次进入会让你选择语音&#xff0c;你可以根据自己的喜好决定如果安装的可视化界面&#xff0c;你的…

SQL Server的聚集索引和非聚集索引

微软的SQL SERVER提供了两种索引&#xff1a;聚集索引(clustered index&#xff0c;也称聚类索引、簇集索引)和非聚集索引(nonclustered index&#xff0c;也称非聚类索引、非簇集索引)……   (一)深入浅出理解索引结构   实际上&#xff0c;您可以把索引理解为一种特殊的目…

python math库函数源码_11. math库函数

一、math库介绍内置数学类函数库&#xff0c;math库不支持复数类型&#xff0c;仅支持整数和浮点数运算。math库一共提供了&#xff1a;4个数字常数44个函数&#xff0c;分为4类&#xff1a;16个数值表示函数8个幂对数函数16个三角对数函数4个高等特殊函数库中函数不能直接使用…

原理 msc_计算机网络原理梳理丨无线与移动网络

目录无线网络移动网络IEEE802.11蜂窝网络移动IP网络其它典型无线网络介绍无线网络无线网络的基本结构无线主机无线链路基站网络基础设施自组织网络(Ad Hoc网络)无线链路与无线网络特性无线链路与有线链路主要区别&#xff1a;1.信号强度的衰弱2.干扰3.多径传播4.隐藏终端移动网…

如何卸载rpm

首先通过 rpm -q <关键字> 可以查询到rpm包的名字 或者rpm -qa|grep 关键字 然后 调用 rpm -e <包的名字> 删除特定rpm包 如果遇到依赖&#xff0c;无法删除&#xff0c;使用 rpm -e --nodeps <包的名字> 不检查依赖&#xff0c;直接删除rpm包 如果恰好有多…

python实现逐步回归分析_Python实现逐步回归(stepwise regression)

逐步回归的基本思想是将变量逐个引入模型&#xff0c;每引入一个解释变量后都要进行F检验&#xff0c;并对已经选入的解释变量逐个进行t检验&#xff0c;当原来引入的解释变量由于后面解释变量的引入变得不再显著时&#xff0c;则将其删除。以确保每次引入新的变量之前回归方程…

二维数组最大子数组和

一&#xff0e;实验题目 求一个二维数组中和最大的子数组。 二&#xff0e;实验思路 基于我们第一次合作时求的一位数组最大子数组&#xff0c;加上一层循环来遍历二维数组中的所有子矩阵的情况。 第一步&#xff1a;先利用上次的方法求每一行的情况&#xff0c;将每行结果存入…

木炭怎么获得_木炭机一体化流程中制做木炭是怎么完成的

关注我们获得更多精彩内容木炭机一体化流程中制做木炭是怎么完成的&#xff0c;木炭机生产线中炭化炉是核心设备。炭化炉炭化过程决定了木炭质量和效果。木炭机生产线中炭化过程需要经历三个不同温度阶段。三个不同温度阶段对薪棒的炭化作用不同。炭化好坏标志着木炭机制炭效果…

HDU 4540

简单得不能再简单的DP了。 #include<iostream> const int inf1<<30; using namespace std; int map[22][22]; int dp[22][22];//表示前i个时刻在第j个位置时的最小消耗能量 int n,m;int main(){while(~scanf("%d%d",&n,&m)){for(int i1;i<n;i…

esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

arduino开发ESP8266学习笔记四—–舵机使用时发现会有ESP8266掉电的情况&#xff0c;应该是板上的稳压芯片的限流导致的&#xff0c;观测波形&#xff0c;发现当舵机运转时&#xff0c;电源线3.3V不再是稳定的3.3V&#xff0c;大概是在3.0V到3.3V范围内高频振动&#xff0c;这应…

【转载】网易将军令工作原理

最近开始玩梦幻手游&#xff0c;为了领以前端游的返利必须输入将军令&#xff0c;那个已经一年没用了&#xff0c;输入了几次都提示错误&#xff08;后来证实是系统繁忙而已&#xff09;&#xff0c;我以为是将军令时间不对了&#xff0c;所以用了下官网的修复功能。也对将军令…

返回数据_多层数据返回匹配值

↑↑↑点击上方图片&#xff0c;了解详情Access Switch函数示例&#xff0c;分享源码。一、问题描述&#xff1a;想实现如下功能&#xff0c;发现用iff嵌套方式太复杂&#xff0c;有没有更简单的方法&#xff1f; A1≤750 返回5.0 750&#xff1c;A1≤865 返回5.…

通知中心 NSNotificationCenter 的简单使用方法

NSNotificationCenter(通知中心)【注意】需再dealloc中移除观察者获取通知中心单例对象NSNotificationCenter *center[NSNotificationCenter defaultCenter]; 常用方法:1.注册观察者- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(…

solaris mysql_配置Solaris下自带的MYSQL

Solaris自带了mysql服务器&#xff0c;省事不少。用的时候只有小小的配置下就可以搞定。1.用ROOT用户登陆系统&#xff0c;在终端输入/usr/sfw/bin/mysql_install_db2.建立mysql user和 group&#xff1a;# groupadd mysql# useradd -g mysql mysql# chgrp -R mysql /var/mysql…

mysql 1786_mysql错误处理之ERROR 1786 (HY000)

ERROR 1786 (HY000)【环境描述】msyql5.6.14【报错信息】执行create table ... select的时候遇到报错&#xff1a;复制代码 代码如下:db1 [test] [23:01:58]> create tablelgmnr_bak select * from lgmnr;ERROR 1786 (HY000): CREATE TABLE ... SELECTis forbidden when GLO…