![]() |
|
[VB.Net]bat 2 exe - Printable Version +- Sinisterly (https://sinister.li) +-- Forum: Coding (https://sinister.li/Forum-Coding) +--- Forum: Visual Basic & .NET Framework (https://sinister.li/Forum-Visual-Basic-NET-Framework) +--- Thread: [VB.Net]bat 2 exe (/Thread-VB-Net-bat-2-exe) |
[VB.Net]bat 2 exe - mR.v - 05-19-2013 This is my bat2exe converter..but not really convert it..this code will create new *.exe file and write this code in it Code: "Module BtE" & vbNewLine & _
"Sub Main()" & vbNewLine & _
"If System.IO.File.Exists(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ") Then" & vbNewLine & _
"System.IO.File.Delete(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ")" & vbNewLine & _
"End If" & vbNewLine & _
"System.IO.File.WriteAllText(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ", {BATCH})" & vbNewLine & _
"System.Diagnostics.Process.Start(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ")" & vbNewLine & _
"End Sub" & vbNewLine & _
"End Module"sample: before convert:click here after convert:click here now create new project and add label1="file:" label2=leave it empty button1=convert button2=browse textbox1 progressbar1 now add this code: Code: Imports System.CodeDom.Compiler
Public Class Form1
Dim Source As String = _
"Module BtE" & vbNewLine & _
"Sub Main()" & vbNewLine & _
"If System.IO.File.Exists(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ") Then" & vbNewLine & _
"System.IO.File.Delete(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ")" & vbNewLine & _
"End If" & vbNewLine & _
"System.IO.File.WriteAllText(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ", {BATCH})" & vbNewLine & _
"System.Diagnostics.Process.Start(System.Environment.GetEnvironmentVariable(" & Chr(34) & "TMP" & Chr(34) & ") & " & Chr(34) & "\cmd.bat" & Chr(34) & ")" & vbNewLine & _
"End Sub" & vbNewLine & _
"End Module"
Public Sub GenerateExecutable(ByVal Output As String, ByVal Source As String)
Try
Dim Param As New CompilerParameters()
Dim Res As CompilerResults
Param.GenerateExecutable = True
Param.IncludeDebugInformation = False
Param.CompilerOptions = "/target:winexe /optimize+ /filealign:512"
Param.OutputAssembly = Output
Res = New VBCodeProvider(New Dictionary(Of String, String)() From {{"Version", "v2"}}).CompileAssemblyFromSource(Param, Source)
If Res.Errors.Count <> 0 Then
For Each [Error] In Res.Errors
MessageBox.Show("Error: " & [Error].ErrorText, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
Next
End If
Catch ex As Exception
MsgBox("Error: " & ex.ToString)
End Try
End Sub
Function TobString(ByVal b As String)
Dim ret As String = ""
For i As Integer = 0 To Split(b, vbNewLine).Count - 1
Dim line As String = Split(b, vbNewLine)(i).Replace(Chr(34), Chr(34) & " & System.Text.Encoding.ASCII.GetString(New Byte() {34}) & " & Chr(34))
ret &= Chr(34) & line & Chr(34) & " & System.Environment.NewLine & _" & vbNewLine
Next
Return ret.Remove(ret.Length - 6)
End Function
Sub ConvertBtE(ByVal Output As String)
UpdateStatus("Reading from batch file...", 50)
Dim batch As String = IO.File.ReadAllText(TextBox1.Text)
UpdateStatus("Preparing executable code...", 0)
Dim code As String = Source
UpdateStatus("", 50)
code = code.Replace("{BATCH}", TobString(batch))
UpdateStatus("Compiling...", 50)
GenerateExecutable(Output, code)
UpdateStatus("Done.", 100)
End Sub
Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
Dim ofd As New OpenFileDialog
ofd.Filter = "Batch Files|*.bat"
If ofd.ShowDialog <> vbOK Then
Exit Sub
End If
TextBox1.Text = ofd.FileName
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not IO.File.Exists(TextBox1.Text) Then
MsgBox("Please select a valid batch file!", MsgBoxStyle.Critical, "Error")
Exit Sub
End If
Dim sfd As New SaveFileDialog
sfd.Filter = "Executables|*.exe"
If sfd.ShowDialog <> vbOK Then
Exit Sub
End If
Dim tConvert As New Threading.Thread(AddressOf ConvertBtE)
tConvert.Start(sfd.FileName)
End Sub
Delegate Sub delUpdateStatus(ByVal lbl As String, ByVal prgs As Integer)
Sub UpdateStatus(ByVal lbl As String, ByVal prgs As Integer)
If InvokeRequired Then
Invoke(New delUpdateStatus(AddressOf UpdateStatus), New Object() {lbl, prgs})
Else
If lbl <> "" Then Label2.Text = lbl
ProgressBar1.Value = prgs
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim ofd As New OpenFileDialog
ofd.Filter = "Batch Files|*.bat"
If ofd.ShowDialog <> vbOK Then
Exit Sub
End If
TextBox1.Text = ofd.FileName
End Sub
End ClassNOTE:MAYBE NOT WORKING ON VB2008..TESTED ON VSE2012 download here RE: [VB.Net]bat 2 exe - ArkPhaze - 05-20-2013 No offense, but this is just like every other "batch script to exe" lame trick. Lots of these just write off to %temp% and execute it, thus this isn't actually a batch script to an exe. I criticize all of these converters for this reason, it's the lamest thing ever. Even a crappy system() call or something in .NET to execute through cmd.exe would be better, and it would also be a legit, batch to exe if that were the case. I would encrypt the strings though, decrypt them, and run them that way in memory. Anything past that is a waste of time if you really cared to "try" to protect a batch script because batch isn't very powerful to begin with. It's mostly used to automate simple tasks. Although unless they were to actually debug the program and/or decrypt the strings, it would still be more secure than direct system() calls with plaintext strings, or a shovel-off to the %temp% for invoking. Actually, I would say even going through one of these converters to boot, is nearly a waste of time. Just my few cents... RE: [VB.Net]bat 2 exe - mR.v - 05-22-2013 Maybe this code can help some beginner(like me)..:lol: RE: [VB.Net]bat 2 exe - ArkPhaze - 05-22-2013 I can give you a few string encryption functions to try out. Actually you could probably write your own pretty easily also. But if I were to take this thing to another level, that's where I would start, and I would do it all in memory, no dumps. Because no matter what you do in your application, you will still have to dump the batch file out in plaintext anyways. |