¿Cómo se inicia el análisis? ¿Comienzas en main y esparcido desde allí, o tienes un método mejor?
Comience con un análisis básico exhaustivo (tanto dinámico como estático): enumere las exportaciones, las importaciones, el uso de funciones, syscalls, winapi, mutex, las dependencias dll, cadenas y algunos grep en eso.
Ejecute el análisis dinámico en entornos limitados básicos para llegar a algunos, aunque parciales y pueden ser un tanto incorrectos, puede presentar varias teorías sobre algunas de las funciones principales de ejecutable / dll.
dicho esto, si estamos hablando de java / .net, etc., por supuesto, descompílelos, pero no existe una práctica común sobre el uso de malware en dichos entornos.
Si encuentra llamadas a funciones sospechosas, digamos que el ejecutivo intenta escribir en algunos archivos de sistema / valores de registro críticos, o implementar archivos con nombres extraños, debe estar preocupado (o contento, según el color de su sombrero): ))
¿Cómo encuentra e identifica una funcionalidad importante o una funcionalidad en particular que le interesa?
Las cadenas pueden ser útiles: puede detectar algo sospechoso como una cadena que comienza con cmd.exe ... o incluso nombres de host, combinaciones de contraseña de usuario y otros
El hacker de recursos y el caminante de dependencia son herramientas básicas para enumerar exportaciones, importaciones y recursos incluidos.
La funcionalidad más importante casi siempre tiene que ser ingeniería inversa en IDA o una herramienta de análisis estático similar.
¿Cómo se asigna un flujo de control de alto nivel?
Si todo lo anterior falla, las capacidades gráficas de IDA son excelentes y se pueden usar para ello.
¿Cómo gestionas las rutinas de ayuda que has identificado? Considero que los marcadores son insuficientes y el bloc de notas es demasiado primitivo.
IDA tiene un sistema de comentarios, opciones para colorear, cambio de nombre y más.
Para el proceso general, me gusta graficar las cosas cuando es necesario, es la forma más clara de hacerlo, incluso en visio.
¿Cómo evita perderse en la avalancha de código de ensamblaje?
Casi nunca haces ingeniería de ingeniería a nivel de asm TODO el código disponible. Algunos son más eficientes en el análisis dinámico (Olly e Immunity son geniales, la inmunidad es una bifurcación de Olly con muchos giros) y nunca se necesita revertir todo el código para poder resolverlo.
Tengo un código de color en IDA y renombro constantemente las partes ya invertidas a algo más sensible que 'loc_402BBD'
¿Algún otro truco / consejo para abordar este tipo de tareas?
- Nunca te quedes atascado en un solo estado mental, te puede traer muchos problemas; piensa en el código de análisis durante días y obtén una parte que cambia totalmente la forma en que te veías en las cosas, horrible.
- Practica, mucho, no hay nada igual, créeme.