[WP]BUUCTF-Reverse-基础题(1-12)

1、easyre

查询基本信息

载入 IDA 

 

 2、reverse1

 

核心部分就是将 Str2 中的 o 替换成了 0,再与 Str1(我们输入的字符串) 进行比对

 

 查询 Str2 的值

 得到 flag

 

3、reverse2

 与上题类似,也是将字符替换一下就能得到 flag

将 {hacking_for_fun} 中的 i 和 r 替换为 1 即可

 

 

 4、内涵的软件

 运行程序

 直接查看字符串

 

 5、新年快乐

32 位程序,但有 UPX 壳

 

脱壳

 载入 IDA 分析 main 函数

 

 6、guessgame

 

 载入 IDA,查看字符串即可

 

 7、helloword

一道安卓逆向,利用 JEB 即可

 

8、xor

64 位程序

 直接载入 IDA,将输入的字符串逐位异或后与 global 进行比对

 查询 global

 

 写出 EXP,运行得到 flag

 1 glo = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, \
 2        0x40, 0x11, 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, \
 3        0x70, 0x19, 0x46, 0x1F, 0x76, 0x22, 0x4D, 0x23, \
 4        0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 0x47, 0x32, \
 5        0x4F]
 6 flag = ''
 7 for i in range(len(glo)-1, 0, -1):
 8     glo[i] ^= glo[i-1]
 9     
10 for i in glo:
11     flag += chr(i)
12 
13 print(flag)

 

 9、reverse3

 修改栈指针后查看 main 函数

 查询字符串,其实看到这个字符串表就可以大致知道是采用了 base64 加密或者是变种的 base64 加密

 查看 Str2 的值,为e3nifIH9b_C@n@dH

 Dest 的值即为我们输入的值,经过一个简单的运算后与 Str2 进行对比

 写出 EXP ,运行得到 flag

1 import base64
2 a = 'e3nifIH9b_C@n@dH'
3 b = ''
4 for i in range(len(a)):
5     value = ord(a[i]) - i
6     b += chr(value)
7 print(b)
8 print(base64.b64decode(b).decode('utf-8'))

 

 10、不一样的 flag

32 位程序

 载入 IDA 中,我们可以看到四个选项:上下左右,其实可以大致猜测这是一道迷宫题,# 即为终点

查看字符串,我们发现一个字符串

 写出路径即为 flag

 

 11、SimpleRev

64 位程序

直接载入 IDA 查看反编译后的代码,进入主要的 Decry 函数。

最后进行比对的两个变量为 text,str2。

 

根据流程可以编写 EXP,运行得到 flag。需要注意一下是小端存储,src、v10 需要反向后再进行拼接。

 1 #出现的变量
 2 key1 = 'ADSFK'
 3 key3 = 'kills'
 4 src = 'SLCDN'
 5 v10 = 'wodah'
 6 
 7 #LODWORD(v0) = join(key3, &v10)
 8 v0 = key3
 9 for i in range(len(v10)-1, -1, -1):
10     v0 += v10[i]
11 print(v0)
12 #strcat(key, src)
13 key = key1
14 for i in range(len(src)-1, -1, -1):
15     key += src[i]
16 
17 #第一个循环:key大写转化为小写
18 tmp = ''
19 for i in key:
20     value = ord(i) + 32
21     tmp += chr(value)
22 key = tmp
23 
24 #第二个循环,逆向求出flag
25 str2 = text = v0
26 flag = ''
27 for i in range(len(str2)):
28     value1 = ord(str2[i])
29     value1 -= 97
30 
31     value2 = -ord(key[i])
32     value2 += 97
33     value2 -= 39
34     
35     value = value1 - value2
36     while True:
37         if value > ord('Z'): value -= 26
38         elif value < ord('A'): value += 26
39         else: break
40     flag += chr(value)
41 
42 print(flag)

 

 12、Java逆向解密

将 class 文件直接拖入 jd-gui 中,程序是将我们输入的字符串经过 Encrypt 中的第一个循环运算后,与 KEY 进行比对

 需要注意到加法的优先级比异或要高,写出 EXP

1 key = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
2 for i in key:
3     value = i
4     value ^= 0x20
5     value -= 64
6     print(chr(value), end='')

 

posted @ 2020-10-23 15:15  祟役丶  阅读(2670)  评论(0编辑  收藏  举报