-
-
[原创] KCTF2505 第五题 智破幻阵 WriteUp
-
发表于: 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编辑
,原因:
赞赏记录
参与人
雪币
留言
时间
白鸡姜丝
+10
谢谢你的细致分析,受益匪浅!
2025-9-5 15:16
0x指纹
+10
谢谢你的细致分析,受益匪浅!
2025-8-29 11:30
Ally Switch
+10
谢谢你的细致分析,受益匪浅!
2025-8-26 15:05
n00bzx
+1
为你点赞!
2025-8-25 14:43
赞赏
他的文章
赞赏
雪币:
留言: