Introduction: USB Rubber Ducky Script Encoder (VBScript)

About: Hello, my name is xp4xbox, a really old name that really has nothing to do with xbox consoles. Anyway I enjoy making programs and have several instructables on some of them. So far, I know VBScript, Batch, Pow…

If you have a USB Rubber Ducky, you will know that a very annoying task, is compiling your script to a .bin file. If you have to do any sort of debugging, you will know that constant downloading of your compiled script can be a pain. So to fix this problem, I created a VBScript that can compile your code fast and easy.

You can download the compiled .exe and the source code below.

Anyway, you are probably wondering how I made such an awesome GUI application in vbs, and if so, skip to step 3.

Step 1: Installing...

There are also instructions on how to do this in the REAMDE.txt file. Anyway, first you must create a folder in your C drive called 'temp' if you do not have one already. Also, if you do not already have java installed, you can get it from here. Next download the duckencode.jar and move the file to your c:\temp folder. Next, extract either one of the .zip files and run Duck.hta in the same directory as 'ico.ico' and 'pic.gif' if you are using the non-compiled version. Or if you are using the compiled .exe, simply run 'Duck.exe'.

Now we can move on to the next step...

Step 2: Usage...

This program is really straightforward, to use it, simply click on 'Paste from clipboard' to automatically paste in your code. Or click on load from text file, to load the script from a text file. Then your code will appear in the text box below. Make any final changes you may want to your code and hit 'Encode'. Navigate to c:\temp and move 'inject.bin' to your USB Rubber Ducky.

You may be wondering what script.txt is. What it is, is the uncompiled code from the text box. It is used as a backup of the raw code.

NOTE: If you want to make a small script, you could simply just type in your code in the text box. A fast and easy way to test out your USB Rubber Ducky.

Skip to the next step if you want to find out more about how GUIs in vbs and how this program was made, otherwise:

Thanks for reading this instructable, and if you have any questions, comments, or concerns, please post a comment or pm me.

Step 3: GUIs in VBScript

So yeah, it is possible to make GUIs in vbs. The way you do it, is by wrapping your text in a HTA. Incase you don't already know, HTA is a scripting language very similar to html used simply to wrap scripts such as vbscripts and jscripts in a GUI. Detailed explanation and tutorial here.

So now that you know what hta is, let me give you some tips on how to easily make theses. First download the HTA helpomatic (pic 2) below. Unfortunately the original link no longer works, but luckily I saved a copy a while back. Next download and install vbsedit, which comes with htaedit.

After you have these two programs, you really need no html/hta experience to start making GUIs. Which is great for people like me, who don't want to learn hta just to make GUIs.

Now move on to the next step to see how I made the Duck Encoder...

Step 4: How I Made It

So, first:

APPLICATIONNAME="Duck Encoder"
ID="DuckEncoder" VERSION="1.0" BORDER="dialog" INNERBORDER="no" MAXIMIZEBUTTON="no" ICON="ico.ico" SCROLL="no"

This sets up a few things such as the icon, border type, ect.

Sub Window_OnLoad
self.resizeTo 400, 454 Dim objFso : Set objFso = CreateObject("Scripting.FileSystemObject") If Not objFso.FileExists("c:\temp\duckencode.jar") Then MsgBox "Error, file not found: c:\temp\duckencode.jar",16,"Duck Encoder" Self.close() End If End Sub

Next, this sub, runs automatically whenever the program is first launched. What it does is resize the window then check to make sure that 'duckencode.jar' is in the correct directory.

Sub OnClickButtonbtnLoad()
	Dim objShlApp, objFolderLocation, strFileLocation, objFso, objFolder, colFiles, strTextFileList, objFile
	Dim strCompleteText
	Set objFso = CreateObject("Scripting.FileSystemObject")
	Set objShlApp = CreateObject("Shell.Application")
	On Error Resume Next
	Set objFolderLocation = objShlApp.BrowseForFolder(0, "Browse for folder containing the file: ",16384,0)
	If Err.Number <> 0 Then
		MsgBox "You must select the FOLDER containing the file.",16,"Duck Encoder"
		Err.Clear()
	Else
		If objFolderLocation = "" Then Exit Sub
		On Error Goto 0
		Set objFolder = objFso.GetFolder(objFolderLocation.Self.Path & "\")
		Set colFiles = objFolder.Files
		strTextFileList = ""
		For Each objFile In colFiles
			If InStr(objFile.Name,".txt") <> False Then
				strTextFileList = strTextFileList & objFile.Name & vbCrLf
			End If
		Next
		strFileLocation = InputBox("Please enter the correct text file you wish to encode: " & vbCrLf & vbCrLf & strTextFileList,"Ducky Encoder")
		If Not IsEmpty(strFileLocation) Then
			If Not objFso.FileExists(objFolderLocation.Self.Path & "\" & strFileLocation) Then
				MsgBox "Error, you must choose a text file from the list!",16,"Duck Encoder"
			Else
				On Error Resume Next
				strFileLocation = objFolderLocation.Self.Path & "\" & strFileLocation
				Set objFile = objFso.OpenTextFile(strFileLocation,1,FALSE)
				txtScript.Value = objFile.ReadAll
				objFile.Close()
				If Err.Number <> 0 Then
					MsgBox "Text file is empty.",16,"Duck Encoder"
				End If
			End If
		End If
	End if
End Sub

Ok, this part of the code is really confusing, this is the code for when the user clicks on 'Load from text file'. Since it is practically impossible to make a open-file dialog in hta, The program pops-up a browse for folder dialog to ask the user to select the folder containing the script file. Then the program opens up an inputbox asking the user which text file to load inside that folder. Then the program reads whatever is inside the file and puts it in the text box.

Sub OnClickButtonbtnPaste()
Dim objHTML, ClipboardText Set objHTML = CreateObject("htmlfile") ClipboardText = objHTML.ParentWindow.ClipboardData.GetData("text") If IsNull(ClipboardText) = True Then MsgBox "Nothing in the clipboard!",16,"Duck Encoder" Else txtScript.Value = ClipboardText End If End Sub

All this code does, is when the user clicks on 'Paste from clipboard', the program loads the text from the clipboard to the text box.

Step 5: How I Made It (part 2)

Sub OnClickButtonbtnEncode()<br>  If txtScript.Value = "" Then 
  	MsgBox "There is no code!",16,"Duck Encoder"
  Else
  	Dim objFso, txtScriptFile
  	Set objFso = CreateObject("Scripting.Filesystemobject")
	Set txtScriptFile = objFso.OpenTextFile("c:\temp\script.txt",2,True)
	txtScriptFile.WriteLine(txtScript.Value)
	txtScriptFile.Close()
	idTimer = window.setTimeout("Compile", 800, "VBScript")
  End If
End Sub
Sub Compile()
	window.clearTimeout(idTimer)
	Dim objWshShl : Set objWshShl = CreateObject("WScript.Shell")
	objWshShl.Run "java.exe -jar c:\temp\duckencode.jar -i c:\temp\script.txt -o c:\temp\inject.bin",0
	'MsgBox "Script compiled to inject.bin in c:\temp",vbOKOnly+vbInformation,"Ducky Encoder"
End Sub

This code is run when you click on 'Encode'.

What it does is creates a text file called script.txt and puts whatever is inside the textbox to it. Then it waits 0.8 seconds and then compiles it.

The rest of the code just creates the GUI. It's pretty self-explanatory if you know basic hta.