Moe RE - 【bugku】
发现好像没人写wp,虽然很简单但是写一个....
题目
分析
下载文件打开,习惯首先丢到Exeinfo PE里看看有没有壳
没有壳的样子
那放心丢到IDA(64-bit)里面
一进去就看到很有嫌疑的字符串,F5查看反汇编代码
刚好是main函数,左边的函数列表里函数很少,而且一个一个点进去也没有东西,可以确定关键就是这个main函数
这个函数不是很复杂,简单解释一下:
首先,使用scanf函数从输入中读取一个字符串,储存在 _s 数组中
然后使用了strcpy函数将字符串“abcdefghijklmnopqrstuvwxyz”复制到 v8 数组中
就接下来循环遍历输入字符串的每个字符,将其与 v8 数组中对应位置的字符进行按位异或操作,并将结果存储回 __s 数组中
最后,再次循环输出经过异或操作后的每个字符的ASCII码值
解题脚本
1 str = [12, 13, 6, 7, 17, 0, 28, 35, 7, 90, 28, 5, 3, 9, 48, 34, 66, 4, 64, 6, 6, 69, 40, 30, 11, 21, 12, 61, 27, 84, 23, 57, 6, 6, 13, 53, 90, 8, 12, 19] 2 s = "abcdefghijklmnopqrstuvwxyz" 3 list = [] 4 5 # enumerate()函数用于同时获取元素的索引值和值本身 6 for i, char_code in enumerate(str): 7 decrypted_char_code = char_code ^ ord(s[i % 26]) #ord()函数用于获取字符的ASCII码值 8 decrypted_char = chr(decrypted_char_code) #这一行将解密后的ASCII码值转换为字符 9 list.append(decrypted_char) 10 11 flag = ''.join(list) 12 print("flag:", flag)
运行获得flag
moectf{Kn0wing_R3v3rs3_from_x0r_and_1da}