-
-
aliyunctf2024 逆向 Euler Writeup
-
发表于:
2024-3-25 18:56
11087
-
aliyunctf2024 逆向 Euler Writeup
首先拿到题目,可以看到是一个windows的exe可执行文件。
尝试运行,需要输入口令,然后其判断对错。
我们使用ghidra反编译,得到“源码”。
找到“entry”
然后顺着函数找到主逻辑。
可以看到“FUN_1400010e0”是主逻辑,在flag正确的情况下会返回“Right”,否则返回“Wrong”。
大致对程序进行走读,发现其逻辑为对flag的一些检查,如果同时满足便可接受。检查包括:长度检查(等于29)、前缀后缀检查(aliyunctf{XXXXX})、所有的字符的ascii值不大于56、一些flag不同位置的管理(如第14位小于第8位等)、以及一个根据mask的校验。这个检查并不难理解,但是如何找到符合这些条件的字符串呢?
首先为了方便理解,我们可以用Python把同样的逻辑写一遍。在确定无误的情况下,整理代码使其意图更清晰。最终得到以下代码。
通过"check_final"的逻辑可分析,对于flag内部的内容,也就是aliyunctf{XXXXX}中的XXXXX的校验。首先我们不考虑mask的索引出现负数的情况,所以锁定可能的字符在48到56之间。其次看出每次校验的对象是挨着的前后两个字符,其ascii值会用来和mask的两处作比较。如果成功,会将mask相应的位置制成0。
查看mask,有34个1,而XXXXX中连续的两个字符一共有17组,刚好2个mask对应一组。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)