-
-
[原创] KCTF2509 第九题 智斗邪首 WriteUp
-
发表于: 2025-9-1 19:58 2754
-
题目样例对满足特定条件的商Quotient值进行校验,可以忽略商值校验业务逻辑而直接采用name&SN样例对应的商值;被除数为Dividend=xor_odd(name)得到,除数为Divisor=cnl_num_unpack(sn)得到;序列号可通过sn=cnl_num_pack(Dividend_of_KCTF/Quotient)计算得到;题目.NET通过调用释放出来的打包为exe的python样例计算高精度商;.NET做了混淆,并使用Enigma Virtual Box打包。直接通过解包、反混淆、还原python代码等手段解析得解。
如何识别是 Enigma Virtual Box打包的?
如果之前接触过,当看到下图相关节段名时,应该能初步猜定。由于之前没接触过,以为是出题着自己写的封装壳,一度想翻出尘封的牛刀去把IL字节码截取出来重构应用。

从应用入口处,我们可以猜定其跟.NET有关。

我们看看在应用入口前执行的线程回调函数,我们看到对全局变量gv_W50_src进行移动(大小为0x50)

我们在gv_W50_src全局变量的最后一个成员相关数据发现一些敏感字符串

我们在github搜索到关联项目内容

并得到现成可用的Enigma Virtual Box解包工具,参考附件

解包出来后,可以拖进ILSpy进行反编译,如下图,其混淆并带有中文名,这里我们用de4dot工具反混淆下,方便后续直接调用

实际在用binwalk查看原exe样例时,我们发现其内含de4dot相关信息,如下图所示
通过de4dot工具反混淆简单清除下混淆后,结果如下,

由于其类和方法很多都声明为internal和private,用powershell直接加载执行指定类的静态方法或类对象的方法时,会比较麻烦,
这里我们直接用dnSpy将所有innternal和pirvate的类、方法、数据成员的访问属性都改为public,方法powershell直接调用测试
