论坛首页 逆向工程技术区 阅读主题

[原创]KCTF 2025 第六题 WriteUp

67 浏览 0 回复
#1 楼主 2026-06-01 21:08:55
题目是使用易语言写的,加了混淆,特征是会调用 sub_123540D0 函数,如果尝试反编译这个函数调用的上下文函数,IDA 会报一个内部错误,继而反编译引擎失效,不能再反编译新的函数。混淆直接让 IDA 反编译引擎宕机还是比较能唬住人的,但是仔细看下几处混淆附近的汇编指令,会发现混淆模板比较单一,而且特征很明显,会调用 sub_123540D0,对其进行交叉引用分析,便可定位所有影响分析的混淆处,同时被混淆的地方也几乎就是关键函数,下断点回溯分析也是能相当快定位到核心算法代码。可以看到 sub_123540D0 中检验了 ecx 和 edx 是否为 0BADF00Dh 和 0CAFEBABEh 两个魔数,都满足的话会走到 bextr 指令处,应该是这个指令让 IDA 宕机的,正常情况下两个寄存器值不会刚好是魔术要求的值,所以将混淆相关的指令直接 NOP 即可。对 sub_123540D0 进行交叉引用分析,没用多少,可逐一 NOP 混淆指令,以及随后调试可对这些函数下断点。进行调试分析可知,sub_12351552 函数是 check 函数,校验处在 .text:12351A0E call sub_123514A6,这是一个 memcmp 的函数,会比较 0x20 个字节,调试 dump 下来固定比较的字节内容是再往前回溯分析,加密函数是 sub_12352547,参数一是输入字符串,参数二是八字节的 key。去除完混淆进行分析知道,为增加分析难度,加密函数中有一些简单的运算操作,是通过 SIMD(单指令多数据)指令和浮点数运算来实现的,通过调试和 LLM 辅助分析很容易弄清楚在干什么。分析到这里差不多可以交给 LLM 来了,喂给相关函数,可以总结出总体过程和细节分析,贴一下总结。关注细节分析中对输入的处理部分,进行调试,主要有两轮处理。第一轮:第二轮:断在 .text:123536A8 附近直接 dump 下来密钥流字节,不去分析前面复杂的生成过程,整个加密函数效果简单实现如下:随后直接通过 LLM 写出逆向代码求解前面 dump 下来的比较字节即可。运行便可得到 flag。.text:123540D0 sub_123540D0    proc near               ; CODE XREF: .text:123539C6↑p

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288245.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号