elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Funcíon siendo detecta por los antivirus
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcíon siendo detecta por los antivirus  (Leído 2,438 veces)
Progmasterbr

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Funcíon siendo detecta por los antivirus
« en: 8 Junio 2015, 03:17 am »

hola,

tengo una función del un Stub en un joiner (Función "split") que está siendo detectado por antivirus en la siguiente línea:

Código:
V50 = V40

Esta línea es una de las más importantes de esta función

Por favor, alguien me podría ayudar con alguna modificación para esta función?

Segue lo código de la Funcíon:

Código:

Private Function Separa(ByVal V1 As String, Optional ByVal V2 As String, Optional ByVal V3 As Long = -1) As String()

Dim V40 As Long, V50 As Long, V6 As Long, V7 As Long, V8 As Long, V9() As String

V6 = Len(V1)

If V2 = vbNullString Then V2 = " "
V7 = Len(V2)

If V3 = 0 Then GoTo QuitHere
If V6 = 0 Then GoTo QuitHere
If InStr(1, V1, V2, vbBinaryCompare) = 0 Then GoTo QuitHere

ReDim V9(0)
V40 = 1
V50 = 1

Do
If V8 + 1 = V3 Then
V9(V8) = Mid$(V1, V40)
Exit Do
End If

V50 = InStr(V50, V1, V2, vbBinaryCompare)

If V50 = 0 Then
If Not V40 = V6 Then
V9(V8) = Mid$(V1, V40)
End If
Exit Do
End If

V9(V8) = Mid$(V1, V40, V50 - V40)
V8 = V8 + 1

ReDim Preserve V9(V8)

V40 = V50 + V7
V50 = V40
Loop

ReDim Preserve V9(V8)
Separa = V9

Exit Function

QuitHere:
ReDim Separa(-1 To -1)

End Function



« Última modificación: 8 Junio 2015, 03:45 am por Progmasterbr » En línea

pkj

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Funcíon siendo detecta por los antivirus
« Respuesta #1 en: 9 Junio 2015, 12:47 pm »

Puedes intentar modificar un poco la funcion.
A mi a veces me pasa tambien eso y mira que j.de.

Aqui te dejo tu funcion "traducida" y con un par de lineas cambiadas de posicion.
Quiza te valga, aunque no responde igual que Split con caracteres ASCII extendido.

Código
  1. Private Function Separa(ByVal Cadena As String, Optional ByVal Separador As String, Optional ByVal Limite As Long = -1) As String()
  2.  
  3.  Dim SiguienteCaracter As Long, PosSeparador As Long, LenCadena As Long, LenSeparador As Long, Contador As Long, MatrizAcumulador() As String
  4.  
  5.  LenCadena = Len(Cadena)
  6.  If LenCadena = 0 Then GoTo QuitHere
  7.  If Separador = vbNullString Then Separador = " "
  8.  If Limite = 0 Then GoTo QuitHere
  9.  If InStr(1, Cadena, Separador, vbBinaryCompare) = 0 Then GoTo QuitHere
  10.  
  11.  
  12.  LenSeparador = Len(Separador)
  13.  
  14.  ReDim MatrizAcumulador(0)
  15.  SiguienteCaracter = 1
  16.  PosSeparador = 1
  17.  
  18.  Do
  19.    If Contador + 1 = Limite Then
  20.      MatrizAcumulador(Contador) = Mid$(Cadena, SiguienteCaracter)
  21.      Exit Do
  22.    End If
  23.  
  24.    PosSeparador = InStr(PosSeparador, Cadena, Separador, vbBinaryCompare)
  25.  
  26.    If PosSeparador = 0 Then
  27.      If Not SiguienteCaracter = LenCadena Then
  28.        MatrizAcumulador(Contador) = Mid$(Cadena, SiguienteCaracter)
  29.      End If
  30.      Exit Do
  31.    End If
  32.  
  33.    MatrizAcumulador(Contador) = Mid$(Cadena, SiguienteCaracter, PosSeparador - SiguienteCaracter)
  34.    Contador = Contador + 1
  35.  
  36.    ReDim Preserve MatrizAcumulador(Contador)
  37.  
  38.    SiguienteCaracter = PosSeparador + LenSeparador
  39.    PosSeparador = SiguienteCaracter
  40.  Loop
  41.  
  42.  ReDim Preserve MatrizAcumulador(Contador)
  43.  Separa = MatrizAcumulador
  44.  
  45.  Exit Function
  46.  
  47. QuitHere:
  48.  ReDim Separa(-1 To -1)
  49.  
  50. End Function

Yo me he estado dejando un poco el seso y te he hecho esta otra, que aunque tarda 3 veces mas que la tuya, en miles y miles de pruebas aleatorias me ha dado el mismo resultado que Split.

Que la disfruteis:

Código
  1. Private Function Separa3(ByVal Cadena As String, ByVal Separador As String, Optional ByVal Limite As Long = -1) As String()
  2.  Dim Contador As Long
  3.  Dim ContadorB As Long
  4.  Dim F As Long
  5.  Dim F2 As Long
  6.  Dim Chr0 As Long
  7.  Dim Matriz() As String
  8.  Dim MatrizB() As Byte
  9.  Dim CadenaB() As Byte
  10.  Dim SeparadorB() As Byte
  11.  Dim LenSepB As Long
  12.  Dim LenCadenaB As Long
  13.  
  14.  ' EL ORDEN DE ESTAS COMPARACIONES ES IMPORTANTE
  15.  ' PARA OBTENER EL MISMO RESULTADO QUE SPLIT
  16.  ' PERO MUY, MUY IMPORTANTE :P
  17.  LenCadenaB = LenB(Cadena)
  18.  If Separador = "" Then GoTo Error2 ' si no hay separador se devuelve hasta un chr(0)
  19.  If Limite = 0 Then GoTo Error1 ' si limite es 0 se devuelve vacia
  20.  If LenCadenaB = 0 Then GoTo Error1 ' si no hay cadena se devuelve vacia
  21.  If Limite = 1 Then GoTo Error3 ' si limite es 1 se devuelve todo en una matriz con 1 elemento
  22.  If InStr(1, Cadena, Separador, vbBinaryCompare) = 0 Then GoTo Error3
  23.  'si no se encuentra el separador se devuelve una matriz de 1 solo elemento con todo
  24.  
  25.  CadenaB = Cadena
  26.  
  27.  SeparadorB = Separador
  28.  LenSepB = LenB(Separador)
  29.  
  30.  Contador = -1 ' este controla los elementos de Matriz
  31.  ContadorB = 1 ' este controla los elementos de MatrizB
  32.  
  33.  For F = 0 To LenCadenaB - 1 Step 2 ' vamos eligiendo cada caracter
  34.  
  35.    If F + LenSepB <= LenCadenaB Then ' si cabe un separador miramos si lo hay
  36.      For F2 = 0 To LenSepB - 1 Step 2
  37.        If CadenaB(F + F2) <> SeparadorB(F2) Then
  38.          Exit For ' no lo hay
  39.  
  40.        ElseIf CadenaB(F + F2 + 1) <> SeparadorB(F2 + 1) Then
  41.          Exit For ' no lo hay
  42.  
  43.        End If
  44.      Next F2
  45.  
  46.    Else
  47.  
  48.      ' si no cabe el separador, no hay separador. marcamos F2
  49.      F2 = 0
  50.  
  51.    End If
  52.  
  53.    If F2 < LenSepB - 1 Then
  54.    ' si no habia separador guardamos el byte
  55.      ReDim Preserve MatrizB(ContadorB)
  56.      MatrizB(ContadorB - 1) = CadenaB(F)
  57.      MatrizB(ContadorB) = CadenaB(F + 1)
  58.      ContadorB = ContadorB + 2
  59.  
  60.    Else
  61.    ' si habia separador
  62.  
  63.      If Contador + 1 <> Limite Then
  64.      ' si no hemos llegado al limite
  65.        F = F + LenSepB - 2 ' apuntamos mas alla del separador
  66.        Contador = Contador + 1 ' creamos un nuevo elemento y guardamos lo extraido
  67.        ReDim Preserve Matriz(Contador)
  68.        If ContadorB > 1 Then Matriz(Contador) = MatrizB
  69.        ContadorB = 1 ' inicializamos la matrizb
  70.        ReDim MatrizB(1)
  71.      Else
  72.      ' si hemos llegado al limite salimos
  73.        Exit For
  74.      End If
  75.  
  76.    End If
  77.  Next F
  78.  
  79.  If (Contador + 1 = Limite) Then
  80.    ' si estamos en el limite
  81.  
  82.    If F = LenCadenaB Then
  83.     ' si hemos procesado toda la cadena, es que no habia
  84.     ' separador y tenemos todo en matrizb, asi que lo
  85.     ' guardamos en este ultimo elemento
  86.      If ContadorB > 1 Then ' aun asi, el separador puede ser el ultimo caracter
  87.        Matriz(Contador) = Matriz(Contador) & Separador & CStr(MatrizB)
  88.      Else
  89.        Matriz(Contador) = Matriz(Contador) & Separador
  90.      End If
  91.  
  92.    Else
  93.      ' si aun quedan caracteres es que habia separador
  94.      ' hay que sacar los que quedan e incluir el separador
  95.      For F2 = F To LenCadenaB - 1 Step 2
  96.        ReDim Preserve MatrizB(ContadorB)
  97.        MatrizB(ContadorB - 1) = CadenaB(F2)
  98.        MatrizB(ContadorB) = CadenaB(F2 + 1)
  99.        ContadorB = ContadorB + 2
  100.      Next F2
  101.      Matriz(Contador) = Matriz(Contador) & Separador & CStr(MatrizB)
  102.  
  103.    End If
  104.  
  105.  Else
  106.    ' si quedan casillas creamos una nueva
  107.    Contador = Contador + 1
  108.    ReDim Preserve Matriz(Contador)
  109.    ' si hay algo en matrizb lo guardamos
  110.    If ContadorB > 2 Then Matriz(Contador) = MatrizB
  111.  
  112.  End If
  113.  
  114.  Separa3 = Matriz  ' y devolvemos la matriz
  115.  
  116.  GoTo FinFunction
  117.  
  118. Error1:
  119.  ReDim Separa3(-1 To -1) ' aqui devolvemos la matriz vacia
  120.  GoTo FinFunction
  121.  
  122. Error2:
  123.  ' si no hay separador, Split usa chr(0) como fin de cadena.
  124.  ' si no lo encuentra devuelve toda la cadena.
  125.  Chr0 = InStr(1, Cadena, Chr(0))
  126.  If Chr0 <> 0 Then
  127.    Cadena = Left$(Cadena, Chr0 - 1)
  128.  End If
  129.  
  130. Error3:
  131.  ' aqui la devolvemos en un solo elemento
  132.  ReDim Matriz(0)
  133.  Matriz(0) = Cadena
  134.  Separa3 = Matriz
  135.  
  136. FinFunction:
  137.  
  138. End Function

Saludos

EDITO:
Parece que me falto probar sin separador y si no lo hay no da el mismo resultado que Split.
Depurando.....

EDITO2:
Arreglado, (o eso creo). Espero que vaya bien, porque no pienso volver a revisarla.
La he probado con valores aleatorios y nulos para cadena, separador y limite.
Os dejo los comentarios que he ido escribiendo para que los mas nuevos se enteren de algo.

EDITO3:
Dios mio, porque lo he vuelto a revisar.
Por no hacer un Randomize, parece ser que las pruebas no eran del todo aleatorias.
Resulta que hay al menos 1 excepcion (que investigare), y es que si el caracter separador es el Chr(7) si que falla. Devuelve diferente resultado que la funcion Split.
Vere si lo arreglo. Si no, a mi ya me parece bastante bueno  :rolleyes:

Y SIGO EDITANDO:
El problema es el limite. Parece que si hay limite falla. No se que m,, de pruebas aleatorias he hecho :P
El caracter 7 me salia como separador siempre con limite 2, asi que siempre fallaba. Por lo visto como tenia un margen muy grande para limite, con los demas caracteres no llegaba al limite.
Seguire depurando a ver. Es mas complicado de lo que parece  :-\

OTRA VEZ AQUI:
Listo, ya funciona (otra vez). Solo habia un par de calculos que habia deducido mal. Volveré cuando vea que lo he estado probando todo el rato con la misma cadena o vete a saber :D

Y OTRA VEZ:
Ya lo adverti. Ahora habia olvidado probar con cadenas vacias (creo) y con separadores que no existieran en la cadena. Ademas la funcion Split es muy suya y cuesta descubrir como va a decidir devolverte el resultado con parametros no validos.

En fin, las pruebas "aleatorias" dicen que ya funciona bien, y yo ya estoy cansado de hacer pruebas :P

Si encontrais errores comentadmelo.

Saludos


« Última modificación: 9 Junio 2015, 19:36 pm por pkj » En línea

Progmasterbr

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Funcíon siendo detecta por los antivirus
« Respuesta #2 en: 14 Junio 2015, 23:25 pm »

Gracias PKJ!, su primera función es todavía su detección por Antivurus, y la segunda función, acusó archivo sospechoso en Avast, pero los dos trabajan perfectamente!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SRC] IsDbgCrss - Funcion para saber si estamos siendo 'debuggeados'
Programación Visual Basic
Karcrack 7 3,488 Último mensaje 1 Enero 2009, 09:19 am
por krackwar
Antivirus detecta dll como virus
Seguridad
WifliX 7 12,049 Último mensaje 16 Junio 2010, 14:52 pm
por skapunky
Se detecta un «fallo» en la función de datos móviles de Android O que consume...
Noticias
wolfbcn 0 3,495 Último mensaje 10 Diciembre 2017, 14:28 pm
por wolfbcn
Antivirus detecta seguimiento.
Seguridad
nobie 6 9,678 Último mensaje 6 Marzo 2024, 22:08 pm
por Armando11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines