using namespace std;
unsigned char flag[
50
]
=
{
0
};
unsigned
int
key[]
=
{
0x0
,
0xf26b8303
,
0xe13b70f7
,
0x1350f3f4
,
0xc79a971f
,
0x35f1141c
,
0x26a1e7e8
,
0xd4ca64eb
,
0x8ad958cf
,
0x78b2dbcc
,
0x6be22838
,
0x9989ab3b
,
0x4d43cfd0
,
0xbf284cd3
,
0xac78bf27
,
0x5e133c24
,
0x105ec76f
,
0xe235446c
,
0xf165b798
,
0x30e349b
,
0xd7c45070
,
0x25afd373
,
0x36ff2087
,
0xc494a384
,
0x9a879fa0
,
0x68ec1ca3
,
0x7bbcef57
,
0x89d76c54
,
0x5d1d08bf
,
0xaf768bbc
,
0xbc267848
,
0x4e4dfb4b
,
0x20bd8ede
,
0xd2d60ddd
,
0xc186fe29
,
0x33ed7d2a
,
0xe72719c1
,
0x154c9ac2
,
0x61c6936
,
0xf477ea35
,
0xaa64d611
,
0x580f5512
,
0x4b5fa6e6
,
0xb93425e5
,
0x6dfe410e
,
0x9f95c20d
,
0x8cc531f9
,
0x7eaeb2fa
,
0x30e349b1
,
0xc288cab2
,
0xd1d83946
,
0x23b3ba45
,
0xf779deae
,
0x5125dad
,
0x1642ae59
,
0xe4292d5a
,
0xba3a117e
,
0x4851927d
,
0x5b016189
,
0xa96ae28a
,
0x7da08661
,
0x8fcb0562
,
0x9c9bf696
,
0x6ef07595
,
0x417b1dbc
,
0xb3109ebf
,
0xa0406d4b
,
0x522bee48
,
0x86e18aa3
,
0x748a09a0
,
0x67dafa54
,
0x95b17957
,
0xcba24573
,
0x39c9c670
,
0x2a993584
,
0xd8f2b687
,
0xc38d26c
,
0xfe53516f
,
0xed03a29b
,
0x1f682198
,
0x5125dad3
,
0xa34e59d0
,
0xb01eaa24
,
0x42752927
,
0x96bf4dcc
,
0x64d4cecf
,
0x77843d3b
,
0x85efbe38
,
0xdbfc821c
,
0x2997011f
,
0x3ac7f2eb
,
0xc8ac71e8
,
0x1c661503
,
0xee0d9600
,
0xfd5d65f4
,
0xf36e6f7
,
0x61c69362
,
0x93ad1061
,
0x80fde395
,
0x72966096
,
0xa65c047d
,
0x5437877e
,
0x4767748a
,
0xb50cf789
,
0xeb1fcbad
,
0x197448ae
,
0xa24bb5a
,
0xf84f3859
,
0x2c855cb2
,
0xdeeedfb1
,
0xcdbe2c45
,
0x3fd5af46
,
0x7198540d
,
0x83f3d70e
,
0x90a324fa
,
0x62c8a7f9
,
0xb602c312
,
0x44694011
,
0x5739b3e5
,
0xa55230e6
,
0xfb410cc2
,
0x92a8fc1
,
0x1a7a7c35
,
0xe811ff36
,
0x3cdb9bdd
,
0xceb018de
,
0xdde0eb2a
,
0x2f8b6829
,
0x82f63b78
,
0x709db87b
,
0x63cd4b8f
,
0x91a6c88c
,
0x456cac67
,
0xb7072f64
,
0xa457dc90
,
0x563c5f93
,
0x82f63b7
,
0xfa44e0b4
,
0xe9141340
,
0x1b7f9043
,
0xcfb5f4a8
,
0x3dde77ab
,
0x2e8e845f
,
0xdce5075c
,
0x92a8fc17
,
0x60c37f14
,
0x73938ce0
,
0x81f80fe3
,
0x55326b08
,
0xa759e80b
,
0xb4091bff
,
0x466298fc
,
0x1871a4d8
,
0xea1a27db
,
0xf94ad42f
,
0xb21572c
,
0xdfeb33c7
,
0x2d80b0c4
,
0x3ed04330
,
0xccbbc033
,
0xa24bb5a6
,
0x502036a5
,
0x4370c551
,
0xb11b4652
,
0x65d122b9
,
0x97baa1ba
,
0x84ea524e
,
0x7681d14d
,
0x2892ed69
,
0xdaf96e6a
,
0xc9a99d9e
,
0x3bc21e9d
,
0xef087a76
,
0x1d63f975
,
0xe330a81
,
0xfc588982
,
0xb21572c9
,
0x407ef1ca
,
0x532e023e
,
0xa145813d
,
0x758fe5d6
,
0x87e466d5
,
0x94b49521
,
0x66df1622
,
0x38cc2a06
,
0xcaa7a905
,
0xd9f75af1
,
0x2b9cd9f2
,
0xff56bd19
,
0xd3d3e1a
,
0x1e6dcdee
,
0xec064eed
,
0xc38d26c4
,
0x31e6a5c7
,
0x22b65633
,
0xd0ddd530
,
0x417b1db
,
0xf67c32d8
,
0xe52cc12c
,
0x1747422f
,
0x49547e0b
,
0xbb3ffd08
,
0xa86f0efc
,
0x5a048dff
,
0x8ecee914
,
0x7ca56a17
,
0x6ff599e3
,
0x9d9e1ae0
,
0xd3d3e1ab
,
0x21b862a8
,
0x32e8915c
,
0xc083125f
,
0x144976b4
,
0xe622f5b7
,
0xf5720643
,
0x7198540
,
0x590ab964
,
0xab613a67
,
0xb831c993
,
0x4a5a4a90
,
0x9e902e7b
,
0x6cfbad78
,
0x7fab5e8c
,
0x8dc0dd8f
,
0xe330a81a
,
0x115b2b19
,
0x20bd8ed
,
0xf0605bee
,
0x24aa3f05
,
0xd6c1bc06
,
0xc5914ff2
,
0x37faccf1
,
0x69e9f0d5
,
0x9b8273d6
,
0x88d28022
,
0x7ab90321
,
0xae7367ca
,
0x5c18e4c9
,
0x4f48173d
,
0xbd23943e
,
0xf36e6f75
,
0x105ec76
,
0x12551f82
,
0xe03e9c81
,
0x34f4f86a
,
0xc69f7b69
,
0xd5cf889d
,
0x27a40b9e
,
0x79b737ba
,
0x8bdcb4b9
,
0x988c474d
,
0x6ae7c44e
,
0xbe2da0a5
,
0x4c4623a6
,
0x5f16d052
,
0xad7d5351
};
void getFirstHalfFlag()
{
memset(flag,
0
,
50
);
unsigned
int
res[]
=
{
0x2F2E
,
0x282A
,
0x2C42
,
0x2A8A
,
0x13E0
,
0x36D4
};
unsigned char key[]
=
"zjgcjy"
;
for
(
int
i
=
0
; i <
6
; i
+
+
) {
flag[i]
=
res[i]
/
key[i];
}
printf(
"%s\r\n"
, flag);
unsigned char key1[]
=
{
0xFC
,
0x1
,
0xF3
,
0xFA
,
0xE
,
0xBB
,
0x3E
,
0x0
};
unsigned char key2[]
=
{
0xC2
,
0xC3
,
0xD7
,
0xC4
,
0xDA
,
0xA5
,
0xA0
,
0xBE
};
for
(
int
i
=
0
; i <
8
; i
+
+
) {
for
(unsigned char a
=
32
; a <
=
126
; a
+
+
) {
for
(unsigned char b
=
32
; b <
=
126
; b
+
+
) {
unsigned char res1
=
a
-
b;
unsigned char res2
=
a
+
b;
if
(res1
=
=
key1[i] && res2
=
=
key2[i]) {
flag[
6
+
i]
=
a;
flag[
14
+
i]
=
b;
break
;
}
}
}
}
printf(
"%s\r\n"
, flag);
}
void getLastHalfFlag()
{
/
/
直接爆破 爆出来是 when
/
*
unsigned
int
v1;
DWORD res
=
0xCAFABCBC
;
res
=
~res;
for
(DWORD i
=
0x32323232
; i <
=
0x7E7E7E7E
; i
+
+
) {
v1
=
-
1
;
unsigned char
*
cRes
=
(unsigned char
*
)&i;
for
(
int
j
=
0
; j <
4
; j
+
+
) {
unsigned char value
=
cRes[j] ^ v1;
v1
=
((v1 >>
8
) ^ key[value]);
}
if
(res
=
=
v1) {
printf(
"%x\r\n"
, i);
break
;
}
}
*
/
memcpy(&flag[
22
],
"when"
,
4
);
printf(
"%s\r\n"
, flag);
unsigned char res[]
=
{
0x38
,
0x57
,
0x3A
,
0x42
,
0x39
,
0x57
,
0x52
,
0x4F
,
0x3A
,
0x56
,
0x5E
,
0x4A
,
0x39
,
0x37
,
0x5A
,
0x48
,
0x3E
,
0x37
,
0x26
,
0x48
,
0x3A
,
0x31
};
unsigned char chr1
=
0
;
unsigned char chr2
=
0
;
unsigned char chr3
=
0
;
int
total
=
26
;
for
(
int
i
=
0
; i <
18
; i
+
=
4
) {
chr1
=
(res[i]
-
0x21
) <<
2
;
chr1
=
((res[i
+
1
]
-
0x21
) >>
4
) | chr1;
chr2
=
((res[i
+
1
]
-
0x21
) <<
4
);
chr2
=
((res[i
+
2
]
-
0x21
) >>
2
) | chr2;
chr3
=
res[i
+
3
]
-
0x21
;
chr3
=
((res[i
+
2
]
-
0x21
) <<
6
) | chr3;
flag[total
+
+
]
=
chr1;
flag[total
+
+
]
=
chr2;
flag[total
+
+
]
=
chr3;
}
chr1
=
(res[
20
]
-
0x21
) <<
2
;
chr1
=
chr1 | ((res[
21
]
-
0x21
) >>
4
);
flag[total]
=
chr1;
printf(
"%s\r\n"
, flag);
}
int
main()
{
getFirstHalfFlag();
getLastHalfFlag();
return
0
;
}