三道简单的CTF夺旗题(找flag)答案

答案均是flag{}格式
1.z3是个什么东东?

<html>
    <head>
        <title>z3title>
    head>
    <body>
        <div>
            <input type="text" name="flag" id="flag">
            <button id="check">getFlagbutton>
        div>
        <script>
            var check = document.getElementById('check')
            check.onclick = function() {
                var t = document.getElementById('flag').value;
                checkFlag(t) ? alert("Congratulations!!! Your flag is " + t) : alert("You need good good study~~")
            }
            function checkFlag(f) {
                l = []
                for (let i of f) {
                    l.push(i.charCodeAt())
                }
                return (
                    f.length === 38 &&
                    checkRange(l) &&
                    (((l[0]*2022+l[1])*2022+l[2])*2022+l[3])*2022+l[4] === 1705894768235433 &&
                    checkXor(l) &&
                    l[31]*3 + l[32]*2 + l[33]*5 === 676 &&
                    l[31]*4 + l[32]*7 + l[33]*9 === 1270 &&
                    l[31] + l[32]*8 + l[33]*2 === 654 &&
                    l[34]*3 + l[35]*2 + l[36]*5 === 556 &&
                    l[34]*4 + l[35]*7 + l[36]*9 === 1104 &&
                    l[34] + l[35]*8 + l[36]*2 === 593 &&
                    l[37] === 125
                    )
            }

            function checkRange(l) {
                for (let i = 0; i < l.length; i++) {
                    if (!(32128)){
                        return false
                    }
                }
                return true
            }

            function checkXor(l) {
                var en = [37, 3, 9, 72, 16, 32]
                var output = [29, 71, 51, 98, 56, 108, 42, 46, 36, 32, 20, 16, 71, 19, 96, 52, 57, 107, 112, 113, 115, 37, 23, 19, 68, 16]
                var x = []
                var k = 5
                for (let i = 0; i < 13; i++) {
                    var b=l[k]
                    var c=l[k+1]
                    x.push(c ^ en[i % 6])
                    x.push(b ^ en[i % 6])
                    k += 2
                }
                for (let i = 0; i < output.length; i++) {
                    if (output[i] !== x[i]) {
                        return false
                    }
                }
                return true
            }
        script>
        <style>
            input, button{
                box-sizing: border-box;
                text-align:center;
                font-size:1.4em;
                height:2.0em;
                border-radius:6px;
                border:1px solid #5fb574;
                color:#0ec8e6;
            }
            input {
                width: 500px;
            }
            div{
                text-align: center;
                padding-top: 20%; 
            }
        style>
    body>
html>

2.MT19937

public class Test {
    public static long convert(long m){
        m = m ^ m >> 13;
        m = m ^ m << 9 & 2029229568L;
        m = m ^ m << 17 & 2245263360L;
        m = m ^ m >> 19;
        return m;
    }
  public static String transform(String message){
      StringBuilder newMessage = new StringBuilder();
      for (int i = 0; i < message.length()/8; i++) {
        String block = message.substring(i * 8, i * 8 + 8);
        long t = Long.parseUnsignedLong(block, 16);
        long r = convert(t);
        String formatInt = Long.toHexString(r);
        newMessage.append(formatInt);
      }
      return newMessage.toString();
    }
    public static void main(String[] args) {
        String input="flag{********************************}";
        System.out.println(transform(input.substring(5, 37)));
        // b1df4092728ac5aa2a9cc96b603e1f02
    }
}

3.高中的时候没好好学习吧😎


import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class Mef {

    public static void main(String[] args) {
        BigInteger p = new BigInteger("1000000000000000000000000000000000000000163", 16);
        String flag = "flag{********************************}";
        BigInteger flagNum = bytesToLong(flag.substring(5, 37));
        List h = new ArrayList<>();
        h.add(new BigInteger("1"));
        BigInteger m = new BigInteger("238bc49a6f546238f01e6a3eedb409960e612991b8045701aed007fbbc254b27", 16);
        for (int i = 0; i < 0x741; i++) {
            BigInteger x = h.get(i).multiply(p).mod(m);
            x = x.add(h.get(0)).mod(m);
            h.add(x);
        }
        System.out.println(h.get(0x741).xor(flagNum));
        // 16207664716008701490247580301619061238655545352270591846654837545813283501987
    }

    private static BigInteger bytesToLong(String m) {
        char[] charArray = m.toCharArray();
        StringBuilder num = new StringBuilder();
        for (char aChar : charArray) {
            num.append(Integer.toHexString(aChar));
        }
        return new BigInteger(num.toString(), 16);
    }
}

全部问题都已解答!!!!!!!!!!!

中间竟然还有2个三元一次方程,直接脑溢血