Práctica práctica sobre análisis inverso de una APP

El siguiente es un proceso de análisis inverso de una aplicación, principalmente para aprender mejor las ideas y soluciones del proceso de análisis, de modo que la función de la aplicación pueda analizarse rápidamente en el proceso posterior.

detección de raíz

Instale el paquete de la aplicación en un teléfono rooteado y ábralo. El resultado será el siguiente: Se debe detectar el root.

Utilice jadx para cargar APK, palabra clave de búsqueda global: dispositivo actual detectado

Se ha buscado la información de esta cadena. Su ID es roast_app_fail. Busque de nuevo este ID para localizar dónde se hace referencia a esta cadena.

Se encontraron muchas llamadas, principalmente en los dos archivos MainActivity y StartActivity. Debido a que estos dos archivos suelen ser las dos primeras clases iniciadas en la aplicación, muchas detecciones se colocarán en la fase de inicio para implementar las llamadas.

Observe que cada llamada tiene un sufijo, una coma, un signo de exclamación, etc. diferente. La cadena del mensaje es una coma, así que seleccione la que tenga un sufijo de coma para ingresar.

Al ver que se llama a la función DeviceUtils.a (), si devuelve verdadero, aparecerá una cadena de información de detección y luego saldrá. El siguiente paso es analizar cómo se implementa la función a().

El código anterior determina si el entorno en ejecución está rooteado comprobando los archivos. La forma convencional de detectar si está rooteado es intentar abrir los archivos su en el directorio /system. Si se puede abrir, significa que tiene permisos de root. .

Puede usar el administrador de MT para abrir el paquete APK, buscar la función a en la clase DeviceUtils y modificar el código pequeño para que la función a devuelva falso directamente sin detección (también puede usar androidkiller, jeb, etc.).

Simplemente modifique el valor de retorno para devolver v0. Vuelva a empaquetar e instalar. La cadena de texto volvió a aparecer, pero el sufijo se convirtió en exclamación.

¡Número!

Continúe buscando información de cadena y localice la ubicación donde aparece este signo de exclamación:

Ubique debajo de la lógica DeviceUtils.AntiRoot(). Esta protección de seguridad encubierta realmente hace que los crackers se sientan extasiados. A continuación, ubique y analice la función AntiRoot y descubra que es una función nativa y la cargada también es mi aplicación: busque globalmente la palabra clave AntiRoot en so a través de ida

Se descubre que el archivo su aún se está verificando. Si check_su_files() detecta que es root, devolverá "sí". Si no, devolverá "no". Esto corresponde a la detección en el código java.

A continuación, puede utilizar directamente el administrador de MT para modificar el código de Java y cambiar la comparación "sí" a "joder", de esta manera, incluso si se detecta la raíz, la detección y comparación de la capa de Java fallarán.

Se omite toda la detección de raíz anterior. La aplicación se puede abrir normalmente. Pero cuando lo abro, se queda en blanco.

Esta situación suele deberse a que no se obtienen los datos de devolución correctos.

Después de abrir la aplicación, definitivamente solicitará varios datos del backend. Si los datos son anormales, no se mostrarán normalmente. Es hora de coger el paquete y echarle un vistazo.

Detección de proxy

Abra el agente móvil e inicie la herramienta Fiddler para capturar paquetes. Como resultado, la aplicación no puede iniciarse normalmente nuevamente. Esta vez aparece este cuadro de diálogo:

La aplicación temía que él no supiera que estaba probando al agente, por lo que le dio un recordatorio muy cálido. Luego continúe buscando análisis de cadenas.

Al ver que la identificación de la cadena es tostado_api_proxy_fail, busque la referencia:

El proceso de detección de raíces es básicamente el mismo. Pero llama a una función b para detectar si hay un agente, analicemos la función b:

La lógica de la detección de proxy es garantizar que http.proxyHost (dirección de proxy) sea una cadena vacía o que http.proxyPort (puerto de proxy) sea -1.

A continuación, simplemente modifique el código Java directamente para que siempre devuelva falso. Después de esto, podrás abrir con éxito la aplicación y capturar el paquete de datos:

Sin embargo, el interior de la aplicación todavía está completamente blanco. Al observar los datos devueltos, encontramos que están cifrados: a continuación, analizaremos el descifrado de los datos.

Descifrado de datos

Generalmente, el cliente de la aplicación utilizará okhttp como cliente http para enviar y recibir solicitudes. (Actualmente también existe cronet como cliente, pero solo lo utilizan los grandes fabricantes y la mayoría de ellos están personalizados en okhttp)

La forma en que funciona okhttp es una cadena de responsabilidad, también llamada transmisión por canalización (pipelien). Cada enlace maneja algunas cosas. Por ejemplo, en la etapa de envío, la primera canalización es agregar información básica, como la identificación del dispositivo, la marca de tiempo, etc. La segunda canalización es calcular el valor de la firma y la tercera canalización es cifrar los datos enviados y luego enviarlos.

Al analizar okhttp en la aplicación, se encontró que estaba ofuscado y protegido:

La creación de okhttp se realiza en la clase okhttpclient. La ofuscación generalmente solo puede confundir nombres de funciones y nombres de clases, pero no puede confundir la implementación específica de la función, incluidas algunas cadenas especiales. Puede comenzar con la cadena para encontrar okhttpclient.

Descarga una copia del código fuente de okhttp y comprueba las características de la clase okhttpclient:

Dirección del código fuente:

https://github.com/square/okhttp

Se descubrió que hay tres cadenas consecutivas "tiempo de espera" en el generador interno, que no se pueden confundir. Buscamos globalmente "timeout" en jadx:

Haga clic y eche un vistazo y descubra que la estructura es exactamente la misma que la de okhttpclient, por lo que puede juzgar que esta es la clase okhttpclient.

Al observar la referencia, también encontramos la ubicación donde la APLICACIÓN creó okhttpclient:

Otra característica del cliente en okhttp es la configuración de tiempos de espera de lectura y escritura. Desde TimeUnit, podemos ver que esto está configurando los tiempos de espera de lectura y escritura de las solicitudes http.

Al mismo tiempo, ve una serie de funciones .a en la parte posterior, que agregan líneas una por una. (Se llama interceptor en okhttp, pero personalmente creo que es esencialmente una tubería).

Vea estas tuberías respectivamente, una es agregar encabezados de solicitud:

Existe otro relacionado con el tratamiento de datos:

Vea la respuesta, la cadena del cuerpo y d_key_tres adentro. ¿Qué está haciendo esto? ¿Por qué aparecen la clave secreta y el cuerpo de retorno? , haga clic para ver la función f5865a.a:

Vi las características de contraseña, iv, SecretKeySpec, Cipher y doFinal. Obviamente está haciendo un descifrado aes. Al usar el descifrado AES, el modo es CBC y el método de relleno es PKCS5padding.

¿Usar frida para conectar esta función y ver cuál es el valor descifrado?

Fuerce directamente la clave secreta correcta en la función de descifrado y finalmente se completará el descifrado.

Los datos devueltos muestran "Error en la verificación de firma". El siguiente paso es analizar la función de verificación de firma.

Verificación de firma

Debido a que la verificación de la firma falló, no se obtuvieron los datos de declaración correctos. Es necesario analizar cómo se calcula la firma.

Vi el campo de signo en el encabezado de la solicitud http:

Generalmente, las firmas se denominan sign, sig, authcode, sec, etc. Por ejemplo, cierto sonido lleva el nombre de un dios de la mitología griega.

jadx busca "signo" globalmente. (Preste atención al uso de signos entre comillas dobles para buscar, lo que mejorará la eficiencia de la búsqueda. Porque generalmente, cuando se genera un signo, el signo se usará como clave y se colocará en un mapa. Y la clave es una Cadena, por lo que debe haber caracteres donde el signo se genera en el código cadena "signo")

Analice el proceso de generación de a7, porque el signo proviene de la asignación de a7.

Primero, se agrega el parámetro ts como marca de tiempo. Luego conecte todos los parámetros de un extremo a otro. Luego agregue un sufijo similar a la clave aes. Luego calcule a2 mediante otra función a y luego haga que a2 esté todo en minúsculas. Este es el proceso de generación de firma.

Eche un vistazo a otra función a:

está calculando el resumen MD5. Entonces el problema radica en el sufijo similar a la clave secreta.

De hecho, debido a que la firma es incorrecta, se devuelve el sufijo incorrecto, pero se usa la función aaxx, que es diferente de la función ddmm utilizada en aes.

De la misma forma se devolverá error si la firma es incorrecta y se devolverá el sufijo real si es correcto.

¿Ves cómo se realiza la verificación de firmas localmente?

Obtenga la firma mediante reflexión, luego calcule el MD5 y compárelo con el SIGN_MD5 correcto codificado.

En este caso, enganchamos la función aaxx para que devuelva el valor correcto:

Después de ejecutar nuevamente el script frida, se obtuvieron exitosamente los datos correctos:

Al mismo tiempo, la interfaz de la aplicación también es normal, pero muestra que ha caducado :)

Evitar restricciones

Se omitió con éxito la detección de raíz, la detección de proxy y la verificación de firma. Pero cada dispositivo solo tiene 2 horas de oportunidad gratuita.Si queremos tener sexo gratis ¿qué debemos hacer?

Por lo general, la aplicación rastreará el dispositivo a través de un identificador de dispositivo único, es decir, la tecnología de huellas dactilares del dispositivo. Deviceid puede obtener directamente el identificador único del dispositivo Android (deshabilitado en versiones superiores de Android), también puede obtener la dirección MAC del dispositivo o puede generar un UUID o una cadena aleatoria y ocultarlo en una esquina del dispositivo. Cuando se reinstale el apk, primero verifique si hay algún archivo relacionado oculto aquí antes. Si lo hay, léalo directamente como ID del dispositivo. Si no, cree uno. Esto garantizará que aún se pueda rastrear el dispositivo antes y después de eliminar la apk. Por supuesto, si puede encontrar este archivo y eliminarlo, la aplicación pensará que es un dispositivo nuevo la próxima vez que lo instale.

Primero busque dónde está el ID del dispositivo y busque el ID del dispositivo globalmente:

Encontré muchos lugares, incluso desde la aplicación y desde la tarjeta SD, seguidos de una función relacionada con la tarjeta SD:

Vi la identificación del dispositivo leída en el archivo f. Mire la ruta del archivo f:

Efectivamente, hay un archivo debajo del archivo de alarma en la tarjeta SD. Después de abrirlo, es de hecho el ID del dispositivo utilizado al enviar datos.

Elimine este archivo, reinicie y descubra que el ID del dispositivo aún no ha cambiado. ¿Está almacenado en otro lugar?

Observe la aplicación de arriba:

Vea que el ID del dispositivo se obtiene de la función B, mire la función B:

Resultó ser tomado de preferencias compartidas. SharedPreferences es una forma de almacenar datos internamente en la aplicación, mientras que la tarjeta SD es un método de almacenamiento externo.

Abrimos SharedPreferences y vimos customdeviceid:

¿Ves cómo se obtuvo la identificación de su dispositivo?

Primero, se obtiene una cadena aleatoria a2 de 10 dígitos a través de a (10),

Entonces la identificación del dispositivo se genera aleatoriamente. Cada nuevo dispositivo tiene 2 horas de tiempo libre, que son 7200 segundos. Consideramos regenerar la identificación del dispositivo cada 7000 segundos, entonces, ¿podemos tener recargas de tazas ilimitadas?

Mire dónde obtiene la aplicación el ID del dispositivo y lo envía al servidor. Observe que una de las canalizaciones okhttp anteriores agrega el encabezado http:

Vea que el ID del dispositivo se obtiene mediante el método a(). Ver el método a()

Finalmente, se devuelve una cadena. De hecho no es necesario seguir siguiéndolo, no es más que obtenerlo de la APP o de la tarjeta sd. Simplemente lo enganchamos aquí.

En teoría, solo necesita escribir un algoritmo de generación de cadenas aleatorias para garantizar que permanezca constante dentro de 2 horas. Aquí uso la marca de tiempo dividida por 7000 para obtener:

Escriba una función y luego use Android Studio para compilar el código pequeño. Simplemente inserte la smalidaima correspondiente antes del retorno de la función a():

Código pequeño para identificación aleatoria del dispositivo:

Insértalo antes de que regrese la función a(). De esta manera, usaremos un nuevo ID de dispositivo cada dos horas. Para el servidor, parece que un nuevo dispositivo ha instalado su aplicación, y luego puedes usarlo durante otras dos horas de tiempo libre. .

Enlace original

https://bbs.kanxue.com/thread-275423.htm

Cómo aprender sobre piratería y seguridad de redes

Siempre que le guste mi artículo de hoy, compartiré con usted mis materiales de aprendizaje sobre seguridad de redes privadas de forma gratuita. Venga y vea lo que hay disponible.

1. Hoja de ruta de aprendizaje

Hay muchas cosas que aprender sobre ataque y defensa. He anotado las cosas específicas que necesitas aprender en la hoja de ruta anterior. Si puedes completarlas, no tendrás problemas para conseguir un trabajo o aceptar un trabajo privado. .

2. Vídeotutorial

Aunque hay muchos recursos de aprendizaje en Internet, básicamente están incompletos. Este es un video tutorial de seguridad en Internet que grabé yo mismo. Lo acompaño con explicaciones en video para cada punto de conocimiento en la hoja de ruta anterior.

El contenido cubre el estudio de las leyes de seguridad de la red, las operaciones de seguridad de la red y otras evaluaciones de seguridad, conceptos básicos de pruebas de penetración, explicaciones detalladas de vulnerabilidades, conocimientos informáticos básicos, etc. Todos ellos son contenidos de aprendizaje imprescindibles para comenzar con la seguridad de la red.

(Todos están empaquetados en una sola pieza y no se pueden ampliar uno por uno. Hay más de 300 episodios en total)

Debido al espacio limitado, sólo se muestra parte de la información, es necesario hacer clic en el siguiente enlace para obtenerla.

Paquete de regalo CSDN: intercambio gratuito "Introducción a la seguridad de redes y piratas informáticos y paquete de recursos de aprendizaje avanzado"

3. Documentos técnicos y libros electrónicos.

También compilé los documentos técnicos yo mismo, incluida mi experiencia y puntos técnicos en la participación en operaciones de seguridad de red a gran escala, CTF y excavación de vulnerabilidades SRC. Hay más de 200 libros electrónicos. Debido a la sensibilidad del contenido, los No mostrarlos uno por uno.

Debido al espacio limitado, sólo se muestra parte de la información, es necesario hacer clic en el siguiente enlace para obtenerla.

Paquete de regalo CSDN: intercambio gratuito "Introducción a la seguridad de redes y piratas informáticos y paquete de recursos de aprendizaje avanzado"

4. Kit de herramientas, preguntas de la entrevista y código fuente.

"Si quieres hacer bien tu trabajo, primero debes perfeccionar tus herramientas." He resumido docenas de las herramientas de piratería más populares para todos. El alcance de la cobertura se centra principalmente en la recopilación de información, herramientas de piratería de Android, herramientas de automatización, phishing, etc. Los estudiantes interesados ​​no deben perdérselo.

También está el código fuente del caso y el kit de herramientas correspondiente mencionado en mi vídeo, que puedes retirar si es necesario.

Debido al espacio limitado, sólo se muestra parte de la información, es necesario hacer clic en el siguiente enlace para obtenerla.

Paquete de regalo CSDN: intercambio gratuito "Introducción a la seguridad de redes y piratas informáticos y paquete de recursos de aprendizaje avanzado"

Finalmente, aquí están las preguntas de la entrevista sobre seguridad de redes que he recopilado durante los últimos años. Si está buscando trabajo en seguridad de redes, definitivamente lo ayudarán mucho.

Estas preguntas se encuentran a menudo al entrevistar a Sangfor, Qi Anxin, Tencent u otras empresas importantes. Si tiene buenas preguntas o buenas ideas, compártalas.

Análisis de referencia: sitio web oficial de Sangfor, sitio web oficial de Qi'anxin, Freebuf, csdn, etc.

Características del contenido: Organización clara y representación gráfica para facilitar su comprensión.

Resumen de contenido: incluye intranet, sistema operativo, protocolo, pruebas de penetración, servicio de seguridad, vulnerabilidad, inyección, XSS, CSRF, SSRF, carga de archivos, descarga de archivos, inclusión de archivos, XXE, vulnerabilidad lógica, herramientas, SQLmap, NMAP, BP, MSF…

Debido al espacio limitado, sólo se muestra parte de la información, es necesario hacer clic en el siguiente enlace para obtenerla.

Paquete de regalo CSDN: intercambio gratuito "Introducción a la seguridad de redes y piratas informáticos y paquete de recursos de aprendizaje avanzado"

Supongo que te gusta

Origin blog.csdn.net/Python_0011/article/details/133603606
Recomendado
Clasificación