2010-09-17 11 views
26

Tengo un fragmento de código que intenta escribir en el disco muchos archivos en un segundo. Sin embargo, no logra una mueca de dolor He instalado Kaspersky Anrivirus 2011.Programas Delphi bloqueados por Kaspersky Antivirus. Necesita workarround

Stream:= TFileStream.Create(sName, fmCreate); 

El código totalmente trabajó con Kaspersky 2010 y también trabaja con Kaspersky 2011 si desactivo sus escáneres (que no puede ser totalmente descargado de la memoria - a menos que se desinstala) El código también funciona si (Kaspersky 2011 se está ejecutando y) escribo en el disco slooooowly. Por lo tanto, obviamente no es lo suficientemente rápido para manejar mis solicitudes de disco.

El error que obtengo es EFCreateError ('No se puede crear el archivo xxx blablabla'). El error es aleatorio. La mayoría de los archivos están escritos en el disco. Alrededor del 10% falla

He tratado de obtener soporte pero es imposible encontrar una persona real en Kaspersky con la que hablar. Su llamado 'soporte' es en realidad una base de datos de preguntas frecuentes. Por supuesto, habla sobre cómo instalar el producto y cosas relacionadas. No hay nada sobre problemas relacionados con la programación. ¿Algunas ideas?

PD: ¡esto tiene repercusiones para toda la comunidad Delphi! Todos nuestros clientes no podrán usar el software Delphi si están utilizando KIS 2011 como antivirus. Por el momento recomiendo a mis usuarios que desactiven su antivirus, pero necesito una solución real.

Será bueno si una persona con KIS 2011 puede confirmar el problema. Simplemente cree un pequeño programa que escriba 200 archivos pequeños en el disco usando TFileStream.

ACTUALIZACIÓN:

  • aparece el problema sólo cuando el archivo no existe y se crea (creada en oposición a sobrescrito).
  • informe similar: https://forums.embarcadero.com/thread.jspa?threadID=32751&tstart=15
  • informe similar: http://forum.kaspersky.com/index.php?showtopic=120561
  • Una posible solución que apareció en mi mente es detectar si KIS se está ejecutando y si lo es, para poner un retraso después de cada escritura en disco. O al menos, informe al usuario que puede haber problemas. ¿Alguien sabe cómo detectar si un servicio se está ejecutando?
  • Agregué un retraso de 650ms (después de cada creación de archivo) y el error todavía está allí). Por lo tanto, no se trata de la rapidez con la que escribe en el disco, sino de la cantidad de archivos que escribe.
  • Acaba de desinstalar KIS 2011. El problema ya no aparece.
  • Acaba de reinstalar el antiguo y bueno KIS 2010. El error todavía está presente, pero aparece raramente (aproximadamente cada 300 archivos en lugar de aproximadamente 30 como en KIS 2011).
  • El problema se confirmó en una segunda computadora.
  • NOTICIAS: El bloqueo aparece en TFileStream. Sin embargo, puede deberse a una función llamada anteriormente: TestWriteAccess. Si desactivo esta función, el TFileStream.Create ya no falla. Bueno, esto no cambia demasiado las cosas. No importa qué línea de código genere el error, el programa aún falla (al azar) para escribir archivos en el disco mientras se ejecuta Kaspersky.
  • Todavía estoy esperando una respuesta de una persona real de Kaspersky ...
  • respuestas más automatizado recibido de soporte de Kaspersky (I envían correos electrónicos a apoyar en varios países). Todo apunta a una base de datos de preguntas frecuentes.
  • Cambio mi estado del usuario de Kaspersky (y del cliente) a Kaspersky porque finalmente recibí una respuesta de una persona real del soporte de Kaspersky: cito "¿Está de acuerdo con solo un montón de tonterías? Met vriendelijke groeten, Kaspersky Lab BV Papendorpseweg 77-79 ". Kaspersky puede ser una compañía pirata. No quieren contestar los correos electrónicos porque saben que su producto está demasiado defectuoso para ser reparado.

Para probar el código, intente usar el código en un bucle, para crear 1000 archivos. El programa crea un grupo de archivos (número aleatorio) y falla en StreamFile: = TFileStream.Create. Actualización: El problema se puede solucionar ingresando un pequeño retraso después de crear cada archivo.
https://docs.google.com/forms/d/1H3_O1z1iEqfh9ZT9u3B0R1tGEj-Hc9o7rAE0LKPr33Y

2013 Actualización

A partir de esta tarde (después de una actualización) Kis conflictos con Delphi. Cada vez que compilo un proyecto, KIS aumenta al 100% la utilización de la CPU. Tendré que desinstalarlo.


Delphi 7, Windows 7 (32), KIS 2011

+4

Pregunta: ¿tiene algún dato que sugiera que este problema es específico de las aplicaciones escritas por Delphi, en lugar de ser un problema general con KIS2011? – PhiS

+3

Quizás este problema no solo afecte a los usuarios de Delphi: ¿ha probado otros lenguajes de programación/compiladores (C, C++, C#, Java)? Un problema que afectaría prácticamente a todos los desarrolladores de software podría llamar más la atención. Su pregunta también podría usar etiquetas para estos compiladores para aumentar la visibilidad ... – mjn

+0

Lo siento. Solo tengo Delphi. PERO, si alguien más puede compilar un pequeño programa que crea 1000 archivos de texto (ponga solo 100 bytes en cada archivo), lo probaré en mi computadora. Pero usa algo similar a TFileStream. – Ampere

Respuesta

4
No

una respuesta para resolver su problema, pero usted debe informar Kaspersky, probablemente no saben que hay una firma de virus asociado con una Biblioteca Delphi.

Y si su programa no es demasiado complejo, es posible que desee probar Lazarus/FPC. No es tan bueno como Delphi, pero lo he usado durante varios años y he obtenido buenos resultados en Windows/MacOS/Linux.

+2

Es imposible encontrar una persona real del soporte de Kaspersky. Solo ofrecen soporte a través de un foro de foro. Solo los usuarios habituales que no comprenden el problema (que ofrecen respuestas bastante estúpidas/básicas) responden allí. Acabo de eliminar solo mis publicaciones del área "Informes de errores". Obviamente, no aceptarán esto como un error en su software. Por lo tanto, puede que tengas razón: no hay nada que podamos hacer con Kaspersky. Pero al menos informamos a la comunidad Delphi sobre este gran problema. – Ampere

+3

Existen varios productos antivirus que marcan rutinariamente ejecutables Delphi como malware porque, lamentablemente, sus rutinas de análisis detectan una alta incidencia de las mismas secuencias de bytes que aparecen en los virus, que también aparecen en su código. Esos bytes se llaman Delphi RTL (biblioteca de tiempo de ejecución). El mismo problema, por supuesto, afectaría a C++ visual, pero los imbéciles de Kaspersky crearon su aplicación en VC++ y, por lo tanto, incluyen en la lista blanca el Visual C++ RTL. –

10

Debe indicar a sus usuarios, es decir, a los clientes de Kaspersky, que Kaspersky está interfiriendo con el funcionamiento de su software, y que ELLOS deben informarlo. Exprese su frustración de que usted, como desarrollador, no tenga acceso a un ser humano real. Esta es la única forma en que las compañías anti-malware alguna vez reaccionarán: malas relaciones públicas con sus clientes que pagan.

+3

esto no es para la vida real. Anti PR para su programa cuando el antivirus dice que es sospechoso es más que anti PR para antivirus cuando dice que no funciona bien. Es usted (desarrollador) quien debe ponerse en contacto con el proveedor de AV, tienen soporte para tales casos. Por supuesto, no cambiarán su AV por usted, pero podrían darle instrucciones útiles sobre cómo prevenir la alarma. – Andrey

+4

@Andrey, no estoy de acuerdo. Los vendedores de AV deben compartir algo del dolor que causan con su descuido. –

+2

@Chris, puede estar en desacuerdo todo lo que quiera, sin embargo, el cliente pensará que su software es malo si no está haciendo lo que debería o si se lo informa como un virus. Esa es la realidad. –

2

Cuando crea un archivo, cualquier antivirus lo comprueba. Probablemente exista algún tipo de colisión entre su aplicación y KAV. ¿Has intentado combinar fmCreate con modos compartir? Puede ver en ayuda para TFileStream. Crear modos disponibles.

+0

He intentado "fmCreate O fmShareDenyNone" y aún recibí el error. – Ampere

+0

En realidad, lo que sucede es que los fabricantes de AV algunas veces colocan firmas en sus bases de datos que coinciden con la biblioteca de tiempo de ejecución de una herramienta de desarrollo en particular (lanzamiento de una), solo porque se creó algún malware con esa herramienta ... – SamB

+0

@SamB: muy poco probable sea ​​el caso aquí, ya que (afaict) el OP no obtiene una ventana emergente del antivirus, solo una creación de archivo que falla. – snemarch

3

he tenido problemas similares con Kaspersky 2011, cuando yo estaba tratando de añadir mi prog para el inicio de Windows utilizando las nuevas TFile.Copy de D2010() así como la función API prima:

CopyFile(PChar('C:\chellenger.exe'), PChar('C:\Documents and Settings\Omair\Start Menu\Programs\Startup\chellenger.exe'), False); 

mi solución era pongo mi aplicación delphi en la aplicación vb.net como un recurso, la aplicación vb.net la extrajo y la puso en funcionamiento sin falsos positivos. Mezclar dos idiomas para su problema también podría resolver su problema (1 solución posible, pero una solución muy poco profesional y no profesional)

+0

esto es realmente estúpido. parece que ellos (KIS) previenen la forma ** normal ** de agregar aplicaciones al inicio. lo que realmente haces es engañar a KIS. – Andrey

+0

Hola Omair. ¿Por qué está funcionando tu solución? ¿Parece que KIS no puede controlar las aplicaciones .Net? – Ampere

+0

PD: recientemente descubrí que KIS 2011 silenciosamente corta mi programa al leer actualizaciones de internet. Funcionó bien con KIS 2010. Creo que empecé a desagradar a Kaspersky (todas las versiones). – Ampere

1

Si el problema es solo con kapersky, solo haga que su programa detecte si se está ejecutando. Si es así, reduzca la creación/escritura de archivos a lo que pase su detección. Asegúrese de tener algún pequeño mensaje de estado en algún lugar que le diga al usuario por qué las cosas son lentas. Por cierto, los escritores de virus ya lo saben, y es por eso que esas heurísticas simplemente no funcionan.

Después de hacerlo, póngase en contacto con Kapersky y trabaje con ellos directamente para resolver esto.

Esto pasa su problema inmediato y le dará a usted y Kapersky tiempo para encontrar una solución a largo plazo.

Alternativamente, podrías simplemente cerrar kapersky. Solo asegúrate de agarrar a todos sus perros guardianes en el proceso ... Pero eso tiende a ser un poco más combativo.

+3

dice que no puede ponerse en contacto con kaspersky. y realmente no puedes apagarlo, de alguna manera lo previenen. sí, incluso con perros guardianes. Además, no es bueno desconectar la defensa del usuario sin decírselo. las aplicaciones normales no deberían hacer esto. – Andrey

+0

Estoy de acuerdo. La mayoría de los programas antivirus están diseñados para no estar apagados. Y al usuario puede no gustarle. Pero, de hecho, ya agregué un mensaje para informar al usuario sobre el problema cuando no puedo escribir en el disco. – Ampere

0

Creación de una enorme cantidad de archivos suena como algo que no es necesariamente una buena cosa, pero es probable que tenga sus razones :)

Al obtener el código de error en Delphi, qué KAV de pop-advertencias heurísticos , o es completamente silencioso? No sería extraño obtener un heurístico "omg, ¡esa aplicación está haciendo algo malo!" de crear una tonelada de archivos nuevos, pero si KAV guarda silencio, diría que es un error.

¿Se puede publicar un ejecutable delphi con la menor cantidad de código que reproduzca el error? Y una versión que hace el mismo paso pero solo crea un archivo, puede ser interesante rastrear con ProcMon de SysInternals.

+0

La cantidad no es tan grande: de 10 a 100. Acabo de usar 1000 archivos en mis pruebas para que el error aparezca a menudo, así puedo observarlo. No, KIS no muestra ningún mensaje. ¡Es un error ya que bloquea la aplicación incluso configuro mi aplicación como de confianza! – Ampere

+0

Actualización: mi salida debe tener un formato especial. No puedo fusionar todos los archivos (imagine fusionar varios archivos mp3, no tiene sentido, ¿no?) – Ampere

3

Kaspersky = pirate company? Tal vez sí tal vez no. Tal vez simplemente otra compañía con un producto malo y soporte inexistente. Su "soporte" consiste en una base de datos de preguntas frecuentes y un programa de respuesta automática por correo electrónico. Los teléfonos también están conectados a los contestadores automáticos. Su respuesta automática sigue explicando cómo agregar mi programa en la base de datos KIS de "excepción". Sigo respondiendo a esos estúpidos correos electrónicos que no puedo enviar personalmente a todos mis clientes en casa y coloco mi programa en la base de datos de "excepción" y que será mejor si corrigen el error.

Cuando finalmente recibí una respuesta no automática (la única), el tipo de apoyo amigo es lo más grosero posible.

soluciones posibles para los programadores de Delphi:
* No comprobar si el usuario tiene permiso de escritura en un archivo (con el fin de no provocar Kaspersky bug)
* Comprobar si el usuario tiene permiso de escritura. Si aparece el error, informe al usuario que Kaspersky crea un problema y que debe ser desactivado temporalmente (mientras el programa se está ejecutando). Use un bloque TRY EXCEPT para hacer esto.

Asesoramiento (basado en mi experiencia anterior):
No culpe siempre a su código si alguna vez ha recibido informes de errores extraños de sus usuarios cuando su programa intentaba escribir en el disco. Verifique también factores externos (como la existencia del virus Kaspersky anti ).

ACTUALIZACIÓN:
Acabo de solicitar un reembolso. Iré por un contracargo si no me devuelven el dinero (creo firmemente que no lo harán).

Conclusión
Cuando publiqué esto en stackoverflow no me di cuenta de la magnitud del problema y no me di cuenta de que se desviará mucho de curso inicial. Aún así, creo que está dentro del propósito de StackOverflow. Todos hemos aprendido que a veces los problemas en nuestros programas no pueden ser causados ​​por nuestro código defectuoso y tampoco podemos controlar el origen de estos problemas (21 personas votaron esta pregunta, lo que significa que muchas otras personas tuvieron problemas con KIS). Solo podemos esperar que los programas mal diseñados que interactúen con el sistema del usuario a un nivel muy bajo (como el programa antivirus KIS) sean reparados pronto para que nuestras ventas no sufran (mucho).

¡Es frustrante cuando su programa está etiquetado como "defectuoso" y no puede hacer mucho al respecto!

+2

Kaspersky pone un "conducto de software" entre las solicitudes de escritura de archivos y Windows. Es lento en procesar tantas solicitudes de escritura de archivos, ya que analiza el contenido y, por lo tanto, se deniega un porcentaje de sus solicitudes de escritura. Tienes razón al culparlos por este comportamiento. – avra

0

Primero, ¿realmente necesita probar los permisos de escritura creando un archivo? ¿No puedes simplemente verificar el permiso directamente? Siento que crear un archivo para ese propósito solo es una forma poco convincente de hacerlo en cualquier caso.

En segundo lugar, como se indicó anteriormente, es probable que después de crear y luego eliminar un archivo, haya cierta intervención de los mecanismos de seguridad de Kaspersky. Probablemente un controlador intente verificar el contenido del archivo que eliminó y lo mantenga con vida por un tiempo. De esta manera:

  1. Crea el archivo y lo abre, incrementando el recuento.
  2. El controlador Kaspersky lo nota y abre el archivo también. Incluso si establece el modo de compartir denegar, como controlador, probablemente tenga la capacidad de abrirlo de todos modos (si Kaspersky no pudo eludir las negativas de uso compartido, ¡cualquier virus podría haber utilizado el mismo truco para ocultar sus datos!).
  3. Cierre el archivo y elimínelo. Cuando elimina el archivo, el sistema simplemente lo marca "FILE_FLAG_DELETE_ON_CLOSE", pero el archivo permanece allí hasta que se cierren todos los identificadores.
  4. Kaspersky continúa escaneando el archivo, todavía no ha liberado el controlador.
  5. Por lo tanto, el archivo todavía está allí.
  6. Intenta crear un nuevo archivo y la llamada falla porque el archivo anterior aún no se elimina.

La razón de todo este lío es, por supuesto, en parte la mecánica de comprobación de Kaspersky, pero no hicieron nada especialmente malo aquí. Kaspersky necesita escanear el archivo de todos modos, casi no se puede hacer nada al respecto, es un antivirus, un grito. Por otro lado, comprobar los permisos creando y luego eliminando un archivo es (probablemente) muy, muy incorrecto. Así que supongo que eres el culpable aquí.

+0

"¿No puedes simplemente verificar el permiso directamente?" - ¿Puedes dar un ejemplo de una función (digamos llamada CanWrite (Ruta: cadena)) que devuelve TRUE si el archivo puede escribirse y FALSO de lo contrario? – Ampere

+0

"Kaspersky continúa escaneando el archivo, aún no ha liberado el controlador" - El archivo está malditamente vacío. ¡No hay nada que escanear! ¿No debería KIS verificar esto primero? – Ampere

+0

"Kaspersky continúa escaneando el archivo, todavía no ha liberado el identificador" - ¿Qué sucede si quiero leer/escribir datos en una ubicación aleatoria en el archivo? ¿Debo poner un retraso de 5 segundos y espero que KIS suelte el mango? – Ampere

0

Tuve el mismo problema. KIS hizo todo tipo de problemas. Hasta que lo reinstalé. Entonces, fue solo una instalación defectuosa.

+0

PD: no guarde y cargue la configuración de kis. – thelight

Cuestiones relacionadas