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}

 

posted @ 2024-03-13 17:47  demo41  阅读(3)  评论(0编辑  收藏  举报