列表

详情


FileStoragedat

平台   MISC   已通过

题目作者: Tokeii

一  血: ‌‌‌‌‌⎝Lazzaro⎠

一血奖励: 3金币

解  决: 1900

提  示:

描  述: 标题有用 格式bugku{}

附  件: 下载

站长题解:

使用工具解密dat文件即可

package main

import (
	"bufio"
	"encoding/hex"
	"errors"
	"flag"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"sync"
	"time"
)

var imagePrefixBtsMap = make(map[string][]byte)

func main() {
	var dir, outputDir string
	flag.StringVar(&dir, "in", ".", "要处理的目录")
	flag.StringVar(&outputDir, "out", ".", "要输出的目录")
	flag.Parse()
	fmt.Printf(`
处理目录:%v
输出目录:%v
`, dir, outputDir)

	startTime := time.Now()
	f, er := os.Open(dir)
	if er != nil {
		fmt.Println(er.Error())
		panic("dir not find")
	}
	readdir, er := f.Readdir(0)
	if er != nil {
		fmt.Println(er.Error())
	}

	if stat, er := os.Stat(outputDir); os.IsNotExist(er) {
		er := os.MkdirAll(outputDir, 0755)
		if er != nil {
			panic("create dir: " + outputDir + " fail")
		}
	} else if !stat.IsDir() {
		panic(outputDir + "is file")
	}

	var taskChan = make(chan os.FileInfo, 100)

	go func() {
		for _, info := range readdir {
			taskChan <- info
		}
		close(taskChan)
	}()

	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			for info := range taskChan {
				handlerOne(info, dir, outputDir)
			}
		}()
	}

	wg.Wait()
	t := time.Now().Sub(startTime).Seconds()
	fmt.Printf("\nfinished time= %v s\n", t)
}

func handlerOne(info os.FileInfo, dir string, outputDir string, ) {
	if info.IsDir() || filepath.Ext(info.Name()) != ".dat" {
		return
	}
	fmt.Println("find file: ", info.Name())
	fPath := dir + "/" + info.Name()
	sourceFile, err := os.Open(fPath)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	var preTenBts = make([]byte, 10)
	_, _ = sourceFile.Read(preTenBts)
	decodeByte, ext, er := findDecodeByte(preTenBts)
	if er != nil {
		fmt.Println(er.Error())
		return
	}

	distFile, er := os.Create(outputDir + "/" + info.Name() + ext)
	if er != nil {
		fmt.Println(er.Error())
		return
	}
	writer := bufio.NewWriter(distFile)
	_, _ = sourceFile.Seek(0, 0)
	var rBts = make([]byte, 1024)
	for {
		n, er := sourceFile.Read(rBts)
		if er != nil {
			if er == io.EOF {
				break
			}
			fmt.Println("error: ", er.Error())
			return
		}
		for i := 0; i < n; i++ {
			_ = writer.WriteByte(rBts[i] ^ decodeByte)
		}
	}
	_ = writer.Flush()
	_ = distFile.Close()

	fmt.Println("output file:", distFile.Name())
}

func init() {
	//JPEG (jpg),文件头:FFD8FF
	//PNG (png),文件头:89504E47
	//GIF (gif),文件头:47494638
	//TIFF (tif),文件头:49492A00
	//Windows Bitmap (bmp),文件头:424D
	const (
		Jpeg = "FFD8FF"
		Png  = "89504E47"
		Gif  = "47494638"
		Tif  = "49492A00"
		Bmp  = "424D"
	)
	JpegPrefixBytes, _ := hex.DecodeString(Jpeg)
	PngPrefixBytes, _ := hex.DecodeString(Png)
	GifPrefixBytes, _ := hex.DecodeString(Gif)
	TifPrefixBytes, _ := hex.DecodeString(Tif)
	BmpPrefixBytes, _ := hex.DecodeString(Bmp)

	imagePrefixBtsMap = map[string][]byte{
		".jpeg": JpegPrefixBytes,
		".png":  PngPrefixBytes,
		".gif":  GifPrefixBytes,
		".tif":  TifPrefixBytes,
		".bmp":  BmpPrefixBytes,
	}
}

func findDecodeByte(bts []byte) (byte, string, error) {
	for ext, prefixBytes := range imagePrefixBtsMap {
		deCodeByte, err := testPrefix(prefixBytes, bts)
		if err == nil {
			return deCodeByte, ext, err
		}
	}
	return 0, "", errors.New("decode fail")
}

func testPrefix(prefixBytes []byte, bts []byte) (deCodeByte byte, error error) {
	var initDecodeByte = prefixBytes[0] ^ bts[0]
	for i, prefixByte := range prefixBytes {
		if b := prefixByte ^ bts[i]; b != initDecodeByte {
			return 0, errors.New("no")
		}
	}
	return initDecodeByte, nil
}

去做题

lsh1234 @ 2024-05-07 23:19:44 👍0

https://lindi.cc/wp-content/uploads/2020/12/WXDatConvterV05.rar 超好用的工具下载


2722592794 @ 2023-11-07 23:19:44 👍0

原神启动:dat解密


15056775319 @ 2023-06-07 23:19:44 👍1

WXDatConvterV05工具直接解


aWxvdmVjdGY @ 2023-06-07 23:19:44 👍0

开源的微信Dat文件解码器 http://github.com/PiaoZhenJia/WeChatDatFileDecoder


阿Q啊 @ 2023-06-07 23:19:44 👍2

听人劝吃饱饭,用大佬们推荐的软件直接破解,虽然没学到什么,但是收获了一个工具


aWxvdmVjdGY @ 2023-06-07 23:19:44 👍0

收获解码器+1


lysandria @ 2023-06-07 23:19:44 👍0

FileStorage解密。


⎝/fuhry\⎠ @ 2023-06-07 23:19:44 👍3

这个工具确实牛 https://lindi.cc/archives/301


ShenlEraN @ 2023-06-07 23:19:44 👍2

我超,原


PPEEDD @ 2022-06-07 23:19:44 👍1

https://lindi.cc/archives/301(工具链接),提示:dat文件没有固定的格式,可能是图片,也可能是视频文件,具体要看创造者规定它的类型1


Zbyc @ 2022-06-07 23:19:44 👍0

啊吧啊吧....