首页
社区
课程
招聘
[原创] KCTF2505 第五题 智破幻阵 WriteUp
发表于: 2025-8-25 11:30 3897

[原创] KCTF2505 第五题 智破幻阵 WriteUp

HHHso 活跃值
26
2025-8-25 11:30
3897

        该题定义四种变换,通过对用户名进行sha256,对256位hash值每两位构成变换选择子,构成一组128个变换选择子构成的变换序列,对32位0开始逆变换得到用户密码,用户密码正变换得到32位0则正确。题目利用mov的完备性和异常分发机制对原控制流进行混淆,但这里我们不考虑混淆代码控制流和相关数据流,直接分析内存数据变换情况着手。




一眼32字节长password,测试是否几种常见的hash,如下图,不是直接hash结果,也可以考虑多迭代几次试试


但在登录成功后,我们检索内存,可以看到有疑似有sha256(user_name)的存在,如下图


xdbg64中,在GetWindowTextW下断点,输入登录断下,在dump中追踪获取username或password的初步存放内存及其附近,如下图




在内存变化分析中,我们得到几个关键内存位置,8字(32字节)每字计算结果中间存放位置,字序位置、变换选择子位置、变换次序位置;

这些位置的值,也可以在输入username和password点击登录后进行观察




在计算结果存放位置设置硬件写断点,通过计算结果的变换,得到变换关系,如下是结果值变换情况样例:



通过分析,我们得到四种变换,及其逆变换,python复现如下,其中rorx_w和one_count用于发现计算结果之间的计算关系,如果a和b通过one_count得到其中为1的位数相同,则考虑用rorx_w发现是否循环移动及移动位数;如果和位32,则优先考虑取反等。



实测中,我们发现128次(0x80)的变换序列就在内存中,如下图,


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-9-2 09:55 被HHHso编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回