1.freestyle
ida中分析有个两个fun
atoi()将字符转换为整数,得到答案为3327105 MD5加密提交
2.Re_function
没有提供密码,但是在右边看到熟悉的89 50
利用winhex保存出来,得到解压密码
解压后,将第一个exe放入od分析
搜索字符串来到关键位置,发现将输入的字符串隔一位xor
将这段内存扣出来,xor回来
之后分析第二个程序
因为之前做过类似的题,看到这个猜测是自定义了编码表
然后得到flag
3.ez_algorithm
简单分析了一下
v3的返回值是固定的 "BRUF{E6oU9Ci#J9+6nWAhwMR9n:}"
只要让我们输入的字符串进行加密后等于这个值就可以了
从main函数进入
这个函数比较长
其中关键的有三张字母表,
第一个是v3的返回值,第二个是小写字母表,第三个是大写字母表
还有一个关键的变量v19,循环一次加一
大概过程就是对我们输入的字符进行判断然后查表,取出字母传给encryption2函数
然后调用encryption2
encryption2又会调用encryption3
举个例子:比如我们要得到E这个字母encryption3就需要传入Y
想要encryption3传入Y,就需要encryption2传入小写y
想要encryption2传y 就在得在v18_2[] 这个小写字母表中取出y
这个y在小写字母表中的下标为22
此时v19为5
5%4 = 1
然后得到v20 -97 *1 ==22
比较菜,脚本想不出来,手动出来的
得到这个,然后运行提示错误
后来想到还有一段switch()语言当输入"_"时会执行
其中还有个rand()函数,不是很清楚
然后就把flag其中三个其他字符都换成"_"
然后调试发现最后一个对不上,就把最后的改回来
改回来之后程序运行还是不对,但平台提交成功