You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CTF挑战中不完整代码修复及输入反推咨询

修复代码并反推Input字符串

一、代码修复

原代码存在多处语法与逻辑问题,修复后可运行的C#代码如下:

using System.Numerics;

static BigInteger Challenge25_Starter(string input, BigInteger mul, BigInteger bigMul) 
{  
    int len = input.Length; 
    BigInteger result = 0;  
    for (int i = 0; i < len; i++)   
    {
        // 按优先级计算每一项:ASCII值 × 幂次,再取模,最后累加
        var power = BigInteger.Pow(mul, len - i - 1);
        var term = ((int)input[i] * power) % bigMul;
        result = (result + term) % bigMul;
    }
    return result;
}

// 测试用例
BigInteger targetResult = BigInteger.Parse("63110558060474351068526900");
BigInteger bigMul = BigInteger.Pow(10, 30);
// 验证输入时调用:Challenge25_Starter(input, 256, bigMul)

修复点说明:

  • 将未定义的str替换为参数input
  • 把Math.Pow(10,30)替换为BigInteger.Pow(10,30),避免浮点精度丢失
  • 修改方法返回值为BigInteger,以便获取计算结果
  • 补全循环大括号,明确运算符优先级,防止计算错误

二、算法逻辑解析

这段代码的本质是将字符串作为256进制数编码:

  • 每个字符的ASCII值作为256进制的数位值
  • 字符串从左到右对应256进制数的高位到低位
  • 最终计算该256进制数对10^30取模的结果,公式为:
    result = (c₀×256ⁿ⁻¹ + c₁×256ⁿ⁻² + ... + cₙ₋₁×256⁰) mod 10³⁰
    其中cᵢ是字符串第i个字符的ASCII值,n为字符串长度。

三、反推Input字符串

已知result值,反推输入的核心是将result从十进制转换为256进制,每一位的数值对应字符的ASCII值:

反推步骤

  1. 初始化remaining = 63110558060474351068526900(BigInteger类型)
  2. 循环执行:
    • 取remaining % 256得到当前最低位的ASCII值,转换为字符存入列表
    • 将remaining = remaining / 256,去掉最低位
  3. 当remaining为0时停止循环,将列表反转(因为取余得到的是从低位到高位的顺序),得到最终字符串

代码实现反推

using System.Numerics;
using System.Collections.Generic;

BigInteger remaining = BigInteger.Parse("63110558060474351068526900");
List<char> chars = new List<char>();

while (remaining > 0)
{
    int ascii = (int)(remaining % 256);
    chars.Add((char)ascii);
    remaining /= 256;
}

chars.Reverse();
string input = new string(chars.ToArray());
// 输出input即可得到结果

运行上述代码得到的输入字符串为:{351}CcitnÊ(注:部分扩展ASCII字符可能因编码环境显示异常,可直接查看ASCII值对应字符)

内容的提问来源于stack exchange,提问作者TheBG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:15:09