微信图片解密小工具

package main
 
import (
        "bufio"
        "fmt"
        "io/ioutil"
        "os"
        "runtime"
        "strings"
)
 
var fg string
var secKey byte
var decPath string
var dPath string
var workCount = 0  //工作中工人数
var maxWorker = 32 //最大工人数
var mainWorkerDone = false
var getFileWork = make(chan string) //分配工作
var workDone = make(chan bool)      //是否结束工作
 
func main() {
        //var rootpath string
        fmt.Println("说明:文件夹路径最后请勿带斜杠,请确认保存路径为已存在空文件夹!")
        fmt.Println("请输入待解密图片文件夹路径:")
        dscanner := bufio.NewScanner(os.Stdin) //用此方法可以获取带空格路径
        dscanner.Scan()
        dPath = dscanner.Text()
        fmt.Println("请输入待解密图片保存路径:")
        secscanner := bufio.NewScanner(os.Stdin)
        secscanner.Scan()
        decPath = secscanner.Text()
        systype := runtime.GOOS //获取操作系统类型
        if systype == "windows" {
                fg = "\\"
        } else {
                fg = "/"
        }
        secKey = getkey(dPath)
        fmt.Println(secKey)
        go getFileList()
        waitForWorkers()
}
 
func getkey(p string) (key byte) { //获取解密key
        dir_list, err := ioutil.ReadDir(p)
        if err == nil {
                for _, v := range dir_list { //循环查找文件,需要找到jpg加密特征码
                        if v.IsDir() == false { //判断是否是文件夹
                                fio, err := ioutil.ReadFile(p + fg + v.Name())
                                if fio[0] == fio[2] && err == nil {
                                        key = fio[0] ^ '\xFF' //异或运算获取解密key
                                        return key
                                }
                        }
                }
        }
        return
}
 
func decodepic() { //解密图片
        fname := <-getFileWork //向通道获取任务
        fpath := dPath + fg + fname
        ffio, err := ioutil.ReadFile(fpath)
        if err == nil {
                for i, val := range ffio {
                        ffio[i] = val ^ secKey
                }
                var hz string
                if ffio[0] == '\xFF' && ffio[1] == '\xD8' { //jpg格式
                        hz = "jpg"
                } else if ffio[0] == '\x89' && ffio[1] == '\x50' { //PNG格式
                        hz = "png"
                } else if ffio[0] == '\x42' && ffio[1] == '\x4D' { //bmp格式
                        hz = "bmp"
                } else if ffio[0] == '\x47' && ffio[1] == '\x49' { //gif格式
                        hz = "gif"
                } else { //未知格式
                        hz = "dat"
                }
                fname := strings.TrimRight(fname, "dat") + hz //生成新的名称
                decf := decPath + fg + fname
                ioutil.WriteFile(decf, ffio, 0666)
                //reFileName <- decf //向通道反馈解密的文件名
                fmt.Println(decf)
                workDone <- true //报告任务已经完成
        }
}
 
func waitForWorkers() { //任务循环监听进程
        for {
                if workCount < maxWorker { //布置新工作
                        go decodepic()
                        workCount++ //加个工人
                }
                select {
                case <-workDone:
                        workCount-- //工人减少
                }
                if mainWorkerDone == true && workCount == 0 { //所有工作完成,退出循环
                        return
                }
        }
}
 
func getFileList() { //任务发布者,根据获取的文件列表发送任务
        flist, err := ioutil.ReadDir(dPath)
        if err == nil {
                for _, ff := range flist {
                        if ff.IsDir() == false && strings.Contains(ff.Name(), ".dat") == true {
                                //t := dPath+fg+ff.Name()
                                getFileWork <- ff.Name()
                        }
                }
                mainWorkerDone = true //主任务结束标志
        }
}
当前内容已被隐藏,您需要登录才能查看
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论