Cómo detectar si la API del programa ha sido enganchadaLa tecnología de interceptación de API es una habilidad básica importante para los programadores. Esta habilidad hace posible escribir ciertas herramientas y software y puede mejorar en gran medida nuestra capacidad para controlar aplicaciones de terceros. Sin embargo, la información técnica actual sobre la interceptación de API a menudo se limita a una discusión de los principios y no está clara sobre cómo compilar específicamente un programa de interceptación de API. Después de todo, para los programadores, aprender esta tecnología requiere mucho esfuerzo. Si se les permite contribuir libremente, puede que no sea realista. Otro factor es la competencia. Si una persona más aprende esta tecnología, habrá más competencia. Tomé muchos desvíos al dominar esta tecnología. Si tuviera información detallada, estos desvíos innecesarios podrían evitarse por completo. Este es el propósito de redactar esta información técnica. Este programa es un programa de muestra que demuestra cómo interceptar llamadas API. Después de comenzar a interceptar CreateProcess, cuando el usuario ejecuta el programa a través del explorador, aparecerá un cuadro de diálogo que muestra qué programa ejecutó el usuario. Después de detener la interceptación, el cuadro de diálogo no aparecerá cuando el usuario ejecute el programa. El tutorial que viene con este programa es una versión no registrada, si necesitas más información regístrate a través de la tienda online. La tasa de inscripción es de 320 RMB. Consulte la tienda en línea para conocer el precio final. Esto despertó mi curiosidad. ¿Este software utiliza alguna tecnología nueva y sorprendente? ¿Vale tanto dinero? Tenía que comprobarlo, así que descargué el software y comencé a estudiarlo. Inesperadamente, la tecnología que utilizó no sólo carecía de innovación, sino que también tenía grandes limitaciones. De ahí este artículo, y espero que los expertos no se rían de él. Puede encontrar la versión original de este programa usted mismo, se llama "Tutorial de interceptación de API". Después de iniciar el programa, presione el botón que intercepta el proceso creado y al ejecutar cualquier programa aparecerá la ruta al programa en ejecución. Una pequeña comprensión de apihook lo aclarará. Por lo general, hay tres formas de conectar la API en ring3. Una es modificar la tabla iat del programa para que la llamada a la API salte a su propia función en lugar de ir a la entrada de la API. El segundo es modificar el código de máquina de la entrada de la API. El tercero es crear un hilo remoto para lograr CreateRemoteThread. Entonces, ¿qué técnicas avanzadas se utilizan en este tutorial? Ejecútelo una vez primero, presione el botón y el explorador definitivamente mostrará la ruta del programa. En este momento, si usa la clase icesword para ver el módulo del programa y el módulo del administrador de recursos, encontrará que hay un módulo InterceptDll.dll en el administrador de recursos. Cuando desinstalemos este dll, se producirá el efecto de interceptación. haberse ido. Parece que el núcleo de este programa no es el programa de inicio, sino este dll. Ahora, echemos un vistazo a lo que hace este InterceptDll.dll. Primero, use la herramienta VC DUMPBIN para exportar la tabla de funciones de exportación de DLL a un archivo de definición (.DEF) DUMPBIN InterceptDll.dll /EXPROTS /OUT: InterceptDll.def Solicitud de número de serie Nombre RVA 1 0 00001230 InstallHook 2 1 00001270 UninstallHook Solo hay dos exportaciones aquí Puede saberlo mirando los nombres de las funciones. Uno es el enlace de instalación y el otro es el enlace de desinstalación. Llamémoslo y veamos que ni siquiera requiere parámetros. Simplemente llame a InstallHook para insertar InterceptDll.dll en el administrador de recursos y use UninstallHook para desinstalar el gancho. Parece que no necesitamos analizar su archivo exe porque hay algo útil en este dll. Entonces, ¿cómo analizar este archivo dll? Si usa ida directamente para ver el código estático, puede ver que hay funciones de enlace como vivirtualalloc y setwindowshookexa en la dll. Pero no existe una función como CreateHook.
Sin embargo, no existe una función CreateRemoteThread, por lo que básicamente podemos descartar el tercer método. Es más probable que modifique el iat o el recuento de bytes. Entonces, ¿qué métodos se utilizaron y cómo se logró? Puedo saberlo simplemente mirando el código fuente estáticamente, pero no tengo esa capacidad. ¿Qué debe hacer si resulta problemático depurar el administrador de recursos en tiempo real? De hecho, el método es muy sencillo, basta con cambiar el nombre de un archivo exe para que tenga el mismo nombre que el explorador. A este tipo no le importa si eres el verdadero Li Kui o el falso Li Gui, ¡los insertará todos! Primero escribí un programa exe muy simple con solo un botón, que cerró directamente el pequeño programa que iniciaba el Bloc de notas con createprocess y luego le renombró explorador. Después de ejecutarlo, deje que el programa intercepte, luego use icesword para ver el módulo e introduzca InterceptDll.dll en el programa que escribí. Bien, ahora entremos en InterceptDll.dll y veamos qué hace. Yo uso olldbg, pero también puedo usar windbg. Estoy acostumbrado a usar od. Primero, adjunte este pequeño programa de administración de recursos que escribí yo mismo, luego establezca un punto de interrupción en el proceso de creación, presione el botón para iniciar el Bloc de notas y siga el punto de interrupción paso a paso. Reimpreso únicamente como referencia, los derechos de autor pertenecen al autor original. Te deseo un feliz día y por favor acéptalo con satisfacción