HackPluto's Blog

2019看雪CTF逆向Q1writeup

字数统计: 357阅读时长: 1 min
2019/06/12 Share

第一题 流浪者

首先使用die查壳后没有发现壳
拖到IDA里
这个题我本来想直接看伪C代码发现找关键点函数有些困难(还是我太菜了),所以最后发现了更简单的方法
shifr + F12查看字符串

发现了一串可疑字符串
查看这串字符串的引用 进入这个函数

其实看到strcmp函数的时候,这个题的意图就比较明显了,就是比较str1和那一串字符串是不是相等,变量a1应该就是数组的首地址,但是我们不知道a1这个数组是怎么得到的,所以查一下sub_4017F0函数的交叉引用

从16行的getbuffer可以看出str是直接从内存中读取的也就是我们输入的

这里限制了输入的必须是大小写字母或者数字
所以直接暴力破解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
v4 = 0
str1 = "abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ"
str2 = ""
str3 = "KanXueCTF2019JustForhappy"
def find():
global v4
global str2
for i in range(48,58):
i = i - 48
if (i + 4 * v4) < 62 and (i + 4 * v4) > 0:
if str1[i + 4*v4] == str3[v4]:
str2 += chr(i)
v4 += 1
return
for i in range(97,123):
i = i - 87
if (i + 4 * v4) < 62 and (i + 4 * v4) > 0:
if str1[i + 4*v4] == str3[v4]:
str2 += chr(i)
v4 += 1
return
for i in range(65,91):
i = i - 29
if (i + 4 * v4) < 62 and (i + 4 * v4) > 0:
if str1[i + 4*v4] == str3[v4]:
str2 += chr(i)
v4 += 1
return

while(1):
if v4 < 26:
find()

else:
break
print(str2)

CATALOG
  1. 1. 第一题 流浪者