答案均是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个三元一次方程,直接脑溢血