HOLA!!!
Imaginemos que utilizando el AdminFinder (https://underc0de.org/foro/visual-studio-net/crea-tu-propio-adminfinder-con-vb-net-en-solo-3-pasos!/) que programamos hace un tiempo encontramos una web y nos hicimos con su base de datos, ¡Pero todas sus contraseñas estan en MD5 o SHA1! ¿Que podemos hacer? Para esto utilizaremos la tool que crearemos en esta edicion y ademas el Creador de diccionarios para Fuerza Bruta (https://underc0de.org/foro/visual-studio-net/crea-tu-propio-creador-de-diccionarios-por-fuerza-bruta-en-vbnet-en-solo-3-pasos/) que hicimos con anterioridad.
Hoy veremos como crear un HashCracker con VB.NET!
1)Primero crearemos el proyecto
(https://i.imgur.com/qjYc9SM.png)
2)Luego en el Form1 Realizar la siguente interfaz (respetando los nombres de los controles)[ademas agregaremos un OpenFileDialog llamado OpenFileDialog1 y dos BackgroundWorkers llamados bwSHA1 y bwMD5]:
(https://i.imgur.com/cNsIxO6.png)
2.b)Establecemos las propiedades text de los componentes para que queden de la siguiente manera:
(https://i.imgur.com/BIgwAq8.png)
3)Pegamos el siguiente codigo:
Imports System.ComponentModel
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Deshabilitamos el TextBox txtPathDiccionario para que no puedan escribir a mano en el.
txtPathDiccionario.Enabled = False
'Aplicamos filtro en el Dialogo de Seleccion de Archivo para que solo muestre archivos de texto
OpenFileDialog1.Filter = "Archivos de Texto|*.txt;*.text"
End Sub
Private Sub btnDict_Click(sender As Object, e As EventArgs) Handles btnDict.Click
' Mostramos el Dialogo de Seleccion de Archivo
Dim result As DialogResult = OpenFileDialog1.ShowDialog()
'Verificamos que el archivo haya sido seleccionado, si no fue asi, salimos
If result <> DialogResult.OK Then Exit Sub
'Escribimos la ubicacion del archivo en el TextBox
txtPathDiccionario.Text = OpenFileDialog1.FileName
'Indicamos que nuestros BW reportan progreso
bw.WorkerReportsProgress = True
End Sub
Private Sub btnInit_Click(sender As Object, e As EventArgs) Handles btnInit.Click
'Deshabilitamos los controles para que no se cambie su contenido durante la ejecucion
txtHash.Enabled = False
radSHA1.Enabled = False
radMD5.Enabled = False
btnInit.Enabled = False
btnDict.Enabled = False
'Iniciamos BW
bw.RunWorkerAsync()
End Sub
Private Sub bw_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork
'Verificamos la cantidad de lineas para mantener un conteo del progreso
Dim CantidadLineas = File.ReadAllLines(txtPathDiccionario.Text).Length
Dim LineaActual As Long = 0
'Creamos una lector para el archivo de diccionario
Dim reader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(txtPathDiccionario.Text)
Dim ClaveActual As String = ""
Dim HashActual As String = ""
'Hacemos un bucle linea por linea verificando si coincide el hash con alguna del las claves en el diccionario
Do
ClaveActual = reader.ReadLine
If ClaveActual Is Nothing Then Exit Sub 'Si llegamos al final del archivo salimos.
'Ejecutamos la creacion del hash correspondiente
If radMD5.Checked = True Then HashActual = generarMD5(ClaveActual)
If radSHA1.Checked = True Then HashActual = generarSHA1(ClaveActual)
'Verificamos si coincide
If txtHash.Text = HashActual Then
'Si el hash corresponde con el generado notificamos al usuario
MsgBox("Clave encontrada: """ & ClaveActual & """ (sin comillas).")
'Terminamos el Loop
Exit Do
End If
'Actualizacion de progreso
LineaActual = LineaActual + 1
If LineaActual > CantidadLineas / 100 Then
bw.ReportProgress(LineaActual / CantidadLineas * 100)
LineaActual = 0
End If
Loop
reader.Close()
End Sub
Private Sub bw_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles bw.ProgressChanged
'Actualizamos el porcentaje del Progressbar
ProgressBar1.Value += e.ProgressPercentage
End Sub
Private Sub bw_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
'Rehabilitamos los controles.
txtHash.Enabled = True
radSHA1.Enabled = True
radMD5.Enabled = True
btnInit.Enabled = True
btnDict.Enabled = True
ProgressBar1.Value = 0
MsgBox("Proceso completado")
End Sub
Function generarMD5(ByVal str As String) As String
'Funcion de generacion de hash MD5
Dim Bytes() As Byte
Dim sb As New StringBuilder()
If String.IsNullOrEmpty(str) Then Return ""
Bytes = Encoding.Default.GetBytes(str)
Bytes = MD5.Create().ComputeHash(Bytes)
For x As Integer = 0 To Bytes.Length - 1
sb.Append(Bytes(x).ToString("x2"))
Next
Return sb.ToString()
End Function
Function generarSHA1(ByVal str As String) As String
'Funcion de generacion de hash SHA1
Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider
Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(str)
bytesToHash = sha1Obj.ComputeHash(bytesToHash)
Dim strResult As String = ""
For Each b As Byte In bytesToHash
strResult += b.ToString("x2")
Next
Return strResult
End Function
End Class
Para utilizar solo elijan el archivo de diccionario, pongan el hash a crackear y presionen iniciar.
Ahora es tu turno, podes agregarle nuevos tipos de hash o inclusive convertirlo en una herramienta de criptografia completa.
Para los curiosos y como un proyecto de fin de semana los invito a modificar este programa para que pueda hacer busqueda de varios hashes al mismo tiempo.
Descargar: http://www.mediafire.com/file/uztm3corwv4hqk2/HashCracker.rar/file
GRACIAS POR LEER!!!