首页
社区
课程
招聘
[原创] KCTF2504 第四题 血色试炼 WriteUp
发表于: 2025-8-22 11:37 3745

[原创] KCTF2504 第四题 血色试炼 WriteUp

HHHso 活跃值
26
2025-8-22 11:37
3745


    该题复合自定义的xBase64和xAES算法通过Serial=UserName;迭代四次Serial=xBase64.encode(xAES.encrypt(Serial))得到最终Serial;使用了syscall方式直接调用内核api及异常分发机制。修改的xAES算法由于业务逻辑错误或故意为之,使得128位key实际有效96位,其余32位固定位0.



获取UserName的Serial,这里定义

(1)定制的base64相关的encode和decode业务逻辑声明为:xb64_encode,xb64_decode;

(2)定制的aes相关的encrypt和decrypt业务逻辑声明为:xAES_encrypt,xAES_decrypt;

(3) xAES_decrypt(xb64_decode(...))和xb64_encode(xAES_encrypt(...))分别声明为: dd_code,ee_code;


题目中的验证逻辑为:ee_code(ee_code(ee_code(UserName)))==dd_code(Serial)

此文中IDA相关的主exe分析基址为:0x7ff7a7bb0000


在main函数下述位置定位到异常分发函数Hi_handler


在异常分发函数中我们定位到ee_code函数,其返回一个ostringstream对象,我们对后面的ostringstream_str函数通过frida插桩可以得到每次ee_code的结果,

由于每次样例执行,只触发ee_code三次,我们两次执行样例插桩,用前依次结果作为UserName输入,就可以得到4次以上ee_code结果,从中获取Serial


如图,我们提示输入用户名时,通过frida对ostringstream_str函数进行插桩,其偏移为0x2058

插桩代码

原理


输入KCTF和样例Serial(随意,由于原样例对于不规范serial退出不友好,我们使用样例serial),于是得到KCTF三次ee_code的结果


我们再重复一次,这次UserName输入上述的最后结果【l/SxsR0BCjRZTmc7XWscrMv38iYuoiUECvi9Tuvi+ZiJZmdR5EcvVnTZOZvrnOrw】,得到的【tSzQkyqcvZLgkwDltPF9RpInibA5fTpH/bJni2yvLzTKao2uL5eLZ5QIxPj8bsYWe48ZohC5/Jw3cNNAaX8/rA==】就是UserName=KCTF四次ee_code后的Serial



如图,通过python的pefile模块,我们查看exe的字符串资源



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

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