[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='')