签到

动调题目給了一个hex 我们去解密

image

676c60677a74326d716c6074325f6c6575347172316773616c6d686e665f68735e6773385e345e3377657379316e327d

image

gl`gzt2mql`t2_leu4qr1gsalmhnf_hs^gs8^4^3wesy1n2}

能看到这个非常像是flag 但是我们又不知道这个进行了哪些操作 我们尝试第一个就是xor

一般都是xor头部

a = b'gl`gzt2mql`t2_leu4qr1gsalmhnf_hs^gs8^4^3wesy1n2}'
b = b'flag{'
for i in range(0,len(b),2):
    for j in range(100):
        if a[i]^j == b[i]:
            print(j)
            break

运行结果都是1

那么exp

a = bytearray(b'gl`gzt2mql`t2_leu4qr1gsalmhnf_hs^gs8^4^3wesy1n2}')

for i in range(len(a)):
    if i % 2 == 0:
        a[i] ^= 1

print(a.decode())

flag

flag{t3mplat3_met4pr0gramming_is_gr8_4_3very0n3}

那么有人会说了 这个.d文件是什么呀 当然是这个从程序的源码了 当然 flag也在里面 d语言

D 语言是一门编译型语言可以理解成带很多高级特性的 C/C++ 风格语言”。
它长得像 C/C++但语法更现代标准库也更方便
import std.stdio;
import std.range;
import std.algorithm;
import std.string;
import std.traits;
import std.conv;

template enc(string key) {
    string enc(string s) pure @safe {
        pragma(msg, "encrypting with key...", key);
        char enc_add = cast(char) (s.length.to!int);
        string output = "";
        foreach(a,b; cycle(key).zip(s)) {
            output ~= a ^ b ^ enc_add;
        }
        return output;
    }
}

mixin template ForeachUnrolled(string F, int N, int MIN=1) {
    pragma(msg, "ForEach...", N, " to ", MIN);
    static if (N > 1) {
        mixin ForeachUnrolled!(F, N-1, MIN); 
    }
    mixin MakeFunction!(F, N);
}
mixin template MakeFunction(string F, alias T) {
    // Convert $ and %
    mixin(translate(F, ['$' : T.to!(string), '%' : (T-1).to!string]));
}

string encrypt(string s) pure @safe {
    const int n = 499; // 500 is DMD's template recursion limit
    //const int n = 30;
    string output_0 = s; // base case with our string
    mixin ForeachUnrolled!("string output_$ = enc!($$$.to!string)(output_%);", n);
    mixin("return output_" ~ n.to!string ~ ";");
}

string hexencode(string s) {
    string encoded = "";
    foreach (c; s) {
        encoded ~= format("%02x", c);
    }
    return encoded;
}

string enc_flag = encrypt("flag{t3mplat3_met4pr0gramming_is_gr8_4_3very0n3}");
void main() {
    writeln("Your hexencoded, encrypted flag is: ", enc_flag.hexencode);
    writeln("I generated it at compile time. :)");
    writeln("Can you decrypt it for me?");
}