第一次做逆向
题目来源:ctf.show
1、下载附件,发现一个exe和一个txt文件
看看病毒加没加壳,发现没加那就直接放IDA
放到IDA找到main主函数,按F5反编译工具就把他还原成类似C语言的代码
然后我们看逻辑,将flag.txt文件的内容进行加密处理,并将结果写入enflag.txt文件,所以上面那两个文件enflag是被加密过的
继续看这段代码,输入的是Str,输入Str这个值要干什么不知道,进去看看
发现这是从sub_401A70里面返回,然后进去看看具体做了什么
看不懂就扔豆包里看看代码具体实现什么功能:
-
输入处理:
- 接收用户输入的字符串
Str
(例如密码或 flag)。 - 获取
Str
的长度,用于后续循环处理。
- 接收用户输入的字符串
-
加密转换:
- 异或操作:对输入字符串
Str
的每个字符与固定值0x1F
(十进制 31)进行异或运算。 - 累加修改:将异或结果累加到另一个字符串
Str1
的对应位置上(Str1[i] += Str[i] ^ 0x1F
)。
- 异或操作:对输入字符串
-
结果验证:
- 将处理后的
Str1
与预设的目标字符串"DH~mqqvqxB^||zll@Jq~jkwpmvez{"
进行比较。 - 若匹配成功,输出正确信息(如
Correct!
);否则输出错误信息(Error!
)。
- 将处理后的
所以黄色的那段字符串就是密钥,我们写个脚本给他解回去
出来这么一段字符串,然后我们得返回去看他之后有干了什么
其实看到这就能猜出来是个加密操作了,str是密钥,v13是一开始写入flag.txt里的内容,v12是将v13加密之后写入enflag.txt的内容,v15和v14都没有用,我们继续点进去看
发现返回sub_4014E0这个函数,对应着刚才的值a1,a4,a5
看黄色那段,用到的函数就有sub_4010EB这个函数
、
看这段,RC4加密,前三段强特征(可以搜一下RC4加密)
知道是RC4加密我们拿厨师解一下
拿到flag