TEIL 1
Liebe Forengemeinde,
in diesem kleinen Tutorial zeige ich euch mal die Vorteile von Obfuscaten von Programmen.
.net Programme, kann man mit ein paar Tricks kinderleicht knacken. (Dekompilieren etc.)
Viele Programme nutzen aber Sensible Daten (z.B. FTP Daten, E-Mail Daten u.s.w)
[Hierzu eine Wichtige Info: Sensible Daten gehören generell >> GAR NICHT << in ein Programm rein,
schon gar nicht fest im code. ]
Durch das Dekompilieren sieht man diese Daten im Klatext.
Folgendes Beispiel:
In einem kleinem Programm habe ich vor, eine E-Mail zu Versenden. Mein Originaler Source Code sieht wie folgt aus:
Spoiler anzeigen
Wie wir sehen können, ist das Passwort im Klartext im Programm selbst eingebunden.
Das sollte man generell vermeiden. Optimal ist eine Verschlüsslung (z.B. eine Recht einfache, die CESAR Verschlüsslung)
[Wichtig: hierbei nochmal im Teil 1 / 2 die Info zum Thema Sensible Daten in einem Programm anschauen]
Nach dem Kompilieren ist das Programm nun auf jeden PC Einsatzbereit.
Aber bevor wir das machen, Dekompilieren wir das Programm mit einem kleinen Tool,
der Source Code den wir erhalten, sieht wie folgt aus:
(Da etwas länger, ist der Code im Spoiler)
Spoiler anzeigen
Neben vielem anderen (dekompilierter DesignerCode, dekompilierter verborgener Code) findet sich auch unser Code aus dem ersten Listing, und zwar komplett und unverfälscht aus der dekompilierten Exe wiederhergestellt.
Wie wir es sehen, kann man Problemlos das Programm Dekompilieren und das Passwort auslesen (zeile#149).
@Moderator:
Teil 2 Folgt in einem Folgebeitrag, da der Inhalt vom Tutorial sonst zu lang ist!
zzgl Info:
Teil 2 kommt erst in 30 Mins.. (Sperre vom Forum aus)
(Sollte jemand jetzt schon an dem kompl. Tutorial Interessiert sein, ich habe es einmal in meinem Forum kompl. gepostet Klick hier)
Liebe Forengemeinde,
in diesem kleinen Tutorial zeige ich euch mal die Vorteile von Obfuscaten von Programmen.
.net Programme, kann man mit ein paar Tricks kinderleicht knacken. (Dekompilieren etc.)
Viele Programme nutzen aber Sensible Daten (z.B. FTP Daten, E-Mail Daten u.s.w)
[Hierzu eine Wichtige Info: Sensible Daten gehören generell >> GAR NICHT << in ein Programm rein,
schon gar nicht fest im code. ]
Durch das Dekompilieren sieht man diese Daten im Klatext.
Folgendes Beispiel:
In einem kleinem Programm habe ich vor, eine E-Mail zu Versenden. Mein Originaler Source Code sieht wie folgt aus:
VB.NET-Quellcode
- Imports System.Net
- Imports System.Net.Mail
- Imports System.Security.Cryptography.X509Certificates
- Public Class Form1
- Private Sub cmdSendMail_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSendMail.Click
- Dim Msg As New System.Net.Mail.MailMessage
- Msg.IsBodyHtml = False
- Dim oCertOverride As New CertificateOverride
- ServicePointManager.ServerCertificateValidationCallback = AddressOf oCertOverride.RemoteCertificateValidationCallback
- Dim mySmtpsvr As New SmtpClient()
- mySmtpsvr.Host = "smtp.googlemail.com"
- mySmtpsvr.Port = 587
- mySmtpsvr.UseDefaultCredentials = False
- mySmtpsvr.Credentials = New NetworkCredential("dasistmeineadresse@whatever.com", "dasistmeinpasswort")
- mySmtpsvr.EnableSsl = True
- Msg.From = New MailAddress("dasistmeineadresse@whatever.com")
- Msg.To.Add("empfängerderemail@whatever.com")
- Msg.Subject = "EMailüberschrift"
- Msg.Body = "DasistmeinEmailInhalt"
- Try
- mySmtpsvr.Send(Msg)
- Catch ex As Exception
- MsgBox("Mh, da ist was schief gelaufen! Probiers nochmal :)", MsgBoxStyle.Critical, "fehler")
- End Try
- End Sub
- Public Class CertificateOverride
- Public Function RemoteCertificateValidationCallback(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As Net.Security.SslPolicyErrors) As Boolean
- Return True
- End Function
- End Class
- End Class
Wie wir sehen können, ist das Passwort im Klartext im Programm selbst eingebunden.
Das sollte man generell vermeiden. Optimal ist eine Verschlüsslung (z.B. eine Recht einfache, die CESAR Verschlüsslung)
[Wichtig: hierbei nochmal im Teil 1 / 2 die Info zum Thema Sensible Daten in einem Programm anschauen]
Nach dem Kompilieren ist das Programm nun auf jeden PC Einsatzbereit.
Aber bevor wir das machen, Dekompilieren wir das Programm mit einem kleinen Tool,
der Source Code den wir erhalten, sieht wie folgt aus:
(Da etwas länger, ist der Code im Spoiler)
VB.NET-Quellcode
- Imports Microsoft.VisualBasic
- Imports Microsoft.VisualBasic.CompilerServices
- Imports System
- Imports System.Collections.Generic
- Imports System.ComponentModel
- Imports System.Diagnostics
- Imports System.Drawing
- Imports System.Net
- Imports System.Net.Mail
- Imports System.Net.Security
- Imports System.Runtime.CompilerServices
- Imports System.Security.Cryptography.X509Certificates
- Imports System.Threading
- Imports System.Windows.Forms
- Namespace BeispielProjekt
- <DesignerGenerated()>
- Public Class Form1
- Inherits Form
- Public Class CertificateOverride
- <DebuggerNonUserCode()>
- Public Sub New()
- End Sub
- Public Function RemoteCertificateValidationCallback(sender As Object, certificate As X509Certificate, chain As X509Chain, sslPolicyErrors As SslPolicyErrors) As Boolean
- Return True
- End Function
- End Class
- Private Shared __ENCList As List(Of WeakReference) = New List(Of WeakReference)()
- Private components As IContainer
- <AccessedThroughProperty("cmdSendMail")>
- Private _cmdSendMail As Button
- Friend Overridable Property cmdSendMail() As Button
- <DebuggerNonUserCode()>
- Get
- Return Me._cmdSendMail
- End Get
- <DebuggerNonUserCode()>
- <MethodImpl(MethodImplOptions.Synchronized)>
- Set(value As Button)
- Dim value2 As EventHandler = New EventHandler(Me.cmdSendMail_Click)
- Dim flag As Boolean = Me._cmdSendMail IsNot Nothing
- If flag Then
- Me._cmdSendMail.Click -= value2
- End If
- Me._cmdSendMail = value
- flag = Me._cmdSendMail IsNot Nothing
- If flag Then
- Me._cmdSendMail.Click += value2
- End If
- End Set
- End Property
- <DebuggerNonUserCode()>
- Public Sub New()
- Form1.__ENCAddToList(Me)
- Me.InitializeComponent()
- End Sub
- <DebuggerNonUserCode()>
- Private Shared Sub __ENCAddToList(value As Object)
- Dim _ENCList As List(Of WeakReference) = Form1.__ENCList
- Monitor.Enter(_ENCList)
- ' The following expression was wrapped in a checked-statement
- Try
- Dim flag As Boolean = Form1.__ENCList.Count = Form1.__ENCList.Capacity
- If flag Then
- Dim num As Integer = 0
- Dim arg_3F_0 As Integer = 0
- Dim num2 As Integer = Form1.__ENCList.Count - 1
- Dim num3 As Integer = arg_3F_0
- While True
- Dim arg_90_0 As Integer = num3
- Dim num4 As Integer = num2
- If arg_90_0 > num4 Then
- Exit While
- End If
- Dim weakReference As WeakReference = Form1.__ENCList(num3)
- flag = weakReference.IsAlive
- If flag Then
- Dim flag2 As Boolean = num3 <> num
- If flag2 Then
- Form1.__ENCList(num) = Form1.__ENCList(num3)
- End If
- num += 1
- End If
- num3 += 1
- End While
- Form1.__ENCList.RemoveRange(num, Form1.__ENCList.Count - num)
- Form1.__ENCList.Capacity = Form1.__ENCList.Count
- End If
- Form1.__ENCList.Add(New WeakReference(RuntimeHelpers.GetObjectValue(value)))
- Finally
- Monitor.[Exit](_ENCList)
- End Try
- End Sub
- <DebuggerNonUserCode()>
- Protected Override Sub Dispose(disposing As Boolean)
- Try
- Dim flag As Boolean = disposing AndAlso Me.components IsNot Nothing
- If flag Then
- Me.components.Dispose()
- End If
- Finally
- MyBase.Dispose(disposing)
- End Try
- End Sub
- <DebuggerStepThrough()>
- Private Sub InitializeComponent()
- Me.cmdSendMail = New Button()
- Me.SuspendLayout()
- Dim arg_27_0 As Control = Me.cmdSendMail
- Dim location As Point = New Point(12, 12)
- arg_27_0.Location = location
- Me.cmdSendMail.Name = "cmdSendMail"
- Dim arg_51_0 As Control = Me.cmdSendMail
- Dim size As Size = New Size(75, 23)
- arg_51_0.Size = size
- Me.cmdSendMail.TabIndex = 0
- Me.cmdSendMail.Text = "Button1"
- Me.cmdSendMail.UseVisualStyleBackColor = True
- Dim autoScaleDimensions As SizeF = New SizeF(6F, 13F)
- Me.AutoScaleDimensions = autoScaleDimensions
- Me.AutoScaleMode = AutoScaleMode.Font
- size = New Size(284, 262)
- Me.ClientSize = size
- Me.Controls.Add(Me.cmdSendMail)
- Me.Name = "Form1"
- Me.Text = "Form1"
- Me.ResumeLayout(False)
- End Sub
- Private Sub cmdSendMail_Click(sender As Object, e As EventArgs)
- Dim Msg As MailMessage = New MailMessage()
- Msg.IsBodyHtml = False
- Dim oCertOverride As Form1.CertificateOverride = New Form1.CertificateOverride()
- ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(oCertOverride.RemoteCertificateValidationCallback)
- Dim mySmtpsvr As SmtpClient = New SmtpClient()
- mySmtpsvr.Host = "smtp.googlemail.com"
- mySmtpsvr.Port = 587
- mySmtpsvr.UseDefaultCredentials = False
- mySmtpsvr.Credentials = New NetworkCredential("dasistmeineadresse@whatever.com", "dasistmeinpasswort")
- mySmtpsvr.EnableSsl = True
- Msg.From = New MailAddress("dasistmeineadresse@whatever.com")
- Msg.[To].Add("empfängerderemail@whatever.com")
- Msg.Subject = "EMailüberschrift"
- Msg.Body = "DasistmeinEmailInhalt"
- Try
- mySmtpsvr.Send(Msg)
- Catch expr_B1 As Exception
- ProjectData.SetProjectError(expr_B1)
- Interaction MsgBox("Mh, da ist was schief gelaufen! Probiers nochmal :)", "fehler")
- ProjectData.ClearProjectError()
- End Try
- End Sub
- End Class
- End Namespace
Wie wir es sehen, kann man Problemlos das Programm Dekompilieren und das Passwort auslesen (zeile#149).
@Moderator:
Teil 2 Folgt in einem Folgebeitrag, da der Inhalt vom Tutorial sonst zu lang ist!
zzgl Info:
Teil 2 kommt erst in 30 Mins.. (Sperre vom Forum aus)
(Sollte jemand jetzt schon an dem kompl. Tutorial Interessiert sein, ich habe es einmal in meinem Forum kompl. gepostet Klick hier)
Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Annoxoli“ ()