题目链接:https://ctf.bugku.com/challenges#love
作为一个逆向小白,这道题我觉得有必要记录下,这道题我自己分析了一半,没有完全分析出来(觉得是自己见的题少,没有做题经验,而且需要熟悉下各种加密),参考了网上大佬们的博客。
首先把这个拖进exeinfope中看看有啥重要信息没
从上面得到用c++写的,32位,无壳,符合PE结构,
然后拉进IDA中看看(一键F5)
看主函数,想得到right flag就要Dest数组和Str2数组前v2(就是Dest数组长度)个字符匹配相同,Str2数组点进去可以看到
for循环那一步倒过来也很容易实现
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
char Dest[20]="e3nifIH9b_C@n@dH";
int len=strlen(str);
for(int i=0;i<len;i++)
Dest[i]-=i;
for(int i=0;i<len;i++)
printf("%c",Dest[i]);
}
得到Dest之前的样子
e2lfbDB2ZV95b3V9
重点就是输入的Str怎么转化成Dest
sheft+F12看字符串,会发现base64input和base64
字符'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
所以转化很有可能运用的是base64加密Str存入Dest,所以网上找在线解密base64即可得到flag
得到flag
flag{i_l0ve_you}