![](https://img-blog.csdnimg.cn/img_convert/1cc347e43799d0f645a49f7e638286b6.png)
![](https://img-blog.csdnimg.cn/img_convert/2018d7db21a476e400ae09a230d55bb6.png)
![](https://img-blog.csdnimg.cn/img_convert/466b36d723027599a9376deb2517e5db.png)
![](https://img-blog.csdnimg.cn/img_convert/e8f7ede3f6562b504fbc23ce80e7f200.png)
1.判断Str2与Destination是否相等,相等则“right flag”,不等则“wrong flag”
2.v5=Destination长度
3.for():Destination[j]+=j
4.v11 = j_strlen(Destination)
5.Destination=v4
6.对v4进行操作
7.v3=Str长度
8.获取字符串长度存入Str中
9.for()不明意义的操作
跟进第六步的函数
![](https://img-blog.csdnimg.cn/img_convert/0bf104a138735da0d0e3e8f58556de25.png)
看不懂,但是有特征:出现过很多次BASE64_table_417B30,初步怀疑是base64加密
再打开检查加密的插件
![](https://img-blog.csdnimg.cn/img_convert/dc24706e391d882a48e9441fc39d7720.png)
![](https://img-blog.csdnimg.cn/img_convert/6c909814b82134e5b9ff73af9fec3348.png)
证实是base64加密
程序的大致流程是:输入的字符串先进行base64加密后再进行第j位加上j的加密操作,然后和Str2比对,跟进Str2
![](https://img-blog.csdnimg.cn/img_convert/d454e40281863a2cf101ad218d931914.png)
flag就是对这个字符串解密,开始写脚本
小细节:解密过程是加密过程的逆向操作,它第j位加上j,我们第j位就减去j
![](https://img-blog.csdnimg.cn/img_convert/3953068dec43b561fa86909a47debe79.png)
然后base64解密
![](https://img-blog.csdnimg.cn/img_convert/c73a6e7c7cb1707da0f7ecb95bf2aaec.png)
得到flag{i_l0ve_you}
笔记:
那个不明意义的操作:____report_rangecheckfailure();
![](https://img-blog.csdnimg.cn/img_convert/255e72cf36ea5f0f7e8f4c2cce775ffc.png)
检查堆栈溢出
![](https://img-blog.csdnimg.cn/img_convert/67597470650050174cd8d5c91834f581.png)
以后不会写逆向推理的过程了,相信刷了几道题已经有逆向分析的能力了,以后只写大致流程了,看注释应该就能看懂