Colección de citas famosas - Slogan de motivación - ¿Qué tipo de archivo es una DLL? ¿Cuál es su función?

¿Qué tipo de archivo es una DLL? ¿Cuál es su función?

1. El principio de DLL

1. Biblioteca de enlaces dinámicos

Biblioteca de enlaces dinámicos, nombre completo: Biblioteca de enlaces dinámicos, abreviatura: DLL, su función es a La aplicación proporciona una funcionalidad ampliada. Si una aplicación quiere llamar a un archivo DLL, debe estar "vinculada dinámicamente" con él desde una perspectiva de programación. La aplicación necesita conocer las funciones API exportadas por el archivo DLL antes de poder llamarla. Se puede ver que el archivo DLL en sí no se puede ejecutar y el programa de aplicación debe llamarlo. Precisamente porque el archivo DLL debe insertarse en el módulo de memoria de la aplicación cuando se ejecuta, esto significa que el archivo DLL no se puede eliminar. Esto se debe a un mecanismo interno de Windows: los programas en ejecución no se pueden cerrar. ¡Por lo tanto, nació la puerta trasera DLL!

2. Principio y características de la puerta trasera DLL

Escriba un código que implemente la función de puerta trasera en un archivo DLL y luego insértelo en un archivo EXE para que sea ejecutable, de modo que no Si es necesario ocupar un proceso, no tendrá un número PID correspondiente, por lo que se puede ocultar en el administrador de tareas. El archivo DLL en sí no es muy diferente del archivo EXE, pero debe llamarse usando un programa (EXE) para ejecutar el archivo DLL. La ejecución de un archivo DLL requiere cargar el archivo EXE, pero si el EXE quiere cargar el archivo DLL, necesita conocer la función de entrada de un archivo DLL (es decir, la función de exportación del archivo DLL). De acuerdo con los estándares de escritura de archivos DLL: EXE debe ejecutar el archivo DLLMain() como condición de carga (al igual que el archivo main() de EXE). Básicamente, existen dos tipos de puertas traseras DLL: 1) Implementar todas las funciones en el archivo DLL 2) Convertir la DLL en un archivo de inicio e iniciar una puerta trasera EXE normal cuando sea necesario;

Métodos de escritura comunes:

(1) Solo un archivo DLL

Este tipo de puerta trasera es muy simple. Simplemente crea un archivo DLL y lo registra. Valor clave de ejecución de tabla u otros lugares que el sistema pueda cargar automáticamente, use Rundll32.exe para iniciar automáticamente. Rundll32.exe ¿Qué es? Como su nombre lo indica, "ejecutar archivos DLL de 32 bits". Su función es ejecutar las funciones internas en el archivo DLL, de modo que en el proceso solo estará Rundll32.exe, y no el proceso de puerta trasera DLL. De esta manera, el proceso queda oculto. Si ve varios Rundll32.exe en el sistema, no se asuste. Esto demuestra cuántos archivos DLL se inician con Rundll32.exe. Por supuesto, podemos encontrar los archivos DLL ejecutados por Rundll32.exe desde el lugar donde el sistema los carga automáticamente.

Ahora, permítanme presentarles el archivo Rundll32.exe. Como se mencionó anteriormente, su función es llamar a la biblioteca de enlaces dinámicos a través de la línea de comando. También hay un archivo Rundll.exe en el sistema, que significa "ejecutar un archivo DLL de 16 bits". Echemos un vistazo al prototipo de función utilizado por Rundll32.exe:

Void CALLBACK FunctionName (

HWND hwnd,

HINSTANCE hinst,

LPTSTR lpCmdLine,

Int nCmdShow

);

El método de uso bajo la línea de comando es: Rundll32.exe DLLname,Functionname [Argumentos]

DLLname es el nombre del archivo DLL que debe ejecutarse; Functionname es la función exportada específica del archivo DLL anterior que debe ejecutarse; [Argumentos] son ​​los parámetros específicos de la función exportada.

(2) Reemplazar el archivo DLL en el sistema

Este tipo de puerta trasera es más avanzado que el anterior. Convierte el código que implementa la función de puerta trasera en una DLL que coincide con la. archivo del sistema y cambie el nombre del archivo DLL original.

Cuando una aplicación solicita el archivo DLL original, la puerta trasera de la DLL activará una función de reenvío y pasará los "parámetros" al archivo DLL original; si encuentra una solicitud especial (como un cliente), la puerta trasera de la DLL se iniciará y se ejecutará. él. Para este tipo de puerta trasera, lo más seguro es implementar todas las operaciones en un archivo DLL, pero requiere muchos conocimientos de programación y no es fácil de escribir. Por lo tanto, este tipo de puerta trasera generalmente convierte el archivo DLL en un archivo de "inicio". Cuando se encuentra en circunstancias especiales (como una solicitud del cliente), se inicia una puerta trasera EXE común después de que el cliente finaliza la conexión y la puerta trasera EXE se detiene; Luego, el archivo DLL entra en un estado de "reposo" y no se iniciará hasta la siguiente conexión del cliente. Sin embargo, con la introducción de las funciones de "firma digital" y "recuperación de archivos" de Microsoft, esta puerta trasera ha ido disminuyendo gradualmente.

Consejos:

En el directorio WINNT/system32, hay una carpeta dllcache, que contiene muchos archivos DLL (incluidos algunos archivos EXE importantes). Cuando los archivos DLL son ilegales después de la modificación. , el sistema restaurará el archivo DLL modificado desde aquí. Si desea modificar un archivo DLL, primero debe eliminar o cambiar el nombre del archivo DLL con el mismo nombre en el directorio dllcache; de ​​lo contrario, el sistema se recuperará automáticamente.

(3) Incrustación dinámica

Este es el método más utilizado para puertas traseras de DLL. Su significado es incrustar el archivo DLL en el proceso del sistema en ejecución. En los sistemas Windows, cada proceso tiene su propio espacio de memoria privado, pero todavía hay varias formas de ingresar al espacio de memoria privado de su proceso para lograr una incrustación dinámica. Dado que los procesos clave del sistema no se pueden finalizar, este tipo de puerta trasera está muy oculta y es muy difícil de detectar. Las incrustaciones dinámicas comunes incluyen: "API de gancho", "gancho global (HOOK)", "hilo remoto", etc.

La tecnología de subprocesos remotos se refiere al método de crear un subproceso remoto en un proceso para ingresar al espacio de direcciones de memoria de ese proceso. Cuando el operador EXE (o Rundll32.exe) crea un hilo remoto en el proceso insertado y le ordena que ejecute un determinado archivo DLL, nuestra puerta trasera DLL se colgará y no se generará ningún proceso nuevo aquí. Para detener la puerta trasera de DLL, solo puede finalizar el proceso que vincula la puerta trasera de DLL. Pero si está vinculado a algunos procesos clave del sistema, no se puede finalizar. Si finaliza el proceso del sistema, ¡Windows también finalizará! ! !

3. Características de inicio de la puerta trasera de DLL

El EXE portador que inicia la puerta trasera de DLL es indispensable y muy importante. Se llama: Loader. Si no hay un cargador, ¿cómo se inicia nuestra puerta trasera DLL? Por lo tanto, una buena puerta trasera de DLL hará todo lo posible para proteger su cargador para que no sea revisado y eliminado. Hay muchas formas de cargar el cargador. Puede ser un archivo EXE escrito especialmente para nuestra puerta trasera DLL; también puede ser Rundll32.exe que viene con el sistema. Incluso si Rundll32.exe está detenido, el cuerpo principal de la puerta trasera DLL. todavía existe. 3721 Network Real Name es un ejemplo, aunque no es una puerta trasera "real".

2. Eliminación de DLL

Esta sección utiliza tres ejemplos de puertas traseras de DLL bien conocidos, a saber, "SvchostDLL.dll", "BITS.dll" y "QoServer.dll". Explique en detalle su método de eliminación manual. Espero que después de leer estos tres métodos de eliminación de puertas traseras de DLL, puedas sacar inferencias de un ejemplo y utilizarlas de manera flexible, para no tener miedo de las puertas traseras de DLL. De hecho, es relativamente sencillo eliminar manualmente la puerta trasera de la DLL. No es más que hacer un escándalo en el registro. Para obtener detalles sobre cómo hacer esto, consulte a continuación.

1. PortLess BackDoor

Este es un programa de puerta trasera DLL muy poderoso. Además del Shell que puede obtener permisos del sistema local, también admite funciones como "detección de cuentas clonadas". Instalar Terminal Services" y una serie de otras funciones (consulte la ayuda del programa para obtener más detalles), aplicables a Windows2000/xp/2003 y otros sistemas.

El programa utiliza svchost.exe para iniciarse. Normalmente, el puerto no se abre, pero se puede realizar una conexión inversa (la característica más importante para hosts con _blank">firewall, esta función no puede ser mejor). Antes de presentar el método de limpieza, presentemos brevemente los servicios clave del sistema svchost.exe:

Svchost es solo el host del servicio y no implementa ninguna función por sí mismo si necesita utilizar Svchost para hacerlo. Al iniciar un servicio, un servicio se implementa en forma de DLL. El cargador portador de la DLL apunta a svchost. Por lo tanto, al iniciar el servicio, svchost llama a la DLL del servicio para lograr el propósito de iniciar. la DLL de un determinado servicio. El archivo está determinado por los parámetros en el registro. Hay una subclave de Parámetros debajo del servicio que debe iniciarse. ServiceDll indica qué archivo DLL es responsable del servicio y este archivo DLL debe exportarse. una función ServiceMain() Proporciona soporte para procesar tareas de servicio.

¡Jaja, estoy un poco confundido después de leer la teoría anterior (estoy casi dormido), no te preocupes, echemos un vistazo! en el contenido específico). La subclave Parámetros en HKEY_LOCAL_MACHINESTEMCurrentControlSetServicesRpcSs tiene un valor clave de %SystemRoot%system32rpcss.dll. Esto significa que al iniciar el servicio RpcSs, Svchost llama a rpcss.dll en el directorio WINNTsystem32. es el HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost que almacena los grupos iniciados por Svchost y los servicios en el grupo. Entre ellos, el grupo netsvcs tiene la mayor cantidad de servicios. Para usar Svchost para iniciar un servicio, el nombre del servicio aparecerá en HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost. para lograr esto:

1. Agregue un nuevo grupo y agregue el nombre del servicio al grupo. 2. Agregue el nombre del servicio al grupo existente. Úselo directamente. grupo, pero no hay ningún servicio instalado en esta máquina

4 Modifique el servicio existente en el grupo existente y apunte su ServiceDll a su propia puerta trasera DLL

El tercer método utilizado por PortLess. BackDoor que probé

Está bien, creo que después de leer los principios anteriores, definitivamente puedes pensar en cómo borrar PortLess BackDoor Sí, está en el registro. Bien, comencemos ahora.

Nota: Dado que este artículo solo presenta el método de limpieza, aquí se omite el método de uso.

El cargador de puerta trasera inserta SvchostDLL.dll en el proceso Svchost. Por lo tanto, primero abrimos Windows Process Management 2.5 en Windows Optimization Master y verificamos que la información del módulo en el proceso SvchostDLL.dll se haya insertado en el. Proceso Svchost. Lo obtuvimos. Según el mensaje "Utilice directamente un nombre de servicio en el grupo existente, pero no hay ningún servicio instalado en esta máquina", podemos concluir que habrá un nuevo servicio en "Herramientas de administración" - ". Servicios". Como prueba de lo dicho, el nombre de este servicio es: IPRIP, iniciado por Svchost, -k netsvcs significa que este servicio está incluido en el grupo de servicios netsvcs.

Detuvimos el servicio, luego abrimos el editor de registro (Iniciar-Ejecutar--regedit), fuimos a HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesIPRIP y verificamos su subclave Parámetros).

El valor clave de la clave del programa, SvcHostDLL.exe, es el cargador de puerta trasera; el valor clave de ServiceDll, C:WINNTsystem32svchostdll.dll, es el archivo DLL llamado, que es el archivo DLL de la puerta trasera. Ahora eliminamos la subclave IPRIP (o usamos SC para eliminar), luego vamos a HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost, editamos el grupo de servicios netsvcs y eliminamos 49 00 70 00 72 00 69 00 70 00 00 00, que corresponde al nombre del servicio IPRIP. Luego salga y reinicie. Después de reiniciar, elimine los archivos de puerta trasera en el directorio WINNTsystem32.

2. BITS.dll

Este es el trabajo de Brother Rong y también es una puerta trasera DLL. El principio es básicamente el mismo que SvchostDLL.dll, pero el cuarto método. introducido anteriormente se utiliza aquí, es decir, "modificar el servicio existente en el grupo existente y apuntar su ServiceDll a su propia puerta trasera DLL". En otras palabras, la puerta trasera modifica un servicio existente y apunta la DLL del servicio original a sí mismo (es decir, BITS.dll), logrando así el propósito de la carga automática. En segundo lugar, la puerta trasera no tiene su propio cargador y tiene; se carga usando Rundll32.exe que viene con el sistema. Todavía usamos Windows Process Management 2.5 para verificar. En la Figura 7, podemos ver que bits.dll se ha insertado en el proceso Svchost.

Bien, ahora echemos un vistazo al método de eliminación específico. Dado que la puerta trasera modifica un servicio existente y no sabemos qué servicio se ha modificado, buscamos bits.dll en el registro. , finalmente buscó bits.dll en HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRasAuto y verificó ServiceDll en la subclave Parámetros. Su valor clave es C:WINNTsystem32bits.dll (Figura 8). Resulta que la puerta trasera reemplazó el archivo DLL original del servicio RasAuto con bits.dll para lograr la carga automática. Será más fácil de manejar una vez que sepa el motivo. Ahora cambiamos el valor clave de ServiceDll al archivo DLL original del servicio RasAuto, es decir, %SystemRoot%System32rasauto.dll, salimos y reiniciamos. Luego elimine bits.dll en el directorio WINNTsystem32.

3. NOIR--QUEEN

NOIR--QUEEN (Guardian) es un programa de puerta trasera DLL y caballo de Troya. El servidor se inserta en el Lsass.exe del sistema en forma de. un archivo DLL en el proceso, dado que Lsass.exe es un proceso clave del sistema, no se puede finalizar. Antes de presentar el método de eliminación, permítanme presentarles primero el proceso Lsass.exe:

Este es un servicio de autorización de seguridad local y generará un proceso para los usuarios autorizados que utilizan el servicio Winlogon si la autorización se realiza correctamente. , Lsass generará el token de entrada del usuario y el token se utilizará para iniciar el shell inicial. Otros procesos iniciados por el usuario heredarán este token.

De la introducción anterior, podemos ver la importancia de Lsass para el sistema. Entonces, ¿cómo borrarlo específicamente? Vea abajo.

Después de instalar correctamente la puerta trasera, se agregará un servicio llamado QoSserver al servicio y el archivo de puerta trasera QoSserver.dll se insertará en el proceso Lsass para que pueda ocultar el proceso y comenzar automáticamente ( Figura 9). Ahora abrimos el registro, vamos a HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesQoSserver, eliminamos la clave QoSserver directamente y luego reiniciamos.

Después de reiniciar, cuando lleguemos a la lista de servicios, veremos que el servicio QoSserver todavía está allí, pero no se ha iniciado. La categoría es automática. La cambiamos a "deshabilitada" luego buscamos y encontramos un servicio. llamado AppCPI Service, su programa ejecutable apunta a QoSserver.exe (hablaré sobre el motivo más adelante), como se muestra en la Figura 11. Abrimos nuevamente el registro, vamos a HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAppCPI, eliminamos la clave AppCPI, reiniciamos, eliminamos QoSserver y finalmente eliminamos el archivo backdoor en el directorio WINNTsystem32.

"Luché" con esta puerta trasera durante más de 3 horas y la reinicié N veces. La razón es que incluso si se elimina el servicio QoSserver, la puerta trasera todavía se está ejecutando y el servicio QoSserver en la lista de servicios "reaparece". Más tarde descubrí el motivo: después de que eliminé el servicio QoSserver y lo reinicié, el archivo QoSserver.dll insertado en el proceso Lsass restauró el servicio QoSserver y generó otro servicio, AppCPI, por lo que debemos eliminarlo en el registro. El servicio AppCPI es responsable de retirar la puerta trasera. De esto se puede ver que las medidas de protección de puerta trasera actuales son realmente completas.

Nota: Después de eliminar el servicio QoSserver y reiniciarlo, la categoría de inicio del QoSserver restaurado debe cambiarse a "Desactivado". De lo contrario, incluso si se elimina el servicio AppCPI, el servicio QoSserver seguirá ejecutándose. .

En tercer lugar, prevención de DLL

Después de leer los ejemplos anteriores, creo que todos tienen una cierta comprensión de cómo eliminar las puertas traseras de DLL, pero en realidad, las puertas traseras de DLL no utilizan el archivo predeterminado. nombre, por lo que no puede estar seguro de tener una puerta trasera DLL. Para las puertas traseras de DLL, el directorio system32 es un buen lugar, como lo son la mayoría de las puertas traseras, así que tenga mucho cuidado aquí. Permítanme presentarles en detalle cómo descubrir la puerta trasera de DLL. Espero que sea útil para todos.

1. Después de instalar el sistema y todas las aplicaciones, haga una copia de seguridad de los archivos EXE y DLL en el directorio system32: abra CMD, vaya al directorio WINNTsystem32 y ejecute: dir *.exe>exe.txt &. dir *.dll>dll.txt, de esta manera, todos los archivos EXE y DLL se copiarán en archivos exe.txt y dll.txt en el futuro. Si se encuentran anomalías, puede usar el mismo comando para realizar la copia de seguridad; Archivos EXE y DLL nuevamente (aquí asumimos que son exe0.txt y dll0.txt), y use: fc exe.txt exe0.txt>exedll.txt & fc dll.txt dll0.txt>exedll.txt, lo que significa usar el comando FC para comparar los archivos EXE dos veces y los archivos DLL, y guardar los resultados de la comparación en el archivo exedll.txt. A través de este método, podemos encontrar los archivos EXE y DLL adicionales y juzgar si se trata de una puerta trasera DLL según el tamaño del archivo y el tiempo de creación.

2. Utilice herramientas de memoria/módulo para ver los archivos DLL llamados por el proceso, como Windows Process Management 2.5 en Windows Optimization Master. De esta manera, puede averiguar a qué archivo DLL llamó el proceso. Combinado con los resultados de la comparación obtenidos utilizando el comando FC anterior, puede determinar aún más si se ha alcanzado la puerta trasera de la DLL. Si no tiene un maestro de optimización, puede usar TaskList. Esta pequeña herramienta también puede mostrar los archivos DLL llamados por el proceso y también tiene el código fuente para facilitar su modificación.

3. Las conexiones de puerta trasera ordinarias requieren abrir puertos específicos, y las puertas traseras DLL no son una excepción, no importa cuán ocultas estén, el puerto debe abrirse al conectarse. Podemos usar netstat -an para ver las conexiones de todos los puertos TCP/UDP y encontrar conexiones ilegales. Todos deberían conocer los puertos que han abierto y comprender el atributo de estado en netstat –an.

Por supuesto, también puedes utilizar Fport para mostrar el proceso correspondiente al puerto. De esta forma, podrás tener una vista panorámica de cualquier conexión y puerto desconocido en el sistema.

4. Verifique periódicamente los lugares donde el sistema se carga automáticamente, como: registro, Winstart.bat, Autoexec.bat, win.ini, system.ini, wininit.ini, Autorun.inf, Config. sistema, etc. El segundo paso es administrar los servicios. Debe comprender los servicios predeterminados del sistema. Cuando encuentre servicios problemáticos, puede utilizar el SC en el Kit de recursos de Windows 2000 Server para eliminarlos. Todos los lugares anteriores se pueden utilizar para cargar el cargador de puerta trasera de DLL. ¿Qué pasa si eliminamos el cargador de puerta trasera de DLL? ¿Cómo sigue funcionando la puerta trasera DLL? !

Al utilizar el método anterior, creo que la mayoría de las puertas traseras de DLL se pueden "revelar". Si normalmente hacemos más copias de seguridad, tendremos el doble de resultado con la mitad del esfuerzo para encontrar puertas traseras de DLL.

Posdata

Este artículo presenta en detalle algunos conocimientos sobre las puertas traseras de DLL. De hecho, no es difícil ver en lo anterior que las puertas traseras de DLL no dan tanto miedo como se imagina y son relativamente simples de eliminar. Dije al principio del artículo: está diseñado para permitir que todos "comiencen rápidamente" con las puertas traseras DLL. Por lo tanto, espero que este humilde artículo pueda ser útil para todos. Si hay algún error en el artículo, perdóneme. . ¡Gracias!

Referencia:/ArticleView/2005-2-3/Article_View_552.Htm