CTF笔记
[学习笔记]攻防世界—ereere
2025-03-12
•1 分钟•51 字逆向过程
下载附件

直接用IDA打开,按Shif+F12找到了线索

跳转到位置,按F5进行反编译
注意,这里有可能反编译失败,提示缺少什么模块,大家可以去网上找一些集合版的IDA,否则缺少插件就打不开了,我在这里使用的是7.7版本的IDA集合版

分析一下工作流程,用户输入flag到v3,之后会到sub_41A6E0这个函数进行处理,我们到这个函数看看

研究了一下,这个代码是用来计算字符串长度的代码,我们再看看下一个函数命令

这个似乎是加密函数,我们看看里面的sub_400864函数

看看aFlag1233213211数组的值

分析了一下,这个函数似乎是RC4加密,比如其中的256(0x100)大循环和% 256这种操作,以及作为秘钥的flag{123321321123badbeef012},我们再看看下个函数sub_4550

这个函数是一个使用自定义字符集的Base64编码,之前在Shift+F12查字段时查到了一段字符表,应该就是用来编码的字符表
之后就是与那段编码后的Flag进行比对,我们大概明白了加密流程:用户输入Flag后,进行RC4加密,然后再进行自定义字符表编码,最后与Flag进行比对,我们可以尝试编写脚本了
import base64
from Crypto.Cipher import ARC4
key = "ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ=="
string1 = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Str = base64.b64decode(key.translate(str.maketrans(string1, string2)))
#先对自定义字符表与标准字符表进行替换,然后再对编码进行解密
a = "flag{123321321123badbeef012}"
flag = ARC4.new(bytes(a,encoding="utf-8")).decrypt(Str)
print(flag)
运行脚本,得到flag

需要安装Crypto.Cipher模块才能方便的进行ARC4解密
总结
在逆向分析时,建议多使用 IDA 的 字符串搜索 (Shift+F12) 以及 交叉引用分析 快速定位关键逻辑,提高逆向效率,碰到不懂的加密,就多上网查查吧