首页
社区
课程
招聘
aliyunctf2024 逆向 Euler Writeup
发表于: 2024-3-25 18:56 11044

aliyunctf2024 逆向 Euler Writeup

2024-3-25 18:56
11044

首先拿到题目,可以看到是一个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对应一组。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-3-26 09:21
1
雪    币: 859
活跃值: (309)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
3
那,这就是人才
2024-3-26 13:06
0
雪    币: 715
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Vsbat 那,这就是人才
谢谢大佬
2024-3-27 08:18
0
游客
登录 | 注册 方可回帖
返回
//