ParseKeys (REG EXP) limpiar claves del NOD32

Iniciado por Elemental Code, 23 Mayo 2012, 04:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Elemental Code

Metele el html raw de casi cuaaaalquier sitio de licencias y esto las limpia ;)

Código (vb) [Seleccionar]
Option Explicit
'=================================================
' º Nombre    : mParseKeys.bas
' º Version   : 2.0
' º Autor     : Milton Candelero
' º Alias     : ElementalCode
' º Pais      : Argentina
' º Fecha     : 13/OCT/2011
' º Dedicado a: El amor de mi vida
' º Licencia  : GNU PUBLIC LICENCE v.3 (Or higher)
'=================================================
'    This file is part of Open Nod32 Keyfinder.
'
'    Open Nod32 Keyfinder is free software: you can redistribute it and/or modify
'    it under the terms of the GNU General Public License as published by
'    the Free Software Foundation, either version 3 of the License, or any later version.
'
'    Open Nod32 Keyfinder is distributed in the hope that it will be useful,
'    but WITHOUT ANY WARRANTY; without even the implied warranty of
'    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'    GNU General Public License for more details.
'
'    You should have received a copy of the GNU General Public License
'    along with Open Nod32 Keyfinder.  If not, see <http://www.gnu.org/licenses/>.

Function ParseKeys(ByVal sHTML As String, ByRef sUser() As String, ByRef sPass() As String)
    'Constantes para los patterns de busqueda
    Const USERPATTERN As String = "(?:EAV|TRIAL|ESS)-\d{8}"
    Const PASSPATTERN As String = "(?:[pP]?assword:? |[pP]?assword:?|nod32key:)(\w{10})"
    'Declarar variables para RegExp
    Dim oREuser As RegExp
    Dim oREpass As RegExp
    'Variables para las colecciones de resultados
    Dim oMCuser As MatchCollection
    Dim oMCpass As MatchCollection
    'Variables para las coincidencias
    Dim oMuser As Match
    Dim oMpass As Match
    'Variables para los indices de las strings de salida _
    y previamente la cantidad de repeticiones (ahorro variables)
    Dim cU As Byte
    Dim cP As Byte
   
    'Crear los objetos del RegExp User y analizar
    Set oREuser = New RegExp
    With oREuser
        .Global = True
        .Pattern = USERPATTERN
        Set oMCuser = .Execute(sHTML)
    End With
   
    'Crear los objetos del ExpReg Pass y analizar
    Set oREpass = New RegExp
    With oREpass
        .Global = True
        .Pattern = PASSPATTERN
        Set oMCpass = .Execute(sHTML)
    End With
   
    'Dimensionar el array
    cU = oMCuser.Count - 1
    ReDim sUser(cU) As String
    cU = 0 ' Vuelvo a cero para seguir usando esta variable.
   
    'Guardar Resultados user
    For Each oMuser In oMCuser
        sUser(cU) = oMuser
        cU = cU + 1
    Next
   
    'Dimensionar el array
    cP = oMCpass.Count - 1
    ReDim sPass(cP) As String
    cP = 0 ' Vuelvo a cero para seguir usando esta variable.
   
    'Guardar Resultados pass
    For Each oMpass In oMCpass
        sPass(cP) = oMpass.SubMatches(0)
        cP = cP + 1
    Next
   
    'Destruir RegExp para ahorrar memoria y porque queda lindo :D
    Set oREuser = Nothing
    Set oREpass = Nothing
End Function

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

raul338

La regExp de password se poria educir a

(?:[pP]?assword:? |nod32key:)(\w{10})

Elemental Code

#2
:O a ver que pruebo y lo añado, gracias.
todavia patino un poco en esto de las regexp :P




No funciono, necesito que me reconozca
password: asgiaha
password:asgiaha

y eso falla :P

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Psyke1

#3
Citar
Código (vb) [Seleccionar]

' º Nombre    : mParseKeys.cls

¿Una clase para una función? :rolleyes:




Quedaría más bonito si en vez de ingresar dos arrays utilizas un Type.

Código (vb) [Seleccionar]

Option Explicit

Public Type NodUP
    User As String
    Password As String
End Type

Public Function ParseKeys(ByRef sHTML As String) As NodUP()





Creo que te puedes ahorrar el crear dos objetos, con uno yo creo que valdría.  :P




Usas esto:
(?:[pP]?assword:? |[pP]?assword:?|nod32key:)(\w{10})

Según lo tienes puesto, con el [pP]?, también te sacaría "assword". ("palabra culo" en inglés :-X).

Utilizando IgnoreCase cuando creas el objeto para que no se fije en ninguna mayúscula. :)
Yo pondría algo así:

(password|nod32key)\s*:?\s*(\w{10})

DoEvents! :P

Elemental Code

aja ni cuenta me habia dado del .cls

Pense en usar un Type pero me parecio medio rebuscado al pedo.
ademas no se si lo lei o estaba borracho que escribir resultados mediante byref es mas rapido que escribirlos como resultado de la funcion.
:silbar:


Y esta bueno esa expresion regular, pero me gusta mas asi
(ya no detecta assword :P)

(?:(?:[pP]{1})assword:?\s?|nod32key:?\s?)(\w{10})

No tengo ni jodida idea de como hacer que sea case sensitive o no :D

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Psyke1

#5
Así se pone:

Código (vb) [Seleccionar]

Set oREpass = New RegExp
   With oREpass
       .Global = True
       .Pattern = PASSPATTERN
       .IgnoreCase = True
       Set oMCpass = .Execute(sHTML)
   End With


La expresión regular que pones es fea y repites cosas. Lo más sencillo siempre mejor.  ;)




Cita de: Elemental Code en 23 Mayo 2012, 12:28 PM
ademas no se si lo lei o estaba borracho que escribir resultados mediante byref es mas rapido que escribirlos como resultado de la funcion.
:silbar:

Sería un procedimiento, puesto que no devuelve ningún valor, y si la velocidad es problema, siempre puedes hacer esto:

Código (vb) [Seleccionar]

Option Explicit

Public Type NodUP
    User As String
    Password As String
End Type

Public Function ParseKeys(ByRef sHTML As String, ByRef UP As NodUP())
'// code
End Sub


DoEvents! :P

raul338

Ups, perdon se me paso un ? al contestar (estaba en el cel, no pidas mucho :xD)

igual cuando es uno solo no hace falta poner {1} ni tampoco poner otro grupo no capturador

(?:[pP]assword:?\s*|nod32key:?\s*)(\w{10})

\s* significa que pueden haber tantos espacios como quieran, más flexible :P