Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Psyke1 en 14 Abril 2010, 20:59 pm



Título: [Source] VB6 Bruteforce (mejorado)
Publicado por: Psyke1 en 14 Abril 2010, 20:59 pm
Hola a todos hace poco pregunte como se hacia un Bruteforce en vb6, obtuve diferentes metodos, pero Karcrack me dijo q lo intentara por mi mismo, y asi he hecho!!  :)Les presento mi code para convinar las letras minusculas del abcdario. estuve dandole vueltas, no se si es la forma optima de hacerlo (aunque funciona a la perfeccion), por eso os pido vuestra yuda para mejorarlo y de paso aprender. ;D

Código
  1. Public Sub BruteForce()
  2.  
  3.    Dim D1, D2, D3, D4, D5, D6, D7, D8 As Integer
  4.  
  5.    D1 = 97: D2 = 97: D3 = 97: D4 = 97: D5 = 97: D6 = 97: D7 = 97: D8 = 97
  6.  
  7.    Open App.Path & "\midicionario.txt" For Output As #1
  8.  
  9. digito1:
  10.  
  11.    If D1 = 123 Then
  12.        D1 = 97
  13.        MsgBox "Combinaciones con un digito completadas", vbInformation
  14.        GoTo digito2
  15.    End If
  16.    Print #1, Chr(D1)
  17.    D1 = D1 + 1
  18.    GoTo digito1
  19.  
  20. digito2:
  21.  
  22.    If D1 = 122 And D2 = 123 Then
  23.        D1 = 97: D2 = 97
  24.        MsgBox "Combinaciones con dos digitos completadas", vbInformation
  25.        GoTo digito3
  26.    ElseIf D2 = 123 Then
  27.        D1 = D1 + 1
  28.        D2 = 97
  29.    End If
  30.    Print #1, Chr(D1) & Chr(D2)
  31.    D2 = D2 + 1
  32.    GoTo digito2
  33.  
  34. digito3:
  35.  
  36.    If D1 = 122 And D2 = 122 And D3 = 123 Then
  37.        D1 = 97: D2 = 97: D3 = 97
  38.        MsgBox "Combinaciones con tres digitos completadas", vbInformation
  39.        GoTo digito4
  40.    ElseIf D2 = 122 And D3 = 123 Then
  41.        D2 = 97: D3 = 97
  42.        D1 = D1 + 1
  43.    ElseIf D3 = 123 Then
  44.        D2 = D2 + 1
  45.        D3 = 97
  46.    End If
  47.    Print #1, Chr(D1) & Chr(D2) & Chr(D3)
  48.    D3 = D3 + 1
  49.    GoTo digito3
  50.  
  51. digito4:
  52.  
  53.    If D1 = 122 And D2 = 122 And D3 = 122 And D4 = 123 Then
  54.        D1 = 97: D2 = 97: D3 = 97: D4 = 97
  55.        MsgBox "Combinaciones con cuatro digitos completadas", vbInformation
  56.        GoTo fin
  57.    ElseIf D2 = 122 And D3 = 122 And D4 = 123 Then
  58.        D2 = 97: D3 = 97: D4 = 97
  59.        D1 = D1 + 1
  60.    ElseIf D3 = 122 And D4 = 123 Then
  61.        D3 = 97: D4 = 97
  62.        D2 = D2 + 1
  63.    ElseIf D4 = 123 Then
  64.        D4 = 97
  65.        D3 = D3 + 1
  66.    End If
  67.    Print #1, Chr(D1) & Chr(D2) & Chr(D3) & Chr(D4)
  68.    D4 = D4 + 1
  69.    GoTo digito4
  70.  
  71. fin:
  72.  
  73.    MsgBox "Fin", vbExclamation
  74.    Close #1
  75.  
  76. End Sub
  77.  

Si no entienden algo no uden en preguntar  ;)

Garcias Karcrack


Título: Re: [Source] VB6 Bruteforce
Publicado por: Novlucker en 14 Abril 2010, 21:04 pm
Yo que tu desaparezco esos GOTO del código antes de que te insulten :xD , usa bucles y funciones

Te lo diré del siguiente modo, si que hay más métodos y más optimos con códigos más legibles, de hecho anda por el foro uno que había hecho en vbs usando recursividad.

Saludos


Título: Re: [Source] VB6 Bruteforce
Publicado por: Psyke1 en 14 Abril 2010, 21:13 pm
gracias por la crítika, me apliko el cuento Novlucker!! :D


Título: Re: [Source] VB6 Bruteforce
Publicado por: Psyke1 en 14 Abril 2010, 22:11 pm
Sinceramente, no sabria como hacerlo con bucles, seria algo asi, no:
Código
  1.    For D1 = 97 to 123 Then
  2.        Print #1, Chr(D1)
  3.    Next
  4.    MsgBox "Combinaciones con un dígito completadas", vbInformation
  5.  
Pero eso es para el 1er digito, para los demas no se... :-(

Gracias!

Salu2


Título: Re: [Source] VB6 Bruteforce
Publicado por: Novlucker en 14 Abril 2010, 22:31 pm
Intenta entender esto y pruebalo (esta hecho en excel, así que puede que no funcione XD)

Código
  1. Private Sub GenerarDiccionario()
  2. Dim chars As String
  3. Dim charlist() As String
  4. Dim length As Integer
  5.  
  6. Open app.Path & "\diccionario.txt" For Output As #1
  7.  
  8. chars = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
  9. charlist = Split(chars, ",")
  10. length = 4
  11.  
  12. Call Complete("", length, charlist)
  13. Close #1
  14.  
  15. MsgBox "Proceso Terminado", vbInformation
  16. End Sub
  17.  
  18. Public Sub Complete(ByVal strin As String, ByVal length As Integer, ByRef charlist() As String)
  19. Dim z As Integer
  20.  
  21. For z = 0 To UBound(charlist())
  22. word = strin & charlist(z)
  23.  
  24. If Len(word) = length Then
  25.    Print #1, word
  26. Else
  27.    Call Complete(word, length, charlist)
  28. End If
  29.  
  30. Next
  31.  
  32. End Sub

En este se usa una lista de caracteres, y length es la cantidad de caracteres objetivo para la "palabra", en el ejemplo son todas las palabras formadas por esos caracteres y 4 caracteres de largo.

Para probar todas las palabras de 1, 2, 3, 4, etc caracteres puedes simplemente meterlo en un bucle, aunque más sencillo es comparar a medida que van apareciendo, de modo de evitar que resulte redundante ya que en el proceso de generar una palabra de 4 letras por ejemplo, el código pasa por A, AA, AAA, AAAA y ahí llega hasta la primera de 4 caracteres, pero como se ve antes ha pasado por las otras 3.

Saludos :P


Título: Re: [Source] VB6 Bruteforce
Publicado por: Lupin en 14 Abril 2010, 22:47 pm
Si funciona...
...ayudaria un doevents ??


Título: Re: [Source] VB6 Bruteforce
Publicado por: Psyke1 en 15 Abril 2010, 15:14 pm
Gracias, esoy mastikando el code :laugh:, mas adelante resumire el mio mas... ;-)

Salu2 ;D


Título: Re: [Source] VB6 Bruteforce
Publicado por: Psyke1 en 15 Abril 2010, 21:02 pm
Mirar, he simplificado un poco el code con bucles en vez de Goto y con un array ;-)
Código
  1. Public Sub BruteForce()
  2.  
  3. '\\Declaro variables
  4.  
  5.    Dim D(3) As Integer, x As Integer
  6.  
  7.    For x = 0 To 3: D(x) = 97: Next
  8.  
  9. '\\Abro archivo de texto
  10.  
  11.    Open App.Path & "\dic.txt" For Output As #1
  12.  
  13. '\\Un digito
  14.  
  15.    While Not D(0) = 123
  16.        Print #1, Chr(D(0))
  17.        D(0) = D(0) + 1
  18.    Wend
  19.    D(0) = 97
  20.    MsgBox "Combinaciones con un dígito completadas!", vbInformation
  21.  
  22. '\\Dos digitos
  23.  
  24.    While Not D(0) = 123
  25.        If D(1) = 123 Then
  26.            D(1) = 97
  27.            D(0) = D(0) + 1
  28.        End If
  29.        If Not D(0) = 123 Then Print #1, Chr(D(0)) & Chr(D(1))
  30.        D(1) = D(1) + 1
  31.    Wend
  32.    D(0) = 97: D(1) = 97
  33.    MsgBox "Combinaciones con dos dígitos completadas!", vbInformation
  34.  
  35. '\\Tres digitos
  36.  
  37.    While Not D(0) = 123
  38.        If D(1) = 122 And D(2) = 123 Then
  39.            D(2) = 97: D(3) = 97
  40.            D(0) = D(0) + 1
  41.        ElseIf D(2) = 123 Then
  42.            D(1) = D(1) + 1
  43.            D(2) = 97
  44.        End If
  45.        If Not D(0) = 123 Then Print #1, Chr(D(0)) & Chr(D(1)) & Chr(D(2))
  46.        D(2) = D(2) + 1
  47.    Wend
  48.    For x = 0 To 2: D(x) = 97: Next
  49.    MsgBox "Combinaciones con tres dígitos completadas!", vbInformation
  50.  
  51. '\\Cuatro digitos
  52.  
  53.    While Not D(0) = 123
  54.        If D(1) = 122 And D(2) = 122 And D(3) = 123 Then
  55.            For x = 1 To 3: D(x) = 97: Next
  56.            D(0) = D(0) + 1
  57.        ElseIf D(2) = 122 And D(3) = 123 Then
  58.            D(2) = 97: D(3) = 97
  59.            D(1) = D(1) + 1
  60.        ElseIf D(3) = 123 Then
  61.            D(3) = 97
  62.            D(2) = D(2) + 1
  63.        End If
  64.        If Not D(0) = 123 Then Print #1, Chr(D(0)) & Chr(D(1)) & Chr(D(2)) & Chr(D(3))
  65.        D(3) = D(3) + 1
  66.    Wend
  67.    For x = 0 To 3: D(x) = 97: Next
  68.    MsgBox "Combinaciones con cuatro dígitos completadas!", vbInformation
  69.  
  70. '\\Finalizamos
  71.  
  72.    MsgBox "Fin", vbOKOnly
  73.    Close #1
  74.    End
  75.  
  76. End Sub
  77.  
Ya se que no es la forma profesionl de hacerlo, pero os pido vuestra opinion ;D


Título: Re: [Source] VB6 Bruteforce (mejorado)
Publicado por: MCKSys Argentina en 16 Abril 2010, 03:38 am
Esta es una alternativa con 2 bucles:

Código:
Sub BruteForce(MaxDigitos As Integer)
'a = 97
'z = 122
Dim Serial As String
Dim Terminado As Boolean
Dim Terminado2 As Boolean
Dim i As Integer
Dim c As Byte
Dim j As Integer
Dim pos As Integer

Serial = Space(MaxDigitos)

Open App.Path & "\midicionario.txt" For Output As #1

Mid(Serial, 1, 1) = "a"
Print #1, Trim(Serial)

Terminado = False

Do While Not Terminado
    pos = 1
    Terminado2 = False
    Do While Not Terminado2
        DoEvents
        c = Asc(Mid(Serial, pos, 1))
        'contempla char espacio
        If c < 97 Then
            c = 97
        Else
            c = c + 1
        End If
        If c < 123 Then
            Mid(Serial, pos, 1) = Chr(c)
            Terminado2 = True
        Else
            Mid(Serial, pos, 1) = "a"
            pos = pos + 1
        End If
    Loop
    Print #1, Trim(Serial)
    Terminado = True
    For j = 1 To MaxDigitos
        Terminado = Terminado And (Mid(Serial, j, 1) = "z")
    Next j
Loop
Close #1
MsgBox "listo"
End Sub

Saludos!


Título: Re: [Source] VB6 Bruteforce (mejorado)
Publicado por: Psyke1 en 16 Abril 2010, 14:58 pm
Muy interesante, agradezco el aporte MCKSys Argentina!!!


Título: Re: [Source] VB6 Bruteforce (mejorado)
Publicado por: Psyke1 en 20 Abril 2010, 00:16 am
Miren, este es el code q me he currado para hacerlo sin tnr q ir digito por digito:
Código
  1. Private Sub Form_Load()
  2.  
  3.    Dim ABC() As String
  4.    ABC = Split("abcdefghijklmnñopqrstuvwxyz", "")
  5.    Call BF(App.Path & "\Dic.txt", ABC, 3)
  6.  
  7. End Sub
  8.  
  9. Public Function BF(DirPath As String, Chrptr() As String, Longitud%)
  10.  
  11.    Dim x%, FinChrptr As String, Finpalabra As String, Palabra As String
  12.  
  13.    FinChrptr = UBound(Chrptr())
  14.    For x = 1 To Longitud: Finpalabra = Finpalabra + Chrptr(FinChrptr): Next
  15.  
  16.    ' MsgBox Finpalabra
  17.  
  18.    Open DirPath For Output As #1
  19.  
  20.  
  21.    While Not Palabra = Finpalabra
  22.  
  23.  
  24.    Wend
  25.  
  26.    Close #1
  27.    MsgBox "¡Combinaciones completadas!", vbInformation, "VB6 Brute Force by *PsYkE1*"
  28.  
  29. End Function
Bien, donde me quede es aqui:
Código
  1.    While Not Palabra = Finpalabra
  2.  
  3.  
  4.    Wend
Es decir, mientras Palabra no sea igual a FinPalabra("zzz" en este caso) q haga el siguiente bucle, pero miren que le doy vueltas y no sabria seguir :-(, me podrian echar una mano??? :huh:

Gracias a to2!! ;D