problema recurrente
Cuando he descargado este tema es que falta un archivo DLL, el programa, observar el funcionamiento después de la reunión en la siguiente.
Introduzca la cadena de autorización necesario. AIF arrastró a la vista, ver la cadena, se encontró herramienta de código de depuración limitada puesto en libertad.
Encontrar el primer punto de entrada. Necesidad de introducir una operación válida señal de entrada poco, escribir un guión a la grieta, de la siguiente manera:
str = [0x52, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x48, 0x6f, 0x70, 0x70, 0x65, 0x72, 0x21]
arr = [17, 8, 6, 10, 15, 20, 42, 59, 47, 3, 47, 4, 16, 72, 62, 0, 7, 16]
flag = ''
for i in range(18):
for j in range(127):
v43 = ~(j & str[i % 14]) & (j | str[i % 14])
if v43 == arr[i]:
flag += chr(j)
print(flag)
Obtener el resultado:
Abra el programa de verificación de encontrar la salida.
A continuación, mirar hacia abajo, hay un segmento de datos de texto de código encontrado, sin instrucción se resuelve.
Análisis utilizando AIF ver ninguna resolución tiene éxito, las personas deben estar cifrados. Con una comprobación cruzada de referencia donde llamó una vez el código. No se encontró a llamar el período de recopilación de datos, la interpretación es una función. Aquí pseudo-código para encontrar una función que los datos cifrados.
Esta función llama a una win32api, y la descripción dada en el Microsoft MSDN, este efecto es especificar ciertas áreas de protección de acceso API proporciona, a continuación, seguido por la función del área protegida y la entrada al cifrado XOR.
Tan sólo hay que descifrar el área de protección de datos de los datos originales se pueden obtener mediante el análisis de la AIF del área protegida, que es las instrucciones de montaje.
Después de la secuencia de comandos de referencia Gangster encontró IDAPython puede ser operado directamente con la API, es demasiado conveniente. Guión de la siguiente manera (se debe ejecutar en AIF):
input =[67, 97, 117, 99, 97, 115, 117, 115, 64, 115, 95, 97, 98, 105, 108, 105, 116, 121]
for i in range(1045):
address = 0x10040164D + i
byte = get_bytes(address, 1)#IDApythonAPI,作用是获取指定地址的指定字节数
byte = ord(byte) ^ input[i%18]
patch_byte(address, byte)#IDApythonAPI,更改指定地址的字节为byte
Análisis del segmento de datos descifrados, y crear una función para ver pseudo-código.
El cuadro rojo para hacer una cosa similar, por primera vez y cuando la misma entrada. Inversa puede escribir un script para crack, de la siguiente manera:
data = [
2007666,
2125764,
1909251,
2027349,
2421009,
1653372,
2047032,
2184813,
2302911,
2263545,
1909251,
2165130,
1968300,
2243862,
2066715,
2322594,
1987983,
2243862,
1869885,
2066715,
2263545,
1869885,
964467,
944784,
944784,
944784,
728271,
1869885,
2263545,
2283228,
2243862,
2184813,
2165130,
2027349,
1987983,
2243862,
1869885,
2283228,
2047032,
1909251,
2165130,
1869885,
2401326,
1987983,
2243862,
2184813,
885735,
2184813,
2165130,
1987983,
2460375]
v61 = 0x4CE3
v62 = 0x8000000B
flag = ''
for i in range(51):
for j in range(127):
v60 = v61 * j % v62
if v60 == data[i]:
flag += chr(j)
print(flag)
Ejecutar obtener la bandera
bandera {Thousandriver_is_1000% _stronger_than_zero-uno}