java - Detección de antivirus en un programa legítimo
obfuscation (5)
Creo que puede usar muchos archivos para probar, averiguar si no se pueden descargar todos los archivos. Si todos los archivos vuelven iguales. Creo que la razón es tu código. Luego puedes referirte al código de otra persona.
Básicamente, mi programa corre junto a otro archivo jar. Aquí está el código para la función de descarga:
public void saveUrl(final String filename, final String urlString) throws MalformedURLException, IOException {
BufferedInputStream in = null;
FileOutputStream fout = null;
try {
in = new BufferedInputStream(new URL(urlString).openStream());
fout = new FileOutputStream(filename);
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} catch (Exception e) {
return;
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
Y para iniciar el nuevo proceso.
public void runUpdate() throws IOException{
String folder = fileLocation;
ProcessBuilder p = new ProcessBuilder();
p.command(folder);
p.start();
}
Sin embargo, incluso con las indicaciones del usuario y la aprobación de la descarga, cuando lo probé fuera del entorno de Eclipse, mi antivirus lo detectó de inmediato.
Fue detectado como un "trojan.downloader". ¿Estoy pensando que tiene algo que ver con la función de descarga? Realmente no estoy tratando de vencer a un programa antivirus. No estoy intentando hacer nada ilegítimo.
Tal vez alguna ofuscación haría el truco?
El código de byte generado por su compilador coincide con algún patrón / firma de código específico que busca el AV, lo que significa que algunos de los programas maliciosos que habían encontrado / invertido en el pasado tenían un código similar al que podían encontrar de manera confiable.
La mejor opción sería identificar y reescribir el método que esté activando la detección hasta que ya no coincida con lo que esté buscando el AV, la ofuscación no sería una buena idea (pero se puede hacer si el ofuscador controla la ofuscación de flujo) para corregir este problema, ya que no hay garantía de que produzca un código de bytes lo suficientemente diferente del original (algunos ofuscadores, como ProGuard, tampoco controlan la ofuscación de flujo).
Los proveedores de antivirus buscan patrones en bits; si algo coincide con los conocidos en la base de datos, lo marcarán como malo. Por supuesto, esto ha creado problemas para los desarrolladores / empresas (pequeñas / grandes)
Algunos proveedores tienen un mecanismo automatizado para marcar "falsa detección". Por favor use el canal apropiado para reportar tales casos.
Para empezar, aquí hay algunos. symantec o avg
Para algunos, debe ponerse en contacto con el proveedor por otros medios: por ejemplo, http://www.avast.com/contact-form.php?subject=VIRUS-FILE
VirusTotal está trabajando en una forma más fácil de marcar. Aún no en producción, supongo.
En cualquier caso, las opciones mencionadas en otras respuestas no funcionan siempre. Creamos ejecutables actualizados con compilador más reciente y API recientes. También intentó con la firma del ejecutable. Todo esto mejora la posibilidad de que el programa sea bueno para el programa "antivirus". Sin embargo, la forma más adecuada es consultar con el proveedor. Lo
Puede intentar firmar su JAR con un certificado de firma de código, por ejemplo, de Digicert .
Esto agrega el nombre de su empresa al JAR de una manera confiable y, por lo tanto, el programa Antivirus también puede confiar en él. Sin embargo, no hay garantía de que todos los programas antivirus lo hagan.
Tenga en cuenta que también hay algún impacto al hacerlo:
- Se pueden realizar comprobaciones de CRL (lista de revocación de certificados). Esto descargará los datos de internet. En caso de que la PC tenga una conexión de red física (local) pero no tenga conexión a Internet, esto puede tener un tiempo de espera significativo.
- Debe familiarizarse con la marca de tiempo, de lo contrario, la firma dejará de ser válida cuando caduque el certificado.
Voy a añadir esto como respuesta. Tener su programa firmado legítimamente solucionará este problema para usted. También puede falsificar una firma, pero los antivirus como ESET detectarán esto casi al instante.
La mejor solución para esto es, honestamente, solo intente hacer trampa con el antivirus. Cambia todos tus nombres de cadena ... Agrega un montón de cadenas falsas que no hacen nada como
int asdgsal = 1 + 2;
Y también agrega algunas llamadas al método de bucle que no hacen casi nada.
Funciona para mi. Es incompleto y puede ser abusado por personas que intentan hacer daño real, pero funciona.
Además, no descargue a temp o appdata. Tíralo en% userprofile% o mis documentos y estarás bien.