Esta vez venimos con un aporte de Karckrack para los desarrolladores en VB6 para poder quitar al paraguitas, les hablo de Avira haciendo un bypass a su deteccion de firmas.
Bueno, siendo Avira el antivirus que más me ha tocado los cojo*** a la hora de codear malware me puse a analizar porque saltaba la más famosa de sus detecciones (TR/Dropper.Gen)… Ésta salta por muchas razones… pero he descubierto una que no he visto nunca documentada en ningún foro
Básicamente Avira detecta como Dropper una aplicación en VB6 si ésta gasta __vbaAryLock/__vbaAryUnlock… Estas funciones sirven para evitar que al llamar a una función el Array que pasas como parámetro cambie de tamaño. Como dato diré que sencillamente llaman a sus funciones análogas en OLEAUT32.
Y ahora lo interesante ¿Cómo narices evitamos llamar a esas APIs si tenemos que pasar un item de un Array a una función? La única forma que se me ha ocurrido a mí es usando la estructura SAFEARRAY (de la que están compuestos todos los Arrays en VB6) para acceder al puntero con los datos del array.
Tal que así:
Código:
DWORD[DWORD[VarPtrA(arr)] + &HC]
Siendo VarPtrA() una declaración especial de VarPtr() que acepte como entrada Arrays, No pongo código de ejemplo para dejar algo de trabajo al lector
Otro pequeño tip
Para saltarse en algunas ocasiones Avira-TR/Dropper.Gen o F-PROT-W32/VBTrojan.9!Maximus basta con establecer el FormCount del VBHeader a 0 aún teniendo formularios en tú aplicación (eso sí, éstos no se cargarán)
Regards,
Snifer