1、迷失之门
1 | def reverse_simulate_check(transformed_string): |
得到flag ISCC{b|Ze\dlv|`WQ}xmw\Widh}
函数声明:这是
main
函数的入口,采用标准的C++形式,接收命令行参数。关键逻辑分析
if (strlen(Buffer) <= 0x1B)
:这个条件检查输入的长度是否小于等于27个字符。
如果是,进入循环检查Buffer中的字符:
- 循环从索引5到25,检查字符是否是小写字母或下划线(
islower(Buffer[i]) || Buffer[i] == '_'
)。如果不是,v7
设为0。 - 调用
check(Buffer)
函数,此函数可能是用来检查Buffer
中是否包含有效的flag。
- 循环从索引5到25,检查字符是否是小写字母或下划线(
如果输入长度超过27个字符,输出一条错误消息并暂停。
Check
初始化了三个字符数组:
v16
存储大写字母 A-Z。v10
存储小写字母 a-z。v4
存储数字和特殊字符。v3
存储了一个特定的字母序列 “DABBZXQESVFRWNGTHYJUMKIOLPC”,看起来像是一个密钥或映射。循环遍历输入字符串 a1
,对每个字符进行检查和变换:
- 跳过ASCII值为127和小于等于32的字符(控制字符和空白)。
- 对于其他字符,根据与v3中对应位置字符的差值,进行替换:
- 如果差值小于或等于0,输出”flag is wrong”。
- 如果差值在1到25之间,使用
v16
(大写字母)中对应的字符替换。 - 如果差值在26到51之间,使用
v10
(小写字母)中对应的字符替换。 - 如果差值大于51,使用
v4
(数字和特殊字符)中对应的字符替换。
check2
验证输出,这里相当于直接告诉你flag要求了,写个脚本秒了
transformed_string = “FSBBhKrVSGeafuZDJkuYqROaYY6”