文章目录
大佬请喝咖啡
反编译
解释\u:
就是一个数字编码,只不过它是两个字节,所以需要使用Unicode编码,ascii码只有一字节,没办法大于256(官方是128),所以这里的话,只需要把\u换成0x,即可和字符进行相乘
z3解码
from z3 import *
s=Solver()
charArray=[Int('a1[' + str(i) + ']') for i in range(9)]
for i in range(9):
s.add(charArray[0] *4778 + charArray[1] * 3659 + charArray[2] * 9011 + charArray[3] * 5734 + charArray[4] * 4076 + charArray[5] * 6812 + charArray[6] * 8341 + charArray[7] * 6765 + charArray[8] * 7435 == 5711942)
s.add(charArray[0] * 4449+ charArray[1] * 5454 + charArray[2] * 4459 + charArray[3] * 5800 + charArray[4] * 6685 + charArray[5] * 6120 + charArray[6] * 7357 + charArray[7] * 3561 + charArray[8] * 5199 == 4885863)
s.add(charArray[0] * 3188 + charArray[1] * 6278 + charArray[2] * 9411 + charArray[3] * 5760 + charArray[4] * 9909 + charArray[5] * 7618 + charArray[6] * 7184 + charArray[7] * 4791 + charArray[8] * 0x21ee == 6387690)
s.add(charArray[0] * 0x227b + charArray[1] * 0x1cfb + charArray[2] * 0x1b79 + charArray[3] * 0x245a + charArray[4] * 0x1c84 + charArray[5] * 0x168e + charArray[6] * 0x19bc + charArray[7] * 0x15a5 + charArray[8] * 0x1214 == 6077067)
s.add(charArray[0] * 0x164b + charArray[1] * 0x16a1 + charArray[2] * 0x11ed + charArray[3] * 0x1a17 + charArray[4] * 0xf84 + charArray[5] * 0x16f4 + charArray[6] * 0x1a0c + charArray[7] * 0x173f + charArray[8] * 0x2561 == 5492294)
s.add(charArray[0] * 0x25d5 + charArray[1] * 0x1cca + charArray[2] * 0x1228 + charArray[3] * 0x1c3e + charArray[4] * 0x258e + charArray[5] * 0x26fb + charArray[6] * 0x2075 + charArray[7] *0x259f + charArray[8] * 0x2438 == 7562511)
s.add(charArray[0] * 0x1b2b + charArray[1] * 0x2177 + charArray[2] * 0x1f0d + charArray[3] * 0x21fb + charArray[4] * 0xcd4 + charArray[5] * 0x19f7 + charArray[6] * 0x0c67 + charArray[7] * 0x213a + charArray[8] * 0x1998 == 5970432)
s.add(charArray[0] * 0x10e3 + charArray[1] * 0x1262 + charArray[2] * 0x1f91 + charArray[3] * 0x1edc + charArray[4] * 0x12fe + charArray[5] * 0x2548 + charArray[6] * 0x145b + charArray[7] * 0x1d13 + charArray[8] * 0x162c == 5834523)
s.add(charArray[0] * 0x0bce + charArray[1] * 0x2327 + charArray[2] * 0x13c2 + charArray[3] * 0x11b1 + charArray[4] * 0xf64 + charArray[5] * 0x10b7 + charArray[6] * 0x11fe + charArray[7] * 0xd64 + charArray[8] * 0x22b9 == 4681110)
if s.check()==sat:
print()
print(s.model())
moectf{EXcalibur}
A_game
数独题:
输入的东西进行数独阵填充:
unsigned char box[] =
{
0, 0, 5, 0, 0, 4, 3, 6, 0,
0, 0, 0, 0, 5, 0, 0, 2, 4,
0, 4, 9, 6, 7, 0, 0, 0, 0,
1, 0, 6, 0, 2, 0, 0, 3, 0,
9, 0, 0, 7, 0, 0, 1, 0, 8,
0, 3, 0, 0, 0, 5, 0, 9, 0,
2, 0, 0, 5, 0, 7, 0, 0, 9,
7, 0, 4, 0, 0, 0, 8, 0, 0
0, 9, 0, 0, 4, 0, 0, 0, 6,
}
主要是三个函数:
这里判断行数据是1~9:
for ( i = 0; i <= 8; ++i )
{
for ( j = 1; j <= 9; ++j )
{
for ( k = 0; ; ++k )
{
result = (unsigned int)(char)box[9 * i + k];// 这里判断行数据是1~9
if ( j == (_DWORD)result )
break;
if ( k == 8 )
{
printf("Wrong!!!Try again!!!");
system("pause");
exit(0);
}
}
}
}
这里判断列数据是1~9:
for ( i = 0; i <= 8; ++i )
{
for ( j = 1; j <= 9; ++j )
{
for ( k = 0; ; ++k )
{
result = (unsigned int)(char)box[9 * k + i];// 判断列数据是1~9
if ( j == (_DWORD)result )
break;
if ( k == 8 )
{
printf("Wrong!!!Try again!!!");
system("pause");
exit(0);
}
}
}
}
return result;
}
99数独阵分为9个33方阵,每个方阵数据1~9
for ( i = 0; i <= 8; i += 3 )
{
for ( j = 0; j <= 8; j += 3 )
{
for ( k = 1; k <= 9; ++k )
{
v5 = 0;
v4 = 0;
while ( 1 )
{
result = (unsigned int)(char)box[9 * i + 9 * v5 + j + v4];// i代表行 j代表列
if ( k == (_DWORD)result )
break;
if ( v5 == 2 && v4 == 2 )
{
printf("Wrong!!!Try again!!!");
system("pause");
exit(0);
}
if ( ++v4 == 3 )
{
++v5;
v4 = 0;
}
}
}
}
}
进行异或magic
脚本
在线数独求解器
a=b'8291767138932581849755263447186268341129653538127'
magic =[107,2,102,112,68,105,126,110,67,74,
120,
74,
109,
96,
86,
0,
81,
89,
80,
67,
80,
81,
109,
116,
2,
85,
80,
82,
110,
111,
121,
64,
93,
75,
30,
25,
28,
116,
3,
84,
7,
76,
82,
106,
96,
80,
88,
64,
88,]
for i in range(len(a)):
print(chr(a[i]^magic[i]),end='')
moectf{S0_As_I_prAy_Un1imited_B1ade_WOrks---E1m1ya_Shiro}