Red de conocimiento del abogados - Preguntas y respuestas jurídicas - ¿Cómo programar el control remoto en idioma Yi? ¡De esas que parecen una paloma gris! ¡Lo mejor es tener el código fuente!

¿Cómo programar el control remoto en idioma Yi? ¡De esas que parecen una paloma gris! ¡Lo mejor es tener el código fuente!

El software de control remoto gh0st utiliza RESSDT sobreactivo a nivel de controlador, inicio de parámetros svchost y reemplaza los servicios del sistema. El método de trabajo es relativamente avanzado. El único inconveniente es que no hay nivel de controlador ni de usuario. Ocultación de nivel. Por supuesto, estas partes se pueden agregar. La codificación utiliza el entorno de programación VC.

1. Configuración del entorno

El entorno de compilación debe estar configurado: DDK+SDK+VC6 se usa para compilar archivos sys y SDK+VC6 se usa para compilar proyectos. Parte de esto es relativamente simple. Hay mucha información en Internet, por lo que no entraré en detalles aquí. Los amigos interesados ​​también pueden consultar la ayuda relacionada de DDK y SDK.

2. Breve descripción del posicionamiento de la firma

El principio del software antivirus para detectar y eliminar troyanos se basa básicamente en las características. La parte detectada se llama firma, por lo que usted. Puede utilizar la herramienta de localización de firmas MyCLL para localizar la ubicación de la firma del virus. El principio de la herramienta de localización es dividir el troyano escaneado en trozos y utilizar el relleno de segmentos para que coincida con el valor característico del software antivirus para encontrar la ubicación. el software antivirus escanea y elimina el virus.

Después de localizar el código de característica, ¿cómo encontrar a la inversa la posición correspondiente en el código fuente? Consulte el análisis a continuación,

3. Utilización de archivos de mapas para el posicionamiento de archivos binarios y códigos fuente.

El archivo de mapas es un archivo de mapeo correspondiente al código binario y fuente.

Asumimos que hemos localizado la firma del virus según el tercer paso:

Nombre del virus firma ubicación dirección de memoria

svchost.dll 000038AA_00000002 100044AA

p>

svchost.dll 00005F98_00000002

El primer paso es configurar el entorno de compilación de VC para generar un archivo de mapa.

En VC, haga clic en la página de opciones del menú "Proyecto -> Configuración" (o presione Alt+F7), seleccione la pestaña C/C++ e ingrese: /Zd en la parte inferior Opciones del proyecto, luego haga clic en En la pestaña Enlace, seleccione la casilla de verificación "Generar archivo de mapa" e ingrese: /mapinfo:lines en las Opciones del proyecto inferiores, lo que significa agregar información de línea al generar el archivo MAP. La configuración está completa.

El segundo paso es compilar el proyecto VC. Simplemente configure el proyecto activo para compilar. Esto no necesita explicación. Una vez completado este paso, habrá un archivo .map adicional (como svchost.map) en el directorio de versión (o depuración).

El tercer paso es abrir el archivo del mapa (puedes abrirlo con UE o un editor de texto), el formulario es el siguiente:

(comenzar)

La marca de tiempo es 488fcef2 (miércoles 30 de julio a las 10:16:18 de 2008)

La dirección de carga preferida es 10000000

--------------- ------ -------------------------------------------- ------ ---1---- (wrw agregado para facilitar la explicación)

Inicio Longitud Nombre Clase

0001:00000000 00010a50H .text CODE

0001: 00010a50 00000485H .text$x CÓDIGO

0002:00000000 000004c8H .idata$5 DATOS

......

0003: 00000010 00000004H .CRT$XIZ DATOS

0003:00000020 00001a50H .data DATOS

0003:00001a70 00000688H .bss DATOS

0004:00000000 000000 a8H .rsrc$01 DATOS

0004:000000b0 00000cf0H .rsrc$02 DATOS

------------------------------ ------ -------------------------------------------- ----2---(Para facilitar la explicación, se agregó wrw)

Dirigir los públicos por valor Rva+Base Lib:Object

0001:00000000 0CAudio@@QAE@XZ 10001000 f Audio.obj

0001 :000000d0 _GCAudio@@UAEPAXI@Z 100010d0 f i Audio.obj

0001:000000d0 _ECAudio@@UAEPAXI@Z 100010d0 f i Audio.obj

0001:000000f0 1CAudio@@UAE@XZ 100010f0 f Audio.obj

0001:000001e0 ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f Audio.obj

0001 :00000240 ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f Audio.obj

0001:000002c0 ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f Audio.obj

.....

0001:00003440 ?FixedUploadList@CFil

eManager@@AAE_NPBD@Z 10004440 f FileManager.obj

0001:00003670 ?StopTransfer@CFileManager@@AAEXXZ 10004670 f FileManager.obj

0001:00003730 ?CreateLocalRecvFile@CFileManager@@ AAEXPA E @Z 10004730 f FileManager.obj

......

---------------------- ------------------------------------------------- - ---3---(wrw agregado para facilitar la explicación)

Números de línea para .\Release\FileManager.obj(E:\vtmp\gh0st3src\Server\svchost\common\FileManager.cpp ) .text

17 0001:00002630 20 0001:0000267f 21 0001:00002698 24 0001:000026d0

25 0001:000026f8 26 0001:0000273c 29 segmento 0 001:000027d0 33 0001: 000027ee

770001: 000027F8 36 0001: 000027FB 37 0001: 00002803 77 0000280d

......

532 0000340F 53414 0001 :00003428 540 0001 :00003440

546 0001:0000345d 547 0001:00003487 548 0001:00003490 549 0001:00003492

55 1 0001:0000349e 552 034b8 553 0001:000034cb 554 0001:000034d4

558 0001:000034de 560 0001:000034e9 563 0001:000034ee 564 0001:00003506

......

(fin)

Echemos un vistazo. La dirección de memoria del primer código de característica que localiza svchost.dll es: 100044AA En el segundo bloque, podemos encontrar RVA+BASE que está muy cerca de él

0001:00003440. ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj

De esta manera, podemos ubicar la función FixedUploadList en FileManager.cpp. ¿Está reducido el alcance?

Reduzcamos las líneas de código

Utilice esta fórmula: desplazamiento de línea de firma = dirección de firma (Dirección de falla) - dirección base (Dirección ImageBase) - 0x1000

It Parece difícil, pero en realidad es muy simple. Eliminamos la dirección base de memoria 10000000 de 100044AA y luego restamos 1000. Debido a que muchos PE comienzan desde 1000, podemos obtener la dirección de desplazamiento del código a 34AA. Vaya al bloque 3 y busque la línea de código correspondiente.

La dirección de desplazamiento 34AA está en medio de (551 0001:0000349e 552 0001:000034b8), es decir, entre las líneas 551 y 552. Vamos al programa fuente para buscar la línea 551:

wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);

De esta manera se localiza el código fuente y puedes modificarlo como quieras.

4. Anti-asesinato real

A. Kabbah anti-asesinato

Después de la primera compilación, primero haz el anti-asesinato de Kabbah. Kabbah elimina los archivos sys y dll y, por supuesto, el install.exe que los empaqueta. Finalmente, Kabbah también elimina el servidor generado. Lo que digo aquí es que eliminar el servidor generado no se superpone con el código de función anterior, pero elimina la configuración. información.

El primer paso, sys antivirus

Después de volver a compilar sys, se agregaron las funciones de la tabla de entrada. Al mismo tiempo, el sistema era diferente, lo que resultó en muchos lugares. que eran diferentes de las características originales. Pasó con éxito el software de eliminación de Kabbah y Kingsoft, Xiaohongsan, etc.

El segundo paso, evitar matar svchost.dll

El código de función ubica las dos ubicaciones de MultiByteToWideChar y "gh0st update". Esto se obtiene a través del archivo de mapa en el paso 3.

Kaba tiene miedo de agregar instrucciones. Al llamar a esta función MultiByteToWideChar, puede agregar algunas declaraciones no válidas delante de esta función para eliminar el software a través de Kabbah.

La cadena llama "gh0st update", que se usa para actualizar. Si no desea actualizar en línea, elimine directamente el bloque de código donde se encuentra esta declaración jeje, de hecho, el proyecto de búsqueda lo reemplaza; esta cadena con otros caracteres Simplemente encadene ^_^, este método puede eliminar el software a través de Kingsoft al mismo tiempo.

El tercer paso, anti-kill del servidor

Kaba localiza la última información de configuración. Obviamente no es posible utilizar el método de agregar flores antes de escribir la información de configuración AAAAAA. escribe algo y podrás evitar matar el servidor.

¡La eliminación de Kaba está completa!

B. Software antivirus Avast

Vuelva a comprobar el último software antivirus de Avast, elimine install.exe y svchost.dll (es decir, elimine los archivos generados y los archivos de recursos). en ellos) ), y luego hacer que su código fuente sea anti-kill.

Ubicado en dos lugares: la cadena característica %02d/%02d/%02d y "SYSTEM\CurrentControlSet\Services\%s".

Solución:

1. El código de característica de svchost.dll se encuentra en la función SaveInfo(char *lpBuffer) en el archivo KeyboardManager.cpp. Cadena característica %02d/%02d/%02d, que es la fecha en la que vemos el keylog. Hay muchas formas de modificarla a [%d/%d/%d %d:%d:% d]. , compílelo y elimine el software a través de avast.

2. El código de función de instalación se encuentra en "SYSTEM\CurrentControlSet\Services\%s", y el archivo correspondiente es la función InstallService en install.cpp. Modifique el caso y compile para evitar la muerte.

5. Consejos para agregar código basura

El código basura debe moverse a la ubicación del código de característica y no debe ejecutarse en la pila. Dicho código es inútil. Puede agregar un bucle for, contar, realizar estadísticas simples y usar variables locales sin cambiar la lógica detrás de esto.

Método para agregar la tabla de salida:

Si desea eliminar la tabla de salida, puede agregar una función vacía al svchost.dll generado, pero el recurso debe modificarse una vez para De hecho, en cada compilación, agregamos la siguiente declaración al código fuente:

extern "C" __declspec(dllexport) bool JustTempFun();//Declaración

.... ..

extern "C " __declspec(dllexport) bool JustTempFun() //Implementación

{

return false

}

Después de la compilación, la tabla de salida se ha modificado y algunos programas antivirus pueden evitar que se elimine el código.

6. Modificación de la generación automática de 6to4ex.dll de gh0st

Vi a muchos usuarios del sitio web hacer preguntas sobre la generación automática de 6to4ex.dll. Algunos usuarios entusiastas del sitio web también expresaron sus propias opiniones. Si siento que las soluciones propuestas por algunas personas no son del todo correctas y pueden causar malentendidos a los novatos, las explicaré según mi propio entendimiento.

El servidor gh0st se inicia a través de svchost -netsvcs, por lo que el programa debe utilizar el servicio netsvcs. El servidor se genera en función de netsvcs, por lo que no se puede decir que la generación del servidor sea aleatoria. En resumen, básicamente está arreglado. Veamos el análisis a continuación.

Mire el método InstallService() en install.cpp Primero, recorra los elementos de servicio en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost. Después de encontrar un servicio, el programa toma el método de. reemplazar el servicio Elimine el servicio original y luego genere el elemento de servicio correspondiente + el archivo ex.dll para reemplazar el servicio original. El servicio 6to4 generalmente ocupa el primer lugar. Dirección IPv4 globalmente única. Esto permite que todo el sitio obtenga una conexión IPv6. Para la mayoría de las personas, este servicio está básicamente inactivo, por lo que nuestro programa reemplaza el servicio 6to4 y genera 6to4ex.dll en el directorio windows\system32\. cuando se inicie más tarde, si omite este servicio, Ias, Iprip y otros servicios se generarán en secuencia. Si no hay ningún servicio que pueda reemplazarse en el elemento netsvcs, el programa agregará un servicio por sí mismo y el nombre es. netsvcs_0x%d generado por el método AddsvchostService().

¿Entiendes que no me importa el nombre del servicio?

Esto no se puede decir que sea un problema técnico, pero pueden surgir pequeños problemas técnicos de aquí. No sé cómo otras personas han pasado el 360, pero creo que puedo darte un recordatorio. es el sistema predeterminado 360. Un servicio seguro definitivamente no será reportado como inseguro. Es mucho mejor reemplazar un sistema inactivo con un servicio seguro a través de 360.

Este artículo proviene de: China Hacker Alliance Forum. La dirección detallada de este artículo: /read.php? tid=255676