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
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
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))
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
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
(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
(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
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ó.
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: