狗儿

热爱的话就坚持吧~

0%

BUUCTF逆向部分题解

鸽了好久了

easyre

拖进ida直接看到flag

reverse1

明文存储{hello_world},然后把o替换成0.

flag{hell0_w0rld}

helloword

1578815251239

reverse2

和前面的reverse1类似,把i和r换成1

flag{hack1ng_fo1_fun}

新年快乐

脱upx

flag{HappyNewYear!}

内涵的软件

轻松得到DBAPP{49d3c93df25caad81232130f3d2ebfad},提示说得到的flag添上flag{}提交,但是flag{DBAPP{49d3c93df25caad81232130f3d2ebfad}}不正确,试了试flag{49d3c93df25caad81232130f3d2ebfad},正确。

xor

1
2
3
4
d = [0x66,0x0a,0x6b,0x0c,0x77,0x26,0x4f,0x2e,0x40,0x11,0x78,0x0d,0x5a,0x3b,0x55,0x11,0x70,0x19,0x46,0x1f,0x76,0x22,0x4d,0x23,0x44,0x0e,0x67,0x6,0x68,0x0f,0x47,0x32,0x4f]
for i in range(len(d)-1, 0, -1):
d[i] = d[i] ^ d[i-1]
print(''.join(list(map(chr,d))))

十分基础的异或题

reverse3

对输入字符串base64后逐位自增偏移值。

1578816867347

1
2
3
4
5
6
s = list(map(ord, list('e3nifIH9b_C@n@dH')))
for i in range(len(s)):
s[i] -= i
s = ''.join(list(map(chr, s)))
import base64
print(base64.b64decode(s.encode()))

不一样的flag

5*5迷宫

1578817158630

1578817181758

Java逆向解密

gd-gui打开,逻辑很简单,对输入字符加上'@' ^ 0x20

1
2
3
4
5
6
keylist = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
flag = []

for i in keylist:
flag.append( i - ord('@') ^ 0x20 )
print(''.join(list(map(chr, flag))))

findit

应该只是个MISC题,以逆向的思路做我没做出来。

按照常规流程查看代码,发现代码写的一团糟,很多变量应该有值,结果没有,有的只申请了变量,就接着判断是否和输入字符串相等,等等。

还有,题解中说是凯撒,但是代码中并没有凯撒的部分。真的有点坑。

代码中没有字符数据,但是samli中有,没有编译出来。

1578896795466

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
d = '''0x70s
0x76s
0x6bs
0x71s
0x7bs
0x6ds
0x31s
0x36s
0x34s
0x36s
0x37s
0x35s
0x32s
0x36s
0x32s
0x30s
0x33s
0x33s
0x6cs
0x34s
0x6ds
0x34s
0x39s
0x6cs
0x6es
0x70s
0x37s
0x70s
0x39s
0x6ds
0x6es
0x6bs
0x32s
0x38s
0x6bs
0x37s
0x35s
0x7ds'''
dlist = eval("[%s]" % d.replace(' ',',').replace('\n', '').replace('s',''))
d = ''.join(list(map(chr, dlist)))
print('初始:%s' % d)

for offset in range(26):
flag = []
for i in dlist:
if ord('a') < i < ord('z'):
if i + offset > ord('z'):
flag.append(i + offset - 26)
else:
flag.append(i + offset)
else:
flag.append(i)
print('偏移%d : %s' % (offset, ''.join(list(map(chr, flag)))))

简单注册器

安卓逆向,输入字符串满足下面的判断即可获得flag

1
(str.length() != 32 || str.charAt(31) != 'a' || str.charAt(1) != 'b' || str.charAt(0) + str.charAt(2) - '0' != '8')

构造0b8wwwwwwwwwwwwwwwwwwwwwwwwwwwwa,然后输入到程序里。

1578986693467

相册

看到有native层,我开心死了。

1578987252304

base64后得到flag