-
-
[原创]KCTF2021 迷失丛林write up
-
发表于: 2021-11-17 20:14 18373
-
根据关键字TryAgain定位到判断函数,确定输出位数,和字符输入格式
进入主函数,主函数分为两个部分
第一部分,根据前16位输入的字节填充入key中,生成256个510位的字数组
随后添加256个256字数组,对应下标记录每次结果的254(2+4+8+0x10+0x20+0x40+0x80)
至510(245+256)
位对应值出现次数,响应位置不为0的次数要等于对应值才可以进入下一步判断
这里直接用脚本先求出256位key中不存在的8个值,就是对应我们密码前16位字符key_number = [0x1e, 0x28, 0x4b, 0x6d, 0x8c, 0xa3, 0xd2, 0xfb]
全排列爆破下对应顺序,40320次
得到Key前八位分别为0x4B, 0x6D, 0x28, 0x8C, 0xFB, 0xD2, 0x1E, 0xA3
,由于输入每两位做了一次翻转,所以输入的前十六位为B4D682C8BF2DE13A
def
key_enumeration(enum_key):
key
=
[
0xA2
,
0x9B
,
0xF4
,
0xDF
,
0xAC
,
0x7C
,
0xA1
,
0xC6
,
0x16
,
0xD0
,
0x0F
,
0xDD
,
0xDC
,
0x73
,
0xC5
,
0x6B
,
0xD1
,
0x96
,
0x47
,
0xC2
,
0x26
,
0x67
,
0x4E
,
0x41
,
0x82
,
0x20
,
0x56
,
0x9A
,
0x6E
,
0x33
,
0x92
,
0x88
,
0x29
,
0xB5
,
0xB4
,
0x71
,
0xA9
,
0xCE
,
0xC3
,
0x34
,
0x50
,
0x59
,
0xBF
,
0x2D
,
0x57
,
0x22
,
0xA6
,
0x30
,
0x04
,
0xB2
,
0xCD
,
0x36
,
0xD5
,
0x68
,
0x4D
,
0x5B
,
0x45
,
0x9E
,
0x85
,
0xCF
,
0x9D
,
0xCC
,
0x61
,
0x78
,
0x32
,
0x76
,
0x31
,
0xE3
,
0x80
,
0xAD
,
0x39
,
0x4F
,
0xFA
,
0x72
,
0x83
,
0x4C
,
0x86
,
0x60
,
0xB7
,
0xD7
,
0x63
,
0x0C
,
0x44
,
0x35
,
0xB3
,
0x7B
,
0x19
,
0xD4
,
0x69
,
0x08
,
0x0B
,
0x1F
,
0x3D
,
0x11
,
0x79
,
0xD3
,
0xEE
,
0x93
,
0x42
,
0xDE
,
0x23
,
0x3B
,
0x5D
,
0x8D
,
0xA5
,
0x77
,
0x5F
,
0x58
,
0xDB
,
0x97
,
0xF6
,
0x7A
,
0x18
,
0x52
,
0x15
,
0x74
,
0x25
,
0x62
,
0x2C
,
0x05
,
0xE8
,
0x0D
,
0x98
,
0x2A
,
0x43
,
0xE2
,
0xEF
,
0x48
,
0x87
,
0x49
,
0x1C
,
0xCA
,
0x2B
,
0xA7
,
0x8A
,
0x09
,
0x81
,
0xE7
,
0x53
,
0xAA
,
0xFF
,
0x6F
,
0x8E
,
0x91
,
0xF1
,
0xF0
,
0xA4
,
0x46
,
0x3A
,
0x7D
,
0x54
,
0xEB
,
0x2F
,
0xC1
,
0xC0
,
0x0E
,
0xBD
,
0xE1
,
0x6C
,
0x64
,
0xBE
,
0xE4
,
0x02
,
0x3C
,
0x5A
,
0xA8
,
0x9F
,
0x37
,
0xAF
,
0xA0
,
0x13
,
0xED
,
0x1B
,
0xEC
,
0x8B
,
0x3E
,
0x7E
,
0x27
,
0x99
,
0x75
,
0xAB
,
0xFE
,
0xD9
,
0x3F
,
0xF3
,
0xEA
,
0x70
,
0xF7
,
0x95
,
0xBA
,
0x1D
,
0x40
,
0xB0
,
0xF9
,
0xE5
,
0xF8
,
0x06
,
0xBC
,
0xB6
,
0x03
,
0xC9
,
0x10
,
0x9C
,
0x2E
,
0x89
,
0x5C
,
0x7F
,
0xB1
,
0x1A
,
0xD6
,
0x90
,
0xAE
,
0xDA
,
0xE6
,
0x5E
,
0xB9
,
0x84
,
0xE9
,
0x55
,
0xBB
,
0xC7
,
0x0A
,
0xE0
,
0x66
,
0xF2
,
0xD8
,
0xCB
,
0x00
,
0x12
,
0xB8
,
0x17
,
0x94
,
0x6A
,
0x4A
,
0x01
,
0x24
,
0x14
,
0x51
,
0x07
,
0x65
,
0x21
,
0xC8
,
0x38
,
0xFD
,
0x8F
,
0xC4
,
0xF5
,
0xFC
]
unknown_key
=
enum_key
test_key
=
unknown_key
+
key
count
=
[
2
,
4
,
8
,
0x10
,
0x20
,
0x40
,
0x80
]
result
=
[
0
,
0
,
0
,
0
]
bit_count
=
1
pos
=
0
for
times
in
range
(
256
):
mid_res
=
[
0
]
*
512
mid_res2
=
[
0
]
*
256
mid_res[
0
]
=
test_key[bit_count
-
1
]
mid_res[
1
]
=
bit_count
res_count
=
0
for
i
in
count:
pos
+
=
i
start
=
pos
while
i >
0
:
mid_res[start]
=
test_key[mid_res[res_count]]
mid_res[start
+
1
]
=
(mid_res[res_count]
+
1
)
%
256
start
+
=
2
res_count
+
=
1
i
-
=
1
for
number
in
range
(res_count,
510
):
mid_res2[mid_res[number]]
+
=
1
if
mid_res2[
0
]:
result[
0
]
+
=
1
if
mid_res2[
14
]:
result[
1
]
+
=
1
if
mid_res2[
40
]:
result[
2
]
+
=
1
if
mid_res2[
79
]:
result[
3
]
+
=
1
bit_count
=
(bit_count
+
1
)
%
256
pos
=
0
if
result[
0
]
=
=
169
and
result[
1
]
=
=
172
and
result[
2
]
=
=
167
and
result[
3
] >
200
:
print
(result)
print
(unknown_key)
def
key_enumeration(enum_key):
key
=
[
0xA2
,
0x9B
,
0xF4
,
0xDF
,
0xAC
,
0x7C
,
0xA1
,
0xC6
,
0x16
,
0xD0
,
0x0F
,
0xDD
,
0xDC
,
0x73
,
0xC5
,
0x6B
,
0xD1
,
0x96
,
0x47
,
0xC2
,
0x26
,
0x67
,
0x4E
,
0x41
,
0x82
,
0x20
,
0x56
,
0x9A
,
0x6E
,
0x33
,
0x92
,
0x88
,
0x29
,
0xB5
,
0xB4
,
0x71
,
0xA9
,
0xCE
,
0xC3
,
0x34
,
0x50
,
0x59
,
0xBF
,
0x2D
,
0x57
,
0x22
,
0xA6
,
0x30
,
0x04
,
0xB2
,
0xCD
,
0x36
,
0xD5
,
0x68
,
0x4D
,
0x5B
,
0x45
,
0x9E
,
0x85
,
0xCF
,
0x9D
,
0xCC
,
0x61
,
0x78
,
0x32
,
0x76
,
0x31
,
0xE3
,
0x80
,
0xAD
,
0x39
,
0x4F
,
0xFA
,
0x72
,
0x83
,
0x4C
,
0x86
,
0x60
,
0xB7
,
0xD7
,
0x63
,
0x0C
,
0x44
,
0x35
,
0xB3
,
0x7B
,
0x19
,
0xD4
,
0x69
,
0x08
,
0x0B
,
0x1F
,
0x3D
,
0x11
,
0x79
,
0xD3
,
0xEE
,
0x93
,
0x42
,
0xDE
,
0x23
,
0x3B
,
0x5D
,
0x8D
,
0xA5
,
0x77
,
0x5F
,
0x58
,
0xDB
,
0x97
,
0xF6
,
0x7A
,
0x18
,
0x52
,
0x15
,
0x74
,
0x25
,
0x62
,
0x2C
,
0x05
,
0xE8
,
0x0D
,
0x98
,
0x2A
,
0x43
,
0xE2
,
0xEF
,
0x48
,
0x87
,
0x49
,
0x1C
,
0xCA
,
0x2B
,
0xA7
,
0x8A
,
0x09
,
0x81
,
0xE7
,
0x53
,
0xAA
,
0xFF
,
0x6F
,
0x8E
,
0x91
,
0xF1
,
0xF0
,
0xA4
,
0x46
,
0x3A
,
0x7D
,
0x54
,
0xEB
,
0x2F
,
0xC1
,
0xC0
,
0x0E
,
0xBD
,
0xE1
,
0x6C
,
0x64
,
0xBE
,
0xE4
,
0x02
,
0x3C
,
0x5A
,
0xA8
,
0x9F
,
0x37
,
0xAF
,
0xA0
,
0x13
,
0xED
,
0x1B
,
0xEC
,
0x8B
,
0x3E
,
0x7E
,
0x27
,
0x99
,
0x75
,
0xAB
,
0xFE
,
0xD9
,
0x3F
,
0xF3
,
0xEA
,
0x70
,
0xF7
,
0x95
,
0xBA
,
0x1D
,
0x40
,
0xB0
,
0xF9
,
0xE5
,
0xF8
,
0x06
,
0xBC
,
0xB6
,
0x03
,
0xC9
,
0x10
,
0x9C
,
0x2E
,
0x89
,
0x5C
,
0x7F
,
0xB1
,
0x1A
,
0xD6
,
0x90
,
0xAE
,
0xDA
,
0xE6
,
0x5E
,
0xB9
,
0x84
,
0xE9
,
0x55
,
0xBB
,
0xC7
,
0x0A
,
0xE0
,
0x66
,
0xF2
,
0xD8
,
0xCB
,
0x00
,
0x12
,
0xB8
,
0x17
,
0x94
,
0x6A
,
0x4A
,
0x01
,
0x24
,
0x14
,
0x51
,
0x07
,
0x65
,
0x21
,
0xC8
,
0x38
,
0xFD
,
0x8F
,
0xC4
,
0xF5
,
0xFC
]
unknown_key
=
enum_key
test_key
=
unknown_key
+
key
count
=
[
2
,
4
,
8
,
0x10
,
0x20
,
0x40
,
0x80
]
result
=
[
0
,
0
,
0
,
0
]
bit_count
=
1
pos
=
0
for
times
in
range
(
256
):
mid_res
=
[
0
]
*
512
mid_res2
=
[
0
]
*
256
mid_res[
0
]
=
test_key[bit_count
-
1
]
mid_res[
1
]
=
bit_count
res_count
=
0
for
i
in
count:
pos
+
=
i
start
=
pos
while
i >
0
:
mid_res[start]
=
test_key[mid_res[res_count]]
mid_res[start
+
1
]
=
(mid_res[res_count]
+
1
)
%
256
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-11-19 10:33
被hacktu编辑
,原因: 添加标题
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
2023-3-18 05:18
一笑人间万事
为你点赞~
2022-7-28 00:02
hacktu
为你点赞~
2021-12-17 17:20
赞赏
他的文章
- [原创]腾讯课堂批量下载详细js逆向及脚本(支持QQ、VX登陆) 10124
- [原创]刚入行时分析的病毒好像又出来了 14038
- [原创]log4j 2漏洞原理及复现 7086
看原图
赞赏
雪币:
留言: