PC微信本地图片格式转化

PC微信本地图片格式转化

点点

2021-06-30 20:46 阅读 1706 喜欢 0

PC端微信收到的图片存储在本地,我们可以打开微信的设置->通用设置->文件管理->打开文件夹,在FileStorage/Image日期目录下找到图片文件,但是它经过了简单的加密并且后缀为.dat。

通过下面这个算法可以将dat文件还原成原始图片,目前支持jpg,gif,png三种格式,其他格式应该也同理。

golang代码如下:

const ( jpg0 = 0xFF jpg1 = 0xD8 gif0 = 0x47 gif1 = 0x49 png0 = 0x89 png1 = 0x50 )

func Dat2Image(datpath string) (string, error) { b, err := ioutil.ReadFile(datpath) if err != nil { return "", err } if len(b) < 2 { return "", errors.New("image size error") }

j0 := b[0] ^ jpg0
j1 := b[1] ^ jpg1
g0 := b[0] ^ gif0
g1 := b[1] ^ gif1
p0 := b[0] ^ png0
p1 := b[1] ^ png1
var v byte
var ext string
if j0 == j1 {
    v = j0
    ext = "jpg"
} else if g0 == g1 {
    v = g0
    ext = "gif"
} else if p0 == p1 {
    v = p0
    ext = "png"
} else {
    return "", errors.New("unknown image format")
}

for i := range b {
    b[i] = b[i] ^ v
}

imgpath := datpath[0:len(datpath)-len(ext)] + ext
err = ioutil.WriteFile(imgpath, b, os.ModePerm)
return imgpath, err

} 1const ( jpg0 = 0xFF jpg1 = 0xD8 gif0 = 0x47 gif1 = 0x49 png0 = 0x89 png1 = 0x50 )

func Dat2Image(datpath string) (string, error) { b, err := ioutil.ReadFile(datpath) if err != nil { return "", err } if len(b) < 2 { return "", errors.New("image size error") }

j0 := b[0] ^ jpg0
j1 := b[1] ^ jpg1
g0 := b[0] ^ gif0
g1 := b[1] ^ gif1
p0 := b[0] ^ png0
p1 := b[1] ^ png1
var v byte
var ext string
if j0 == j1 {
    v = j0
    ext = "jpg"
} else if g0 == g1 {
    v = g0
    ext = "gif"
} else if p0 == p1 {
    v = p0
    ext = "png"
} else {
    return "", errors.New("unknown image format")
}

for i := range b {
    b[i] = b[i] ^ v
}

imgpath := datpath[0:len(datpath)-len(ext)] + ext
err = ioutil.WriteFile(imgpath, b, os.ModePerm)
return imgpath, err

}

成功后会在dat所在的目录生成相同名字的图片文件(后缀是具体图片格式)

前六个常量根据名字可以知道分别是jpg,gif,png图片十六进制文件的前两个字符,可以用ultraedit等软件打开相应格式的图片,通过十六进制方式查看前两个字符就是上面的常量,这个数值是固定的。

这个加密只是简单的用同一个字符对图片的每个字符进行异或,我们只要找到是哪个值就可以了,比如这个变量的名字是v

列举了三种常用的格式,假定图片一定是这三种中的一种,这样就好办了,因为这三种图片的前两个字符是已知的,而dat文件的前两个字符也是已知的,将对应的字符异或后如果相等就能确定图片确实是这种格式并且异或后的值就是我们要找的那个变量v(这里要好好理解下),如果不相等就继续换下一种格式尝试,总共只有那么几种格式很容易就试出来了

最后用得到的v对dat文件的每个字符进行异或就可以还原出原始图片

用golang写了一个简单的转换程序,只要将wechat_dat_to_image.exe在需要转换的dat文件所在目录下运行就可以了,在github源码里可以下载到这个程序。

工具下载地址:http://www.sdxlp.cn/tool/wechatdat

希望可以解决各位朋友的困扰。

转载请注明出处: http://sdxlp.cn/article/tutu2.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
我们日常必备的聊天工具微信,在使用的时候也有误删人的情况出现,这个时候小伙伴们知道怎么悄悄的将删除的人加回来呢?最快将删除的人加回来的方法有哪些呢?
对iPhone13Pro系列来说,新增的功能中最亮眼的一个就是可以拍摄ProRes视频,但是对于一些小伙伴们来说,并不知道iPhone13Pro怎么拍ProRes视频?那么下面就让点点给小伙伴们介绍一下具体的拍摄教程。
近期有大量的iPhone13用户称自己遇到了iPhone出现粉屏的情况,并且是出现很多次的那种,询问客服之后也没有解决方法,所以很多用户想要知道iPhone13粉屏重启怎么办,下面就让点点给小伙伴们介绍一下。
平常生活中,我们很多的时候都会用到电脑,现在大部分电脑都是win10系统,有些用户遇到了无法安装软件问题,想知道如何解决?跟小编来。
智能手机是我们生活中的标配,有很多的手机功能不太好用,该如何处理哪?例如智能手机红米手机也是搭载了最新的miui13系统,所以也是具备miui13系统中的最新的纯净模式的,所以很多用户在打开之后就会造成无法下载第三方软件,很多小伙伴们觉得不太好用,所以很多小伙伴们想要知道红米手机纯净模式怎么关闭?
现在有很多企业都在使用钉钉办公,有些小伙伴嘛呢不知道电脑钉钉怎么设置OA审批人员,接下来小编就给小伙伴们介绍一下具体的操作步骤。
一年一次的五福活动又上线啦!呵呵,是不是很多小伙伴们都集齐啦!今年的有点特别哟!支付宝集五福活动中,可以使用我们多余的福卡去抽奖或者是兑换支付宝中的活动商品,其中就有好看点五福口罩,很多小伙伴们都想要知道支付宝五福口罩怎么兑换,下面就让点点给小伙伴们介绍一下兑换教程。
小伙伴们在玩华为手机过程中,手机拍照、截图、聊天等都会产生数据文件占用手机内存,当手机空间不足时就会影响小伙伴们的使用体验,那怎么清理华为手机内存空间呢?