def
xor_reverse(data, key):
for
i
in
range
(
len
(data)):
data[i] ^
=
key
return
data
def
rol_reverse(data, offset):
tmp_arr
=
[]
for
i
in
range
(
4
):
tmp_arr.append((data[i
*
2
+
1
] <<
32
)
+
data[i
*
2
])
for
i
in
range
(
4
):
tmp_arr[i]
=
((tmp_arr[i] >> offset[i]) | ((tmp_arr[i] << (
64
-
offset[i])) &
0xffffffffffffffff
)) &
0xffffffffffffffff
for
i
in
range
(
4
):
data[
2
*
i]
=
tmp_arr[i] &
0xffffffff
data[
2
*
i
+
1
]
=
tmp_arr[i] >>
32
return
data
def
deffusion_reverse(data, factor):
for
i
in
range
(
len
(data)):
tmp
=
data[i]
data[i]
=
(data[i]
-
factor) &
0xffffffff
factor ^
=
tmp
return
data
def
main():
cmp_data
=
[
0xE20F4FAA
,
0x549941E4
,
0x7E842B2C
,
0x788B8FBC
,
0x5E8873D3
,
0x708547AE
,
0xCE09B331
,
0xCA0DF513
]
final_key
=
0x4a827704
rol_offset
=
[
0xc
,
0x22
,
0x38
,
0xe
]
diffusion_factor
=
0x3CA7259D
flag_arr
=
xor_reverse(cmp_data, final_key)
flag_arr
=
rol_reverse(flag_arr, rol_offset)
flag_arr
=
deffusion_reverse(flag_arr, diffusion_factor)
print
(
'DASCTF{'
, end
=
'')
for
i
in
flag_arr:
print
(
int
.to_bytes(i,
4
,
'little'
).decode(),end
=
'')
print
(
'}'
)
if
__name__
=
=
"__main__"
:
main()