2020 Netding Cup Xuanwu Group Seguridad móvil WP

PD: El título me lo envió otra persona y no estoy calificado para participar en este concurso.

vulcrack

Primero abra jadx y descubra que es un programa de shell
Inserte la descripción de la imagen aquí

Es fácil ver que libjiabu.so y el nombre del paquete son un shell 360. Aquí usamos frida-dexDump, que es popular en los principales foros, para descomprimir .

Razón por la que este tema gente muy enferma, abrí con el emulador de Android no puede ejecutar el tiempo, la sensación puede ser detectar el simulador de presencia 360 shell, por lo que no solo puedo usar las instrucciones de la máquina real, y luego mi máquina real de ganso más picante Chicken, comenzando frida a menudo reportó errores, e incluso consideró el bombardeo manual, y finalmente terminó el bombardeo después de un largo tiempo de lanzamiento.

Proceso de bombardeo

Inicie frida_server:

cd /data/local/tmp
./frida_server

Reenvío de puertos:

adb forward tcp:27042 tcp:27042

Luego ejecute apk, ejecute main.py

python main.py

Dex de análisis

Después de obtener la dex, verifique y encuentre la dirección de cifrado principal
Inserte la descripción de la imagen aquí

La lógica después de desembalar es muy simple.

(1) Decodificación Base64 de keyFirst y keySecond,

(2) Pasado al método de comunicación para algún procesamiento

Descifrado de la secuencia de comandos de Python:

import base64

keyFirst = "Zm1jan85NztBN0c0NjJIOzJGLzc8STk0OTZFSDE="
keySecond = "QTpISTlFNEkxRTY8fQ=="
flag = []
First=base64.b64decode(keyFirst)
Second=base64.b64decode(keySecond)
for i in range(len(First)):
    flag.append(First[i] - (i % 8))
for i in range(len(Second)):
    flag.append(Second[i] - (i % 4))
print(bytes(flag))

Inserte la descripción de la imagen aquí

La bandera descifrada es:
bandera {414A6E12-B42E-48D3-95CE-A9FF9D2F1D49}

para resumir

La principal dificultad de esta pregunta es desempaquetar. Usar herramientas para desempaquetar simplifica enormemente este paso. En el futuro, estudiaremos algunos procesos de desempaquetado y escribiremos un plan de desempaquetado manual.

Java

Primero abra el análisis jadx, como su nombre indica, todo el código está en la capa java

Inserte la descripción de la imagen aquí

análisis

La lógica de cifrado principal se almacena en el método a:

(1) Primero inicialice la matriz bArr

(2) Realice una operación de cifrado AES en las cadenas ayb

Inserte la descripción de la imagen aquí

(3) Llame al método a, primero XOR la ​​cadena cifrada por aes con el XOR 22 bit a bit, y luego realice la operación XOR bit a bit con la matriz c en la clase c

Inserte la descripción de la imagen aquí

(4) Realice la codificación base64 en la cadena de caracteres después de XOR y compárela con la cadena de caracteres b

Aquí hay un pequeño hoyo, es decir, hay un lugar en el código del programa que reemplaza un carácter en la cadena ca

Inserte la descripción de la imagen aquí

Siempre informé un error cuando escribí el script al principio
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 3: invalid continuation byte, y finalmente encontré este lugar de reemplazo a través de la depuración dinámica para verificar la lógica específica.

secuencia de comandos de Python

import base64
from Crypto.Cipher import AES

b = "VsBDJCvuhD65/+sL+Hlf587nWuIa2MPcqZaq7GMVWI0Vx8l9R42PXWbhCRftoFB3"

c = [214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 43, 103, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4,195, 43, 103, 170, 68, 19, 38, 73, 134, 43, 103, 153, 156, 66, 80, 244, 145, 80, 103, 239, 152, 122, 98, 50, 214]

x = base64.b64decode(b)

y = []
for i in range(len(x)):
    y.append(x[i] ^ 22 ^ c[i])
y = bytes(y)

aeskey = "aes_check_key!@#".replace('e','o').encode("utf-8")
cipher = AES.new(aeskey, AES.MODE_ECB)
z = cipher.decrypt(y)
flag=str(z,encoding="utf-8")
print(flag)

El resultado de salida es:
bandera {67587AAF-C20A-4B6D-991B-A40FD3C2098E} , el resultado de la prueba pasó.

Inserte la descripción de la imagen aquí

para resumir

Esta pregunta es relativamente simple. Solo recibí esta pregunta más tarde. Esta pregunta es toda lógica Java. El único problema es el reemplazo. Lo resolví con la ayuda de la depuración dinámica.

Bienvenido a seguir la cuenta oficial para obtener más información:

Supongo que te gusta

Origin blog.csdn.net/weixin_43632667/article/details/106389279
Recomendado
Clasificación