rar5 网上大多数爆破软件不支持,只支持rar5以下的。所以自己写了一个爆破程序,考虑性能,用Golang去写,用到Golang里面的GO程。Go没有支持rar5解压的包,故调用cmd命令去执行。
cmd := exec.Command("unrar", "e","-p"+pass,rarpath,"D:/test") //解压出来保存 D/test 上
out, _ := cmd.Output()
fmt.Println(string(out))
passpath := "pass.txt"
fp, _ := os.OpenFile(passpath , os.O_RDONLY, 6)
defer fp.Close()
// 创建文件的缓存区
r := bufio.NewReader(fp)
for {
pass, err2 := r.ReadBytes('n')
if err2 == io.EOF { //文件末尾
break
}
pass = pass[:len(pass)-2] // 去除末尾 /n
fmt.Println(pass)
}
1、先下载WinRAR压缩软件,给cmd命令调动。
2、把WinRAR加入环境变量(方便cmd命令使用unrar)。
3、测试一下是否可以调用。
4、加载密码集,密码自己生成,可以参考我用Python写的密码生成器。
package main
import (
"bufio"
"fmt"
"io"
"os"
"os/exec"
"time"
)
var passpath string= "C:/Go/src/GoItem/pass.txt" //密码集 路径
var rarpath string= "C:/Go/src/GoItem/aa.rar" // rar 文件路径
var password = make(chan string) //创建管道,接收密码
var isOver = make(chan bool) //判断是否退出
func main() {
go passtxt(passpath)
Loop:
for{
select {
case rarpass:= <-password :
go cmdshell(rarpath,rarpass)
case <-time.After(time.Second * time.Duration(1)) :
break Loop
case <- isOver:
break Loop
}
}
}
func cmdshell(rarpath string,pass string){
cmd := exec.Command("unrar", "e","-p"+pass,rarpath,"D:/test") //解压出来保存 D/test 上
out, _ := cmd.Output()
fmt.Println(pass)
if len(out) == 248{ //len 248 为成功,每个人不同
fmt.Printf("密码为:%s n",pass)
isOver<-true // 成功后退出
}
}
func passtxt(passpath string) {
fp, _ := os.OpenFile(passpath , os.O_RDONLY, 6)
defer fp.Close()
// 创建文件的缓存区
r := bufio.NewReader(fp)
for {
pass, err2 := r.ReadBytes('n')
if err2 == io.EOF { //文件末尾
break
}
pass = pass[:len(pass)-2] // 去除末尾 /n
password <- string(pass)
}
}