• 2020.05.05 有空一定补其他题

打不动, 太菜了…..

SignIn

感觉像是签到题。

v10 = __readfsqword(0x28u);
puts("[sign in]");
printf("[input your flag]: ", a2);
__isoc99_scanf("%99s", &v8);
sub_96A(&v8, &v9);
__gmpz_init_set_str(&v7, "ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35", 16LL);
__gmpz_init_set_str(&v6, &v9, 16LL);
__gmpz_init_set_str(&v4, "103461035900816914121390101299049044413950405173712170434161686539878160984549", 10LL);
__gmpz_init_set_str(&v5, "65537", 10LL);
__gmpz_powm(&v6, &v6, &v5, &v4);
if ( (unsigned int)__gmpz_cmp(&v6, &v7) )
puts("GG!");
else
puts("TTTTTTTTTTql!");
return 0LL;

gmp库计算RSA, 标志是这个65537。

直接在factordb分解N

from Crypto.Util.number import long_to_bytes, inverse
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35

n = 103461035900816914121390101299049044413950405173712170434161686539878160984549

p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419

e = 65537

d = inverse(e, (p-1) * (q-1))
m = pow(c, d, n)
print(long_to_bytes(m))

得flag:
suctf{Pwn_@_hundred_years}

hardCpp

用ollvm混淆过的c++代码, 开头给了个类似md5的东西。

开头有个反调:

v45 = time(0LL);
......
v39 = time(0LL);
v38 = v39 - v45;
v49 = v39 - v45;
......
v3 = 0xD3E10A81;
if ( v49 > 0 )
v3 = 0x1E2AAEDE;
v28 = v3;
......
if ( v28 == 0x1E2AAEDE )
{
puts("Let the silent second hand take the place of my doubt...");
exit(0);
}

调试一下就能发现主要流程在这里:

v35 = v38 ^ s[v36];
v34 = main::$_0::operator() const((__int64)&v43, v35);
v33 = main::$_1::operator() const((__int64)&v41, s[v38 - 1 + v36]);
v11 = main::$_1::operator() const(char)::{lambda(int)#1}::operator() const(&v33, 7);
v35 = main::$_0::operator() const(char)::{lambda(char)#1}::operator() const((__int64)&v34, v11);
v32 = main::$_2::operator() const((__int64)&v44, v35);
v31 = main::$_2::operator() const((__int64)&v44, s[v38 - 1 + v36]);
v12 = main::$_2::operator() const(char)::{lambda(char)#1}::operator() const(&v31, 18);
v30 = main::$_3::operator() const(&v42, (unsigned int)v12);
v13 = main::$_3::operator() const(char)::{lambda(char)#1}::operator() const(&v30, 3);
v29 = main::$_0::operator() const((__int64)&v43, v13);
v14 = main::$_0::operator() const(char)::{lambda(char)#1}::operator() const((__int64)&v29, 2);
v15 = main::$_2::operator() const(char)::{lambda(char)#1}::operator() const(&v32, v14);
v16 = 0x4D79419D;
v35 = v15;
v51 = enc[v36 - 1] != v15;

python实现逻辑如下:

a = input[i-1]%7 + input[i]
b = (input()[i-1] ^ 0x12) * 3 + 2
num = (a ^ b) & 0xff

直接爆破, 用可见字符进行过滤:

enc = [0, 0xF3, 0x2E, 0x18, 0x36, 0xE1, 0x4C, 0x22, 0xD1, 0xF9, 0x8C, 0x40, 0x76, 0xF4, 0x0E, 0x00, 0x05, 0xA3, 0x90, 0x0E, 0xA5]

def des(context, num):
if context == 21:
print num
return 0
for i in range(0xFF):
for j in range(0xFF):
a = j%7 + i
b = (j ^ 0x12) * 3 + 2
tmp = (a ^ b) & 0xff
if tmp == enc[context] and j == num[context-1]:
if 32 <= i <= 127:
num.append(i)
des(context+1, num)

for i in range(32, 128):
num = []
num.append(i)
des(1, num)

最终得flag:
#flag{mY-CurR1ed_Fns}

这里是我想复杂了, 四则运算都是可逆的, 所以知道一位就能求出下一位且固定, 不需要写DES来搜….

最后查一下md5发现是‘#’, 也就是第一个字符。

babyunic

使用unicorn引擎, 翻一下unicorn源码可以得知几个函数及参数的意思

可以知道架构是mips, 大端序。

IDA有可以反编译的模块, 但….效果很爆炸….

幸好代码逻辑很简单, 对着输入循环右移5位, 然后异或下标, 最后加减得42个结果。

接下来就是线性代数解42元方程了。

脚本提取方程组:

bg = 0x000000CC
end = 0x0000706C

addr = bg

def next_instr(addr):
return addr + ItemSize(addr)

f = open("data.txt", 'w')

print >> f, '[[1, ',while addr < end:
next = next_instr(addr)
if 'addiu' == GetMnem(addr) :
i = str(GetOperandValue(addr, 1))
dest = next_instr(next)
if 'addu' == GetMnem(dest):
print >> f, "1", elif 'subu' == GetMnem(dest):
print >> f, "-1", if i == '41':
print >> f, "], ", print >> f, "[1", else:
print >> f, ', ', addr = next_instr(addr)
f.close()

然后利用numpy模块求解方程:

from numpy import *

enc = [-108, -200, 294, -216, -1008, 660, -866, 1770, 220, 6, -244, -522, -1406, -816, 386, 990, 334, 690, -1832, 372, -1370, -1580, 450, -1668, 858, 326, -196, -1516, 462, 2012, -696, 152, 2142, -592, -68, 878, -178, -1994, 1472, 1710, 1684, 34]

s = [[1, 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 ], [1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 ], [1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 ], [1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 ], [1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 ], [1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 ], [1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 ], [1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 ], [1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 ], [1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 ], [1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 ], [1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 ], [1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 ], [1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 ], [1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 ], [1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 ], [1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 ], [1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 ], [1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 ], [1 , 1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 ], [1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , 1 , -1 , 1 ], [1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 ], [1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 ], [1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , 1 , -1 ], [1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 ], [1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 ], [1 , -1 , -1 , -1 , -1 , 1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 ], [1 , -1 , -1 , -1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , 1 , 1 ], [1 , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , 1 , 1 , -1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 1 ]]

a = asarray(s)
b = asarray(enc)
x = linalg.solve(a, b)
print(x)
y = []
for i in range(42):
y.append(int(round(x[i])))
print(y)
print(allclose(dot(a, x), b))

flag = ''

for i in range(len(y)):
y[i] ^= i
c = (y[i] << 5 | y[i] >> 3) & 0xff
print c, flag += chr(c)

print flag

最终的flag:
{Un1c0rn_Engin3_Is_@_P0wer7ul_TO0ls!}