PRÁCTICA-INVERSA-JarvisOJ-3

Subir las escaleras

apk, colóquelo en el simulador y ejecútelo.
Se puede presionar el botón "Subir un piso". Cada vez que haga clic en, "Piso escalado" más 1 piso. El
botón "Subir para ver la BANDERA" no se puede presionar, debería ser " Subido "Cuando" piso "es igual a" piso para subir ", se puede presionar el botón para que se
plt-corriendo
abra el indicador jadx-gui. En com.ctf.test.ctf_100.MainActivity, la
lógica principal de la biblioteca ctf es estáticamente cargado . En el método onCreate, se quiere subir el suelo se establece como un número aleatorio. Cuando el suelo que ha sido escalada es mayor o igual que el piso para ser subido, se puede conseguir la bandera pulsando el botón de la bandera
plt-lógica
. Al comienzo del programa de la bandera, configure el botón de la bandera para que no se pueda presionar , y configúrelo como presionable después de que se cumplan las condiciones. Considere el programa de parche, Deje que el botón para ver la bandera al comienzo del programa se configure para que se pueda
presionar .Abra el apk con jeb para encontrar el código ensamblador correspondiente a la declaración de java.
Puede ver que al comienzo del método onCreate, v5 es 0, como en Button-> setClickable debajo del parámetro, configure el botón de la bandera del reloj para que no sea Cuando v5patch se establece en 1, el botón de la bandera del reloj está configurado para
plt-asm
poder presionar ApkToolBox para descompilar el apk al principio , abra CFF_100 \ smali \ com \ ctf \ test \ ctf_100 \ MainActivity smali, busque la ubicación correspondiente, modificar y guardar,
parche-plt
arrastre toda la carpeta CFF_100 a ApkToolBox y vuelva a compilar, obtenga una nueva apk
para ejecutar en el emulador, puede ver, puede hacer clic en el botón de la bandera para obtener la bandera directamente
bandera plt

Craqueo de contraseña de software-1

Para un programa MFC de 32 bits, primero use xspy para verificar la identificación del botón "Aceptar", que es 0001
softpwd-mfc
y luego verifique toda la ventana, sabiendo que la función de respuesta correspondiente al botón "Aceptar" es (0x0040) 1BB0.
softpwd-mfc
Abra el programa MFC y busque 1BB0 en la ventana de la función de la izquierda. Al llegar al
análisis de la función sub_401BB0 , podemos ver que la entrada y la matriz byte_5777F8 están XORed en el orden del índice, y el resultado se compara con el conocido Se verifica que
softpwd-sub_401BB0
los elementos de la matriz byte_5777F8 de entrada no se pueden obtener en el análisis estático, y se requiere el programa adjunto para depurar y
escribir XOR inverso. Calcular el script para obtener la bandera

res=[0x1B, 0x1C, 0x17, 0x46,
     0xF4, 0xFD, 0x20, 0x30,
     0xB7, 0x0C, 0x8E, 0x7E,
     0x78,0xDE]
byte_5777F8=[0x28, 0x57, 0x64, 0x6B, 0x93, 0x8F, 0x65, 0x51, 0xE3, 0x53,
  0xE4, 0x4E, 0x1A, 0xFF]
flag=""
for i in range(len(res)):
    flag+=chr(res[i]^byte_5777F8[i])
print(flag)
#3Ks-grEaT_j0b!

Clásico CrackMe2

exe, ingrese la contraseña e imprima una cadena de base64 para
verificar el shell cuando la contraseña se ingresa incorrectamente.Se encuentra que es un programa .Net, y hay una oración "no desempaquetar con: de4dot". No use de4dot para descomprimir.
Concha CC2
Use de4dot para descomprimir, pero descomprima después de que el programa no se ejecute,
dnSpy abra el programa original, porque no hay descomprimido, habrá algunos caracteres que no entienden el significado, luego puede abrir otro dnSpy abrir desempaquetar antes, en el punto de vista
brillante en el brillo y vi que presionar Después del botón "GETFLAG", venga a este lugar para juzgar que
se ingresa texto, y text2 es el contenido devuelto después de
CC2-lógica
pasar el texto ingresado a un método de "Wm @@ 9OrPgw \ u0020d / p? i, N> l h @ Y!", Y luego juzgue si el texto está vacío y si text2 es el mismo que el conocido. Observe el método llamado "Wm @@ 9OrPgw \ u0020d / p? i, N> l h @ Y! ", y descubrió que los parámetros entrantes Cifrado en modo AES.ECB, la matriz denominada bytes se utiliza como clave de cifrado Clave, y el texto cifrado se codifica con base64 y luego Después de la
CC2-AES
depuración, puede saber que la clave de cifrado La clave es "pctf2016pctf2016pctf2016pctf2016"
CC2-clave
text2 La cadena que se va a comparar es "x / nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk ="
Cifrado CC2
Escriba el script AES para obtener la bandera

from Crypto.Cipher import AES
import base64
key="pctf2016pctf2016pctf2016pctf2016"
cipher="x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk="
cipher=base64.b64decode(cipher)
aes=AES.new(key,AES.MODE_ECB)
print(aes.decrypt(cipher))
#PCTF{Dot_Net_UnPack3r_yoo}

Smali

Archivo .smali, abrir jadx-jui La
lógica principal es usar la clave conocida y el texto cifrado para descifrar el AES en modo ECB y
pequeña lógica
escribir el script AES descifrado para obtener la bandera

from Crypto.Cipher import AES
import base64
key="cGhyYWNrICBjdGYgMjAxNg=="
key=base64.b64decode(key)
cipher="sSNnx1UKbYrA1+MOrdtDTA=="
cipher=base64.b64decode(cipher)
aes=AES.new(key,AES.MODE_ECB)
print(aes.decrypt(cipher))
#PCTF{Sm4liRiver}

Supongo que te gusta

Origin blog.csdn.net/weixin_45582916/article/details/114156003
Recomendado
Clasificación