这次re至少能看懂
RE again! 打开后发现一个py打包的exe和bin2.pyc
反编译一下第一个文件,说是要用这个文件去解密bin2,但是看不懂QAQ
但是二进制形式打开bin2,观察可以发现出现大量一样的
a405b5d321e446459d8f9169d027bd92
怀疑是异或,所以
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import structdef xor_with_key (input_file, key, output_file ): with open (input_file, 'rb' ) as fin, open (output_file, 'wb' ) as fout: while True : chunk = fin.read(32 ) if len (chunk) == 0 : break data = bytearray (len (chunk)) for i in range (len (chunk)): data[i] = chunk[i] ^ ord (key[i % len (key)]) fout.write(data) key = "a405b5d321e446459d8f9169d027bd92" xor_with_key('bin2' , key, 'output.bin' )
然后得到的文件再二进制打开一下,是winPE,就ida打开
主函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 int __fastcall main (int argc, const char **argv, const char **envp) { __int64 v3; int key[6 ]; sub_140001020("plz input your flag:" ); sub_140001080("%32s" ,flag); key[0 ] = 0x1234 ; key[1 ] = 0x2341 ; key[2 ] = 0x3412 ; key[3 ] = 0x4123 ; encode(key); i = 0 i64; while ( flag[i] == *(_DWORD *)((char *)&check + i * 4 ) ) { if ( ++v3 >= 8 ) { sub_140001020("Congratulations!" ); return 0 ; } } sub_140001020("Wrong!try again..." ); return 0 ; }
看起来就是flag以dword来加密然后比较,encode里面是一个TEA变体,直接逆就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #include <iostream> using namespace std;int main (void ) { unsigned int s6; unsigned int delta; unsigned int s5; unsigned int s4; unsigned int s3; unsigned int s2; unsigned int s1; unsigned int s0; unsigned int v11; unsigned int s7; unsigned int flag[8 ] = { 0x506FB5C3 , 0xB9358F45 , 0xC91AE8C7 , 0x3820E280 , 0xD13ABA83 , 0x975CF554 , 0x4352036B , 0x1CD20447 }; unsigned int key[4 ] = { 0x00001234 , 0x00002341 , 0x00003412 , 0x00004123 }; unsigned int key_[4 ] = { 0x00001234 , 0x00002341 , 0x00003412 , 0x00004123 }; s7 = flag[7 ]; s1 = flag[1 ]; s2 = flag[2 ]; s3 = flag[3 ]; s4 = flag[4 ]; s5 = flag[5 ]; s6 = flag[6 ]; s0 = flag[0 ]; delta = 0 ; delta += 0x7937B99E * 12 ; for (int i = 0 ; i < 12 ; i++) { v11 = key[(delta >> 2 ) & 3 ]; s7 -= (((s6 ^ key[(delta >> 2 ) & 3 ^ 3 ]) + (delta ^ flag[0 ])) ^ (((16 * s6) ^ (flag[0 ] >> 3 )) + ((s6 >> 5 ) ^ (4 * flag[0 ])))); s6 -= ((s5 ^ key[(delta >> 2 ) & 3 ^ 2 ]) + (delta ^ s7)) ^ (((16 * s5) ^ (s7 >> 3 )) + ((s5 >> 5 ) ^ (4 * s7))); s5 -= ((delta ^ s6) + (s4 ^ key[(delta >> 2 ) & 3 ^ 1 ])) ^ (((16 * s4) ^ (s6 >> 3 )) + ((s4 >> 5 ) ^ (4 * s6))); s4 -= ((delta ^ s5) + (s3 ^ v11)) ^ (((16 * s3) ^ (s5 >> 3 )) + ((s3 >> 5 ) ^ (4 * s5))); s3 -= ((delta ^ s4) + (s2 ^ key[(delta >> 2 ) & 3 ^ 3 ])) ^ (((16 * s2) ^ (s4 >> 3 )) + ((s2 >> 5 ) ^ (4 * s4))); s2 -= ((delta ^ s3) + (s1 ^ key[(delta >> 2 ) & 3 ^ 2 ])) ^ (((16 * s1) ^ (s3 >> 3 )) + ((s1 >> 5 ) ^ (4 * s3))); s1 -= ((delta ^ s2) + (flag[0 ] ^ key[(delta >> 2 ) & 3 ^ 1 ])) ^ (((16 * flag[0 ]) ^ (s2 >> 3 )) + ((flag[0 ] >> 5 ) ^ (4 * s2))); flag[0 ] -= (((delta ^ s1) + (s7 ^ v11)) ^ (((16 * s7) ^ (s1 >> 3 )) + ((s7 >> 5 ) ^ (4 * s1)))); delta -= 0x7937B99E ; } flag[7 ] = s7; flag[1 ] = s1; flag[2 ] = s2; flag[3 ] = s3; flag[4 ] = s4; flag[5 ] = s5; flag[6 ] = s6; for (int i = 0 ; i < 8 ; i++) cout << hex << flag[i] << endl; }
change 直接ida打开 主函数如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sub_7FF787FD21E0(v10, "am2qasl" , envp); v6 = std ::shared_ptr <__ExceptionPtr>::operator=((__int64)v7, v10); sub_7FF787FD2280(a, v6); sub_7FF787FD1410(std ::cout , "plz input your flag:" ); sub_7FF787FD10F0(std ::cin , &flag); sub_7FF787FD29A0((__int64)a, (__int64)b, (__int64)&flag); for ( i = 0 ; i < 24 ; ++i ) { last = byte_7FF787FD8000[i]; if ( last != *(char *)sub_7FF787FD2960((__int64)b, i) ) { sub_7FF787FD1410(std ::cout , "sry,try again..." ); std ::string ::~string (b); sub_7FF787FD2780(a); std ::string ::~string (v10); return 0 ; } } sub_7FF787FD1410(std ::cout , "Congratulations!" ); std ::string ::~string (b); sub_7FF787FD2780(a); std ::string ::~string (v10); return 0 ;
化简一下
1 2 3 4 5 6 sub_7FF787FD10F0(std ::cin , &flag); sub_7FF787FD29A0((__int64)a, (__int64)b, (__int64)&flag); for ( i = 0 ; i < 24 ; ++i ) { last = byte_7FF787FD8000[i]; if ( last != *(char *)sub_7FF787FD2960((__int64)b, i) )
那就完了,sub_7FF787FD29A0肯定是加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 _QWORD *__fastcall sub_7FF787FD29A0 (_QWORD *a, _QWORD *b, _QWORD *flag) { char *v3; char v4; char *v5; int i; unsigned int Duration; unsigned int v9; unsigned __int64 v10; unsigned __int64 v11; std ::shared_ptr <__ExceptionPtr>::operator=((__int64)b, flag); for ( i = 0 ; i < (unsigned __int64)unknown_libname_20(b); ++i ) { if ( i % 2 ) { sub_7FF787FD2D20(sub_7FF787FD3670); v11 = unknown_libname_20(a); v9 = *(char *)sub_7FF787FD2960(a, i % v11); v5 = (char *)sub_7FF787FD2960(b, i); beep(*v5, v9); } else { sub_7FF787FD2D20(sub_7FF787FD3650); v10 = unknown_libname_20(a); Duration = *(char *)sub_7FF787FD2960(a, i % v10); v3 = (char *)sub_7FF787FD2960(b, i); beep(*v3, Duration); } *(_BYTE *)sub_7FF787FD2960(b, i) = v4; } return b; }
根据奇数位和偶数位来分别加密:
奇数位直接和key异或 偶数位异或完加10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from prism import *last = cal([0x13 , 0x0A , 0x5D , 0x1C , 0x0E , 0x08 , 0x23 , 0x06 , 0x0B , 0x4B , 0x38 , 0x22 , 0x0D , 0x1C , 0x48 , 0x0C , 0x66 , 0x15 , 0x48 , 0x1B , 0x0D , 0x0E , 0x10 , 0x4F , ]) a = cal([0x61 , 0x6D , 0x32 , 0x71 , 0x61 , 0x73 , 0x6C ]) c = '' for i in range (len (last)): if (i%2 ): c += chr (last[i]) else : c += chr (last[i]-10 ) pxor(c,a)
crackme2 这个题把我坑惨了……
ida打开之后反编译有标红,对应位置的指令是:mov byte ptr ds:0, 1 于是准备先不管,去看主体逻辑
1 2 3 4 5 6 7 sub_1400035C4("%50s" , v6); MEMORY[0 ] = 1 ; v3 = sub_14000105C(v6); v4 = "right flag!" ; if ( !v3 ) v4 = "wrong flag!" ; puts (v4);
很明显v6是flag,v3是最后的校验信息1或0
sub_14000105C打开后是换表base64
解密后发现是hgame{th1s_i5_fake_fl4g}假的,那哪里有问题呢
既然不能正确反编译主函数,那就尝试直接读汇编指令
在这一段发现了virtalprotect函数,好家伙!原来是加密了。
阅读后可知,是把加密函数和一个位置异或加密了,运行解密脚本:
1 2 3 4 5 6 start = 0x14000105C loop = 0x246a j = 0 for i in range(start,loop+start): patch_byte(i,get_wide_byte(i)^get_wide_byte(0x140006000+j)) j += 1
在用u+c+p组合拳然后tab反汇编后是多项式方程,用z3求解即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 from prism import *a1 = [BitVec('a1[%i]' % i,8 ) for i in range (32 )] v1 = a1[25 ] v2 = a1[21 ] v3 = a1[31 ] v4 = a1[29 ] v5 = a1[0 ] v6 = a1[23 ] v7 = a1[8 ] v8 = a1[28 ] v9 = a1[12 ] v10 = a1[3 ] v11 = a1[2 ] v19 = a1[30 ] v15 = a1[18 ] v16 = a1[24 ] v27 = a1[11 ] v17 = a1[26 ] v30 = a1[14 ] v40 = a1[7 ] v26 = a1[20 ] v37 = 2 * v26 v42 = a1[22 ] v28 = a1[1 ] v25 = a1[27 ] v21 = a1[19 ] v23 = a1[16 ] v31 = a1[13 ] v29 = a1[10 ] v41 = a1[5 ] v24 = a1[4 ] v20 = a1[15 ] v39 = a1[17 ] v22 = a1[6 ] v18 = a1[9 ] v33 = 2 * v41 v38 = 2 * v16 v32 = 2 * v18 v35 = v25 + v30 v34 = 2 * v31 v12 = v10 + 2 * (v31 + 4 * (v29 + v17)) + v31 + 4 * (v29 + v17) v36 = 3 * v21 v13 = v6 + v1 + 8 * v6 + 4 * (v8 + 2 * v27) s = Solver() for a in a1: s.add(a >= 32 , a <= 126 ) s.add(a1[0 ]==ord ('h' )) s.add(a1[1 ]==ord ('g' )) s.add(a1[2 ]==ord ('a' )) s.add(a1[3 ]==ord ('m' )) s.add(a1[4 ]==ord ('e' )) s.add(a1[5 ]==ord ('{' )) s.add(a1[31 ]==ord ('}' )) s.add(v18 + 201 * v24 + 194 * v10 + 142 * v20 + 114 * v39 + 103 * v11 + 52 * (v17 + v31) + ((v9 + v23) << 6 ) + 14 * (v21 + 4 * v25 + v25) + 9 * (v40 + 23 * v27 + v2 + 3 * v1 + 4 * v2 + 4 * v6) + 5 * (v16 + 23 * v30 + 2 * (v3 + 2 * v19) + 5 * v5 + 39 * v15 + 51 * v4) + 24 * (v8 + 10 * v28 + 4 * (v42 + v7 + 2 * v26)) + 62 * v22 + 211 * v41 + 212 * v29 == 296473 ) s.add(207 * v41 + 195 * v22 + 151 * v40 + 57 * v5 + 118 * v6 + 222 * v42 + 103 * v7 + 181 * v8 + 229 * v9 + 142 * v31 + 51 * v29 + 122 * (v26 + v20) + 91 * (v2 + 2 * v16) + 107 * (v27 + v25) + 81 * (v17 + 2 * v18 + v18) + 45 * (v19 + 2 * (v11 + v24) + v11 + v24) + 4 * (3 * (v23 + a1[19 ] + 2 * v23 + 5 * v4) + v39 + 29 * (v10 + v1) + 25 * v15) + 26 * v28 + 101 * v30 + 154 * v3 == 354358 ) s.add(And((177 * v40 + 129 * v26 + 117 * v42 + 143 * v28 + 65 * v8 + 137 * v25 + 215 * v21 + 93 * v31 + 235 * v39 + 203 * v11 + 15 * (v7 + 17 * v30) + 2 * (v24 + 91 * v9 + 95 * v29 + 51 * v41 + 81 * v20 + 92 * v18 + 112 * (v10 + v6) + 32 * (v22 + 2 * (v1 + v23)) + 6 * (v2 + 14 * v16 + 19 * v15) + 83 * v5 + 53 * v4 + 123 * v19) + v17 + 175 * v27 + 183 * v3 == 448573 ) , (113 * v19 + 74 * v3 + 238 * v6 + 140 * v2 + 214 * v26 + 242 * v8 + 160 * v21 + 136 * v23 + 209 * v9 + 220 * v31 + 50 * v24 + 125 * v10 + 175 * v20 + 23 * v39 + 137 * v22 + 149 * v18 + 83 * (v4 + 2 * v30) + 21 * (9 * v29 + v16) + 59 * (4 * v27 + v17) + 41 * (v1 + v41) + 13 * (v7 + 11 * (v40 + v15) + 6 * v42 + 4 * (v28 + 2 * v11) + v28 + 2 * v11 + 17 * v5) + 36 * v25 == 384306 ) , (229 * v21 + 78 * v1 + v2 + v9 + 133 * v27 + 74 * v6 + 69 * v26 + 243 * v7 + 98 * v28 + 253 * v8 + 142 * v25 + 175 * v31 + 105 * v41 + 221 * v10 + 121 * v39 + 218 * (v19 + v29) + 199 * (v24 + v30) + 33 * (v40 + 7 * v17) + 4 * (27 * v20 + 50 * v11 + 45 * v18 + 19 * (v3 + v42) + v16 + 16 * v23 + 52 * v4) + 195 * v22 + 211 * v5 + 153 * v15 == 424240 ) , (181 * v25 + 61 * v2 + 65 * v21 + 58 * v31 + 170 * v29 + 143 * v24 + 185 * v10 + 86 * v11 + 97 * v22 + 235 * (v23 + v27) + 3 * (53 * v41 + 74 * (v8 + v3) + 13 * (v42 + 6 * v9) + 11 * (v39 + 7 * v20) + 15 * (v18 + 4 * v17) + v7 + 35 * v1 + 29 * v15) + 4 * (57 * v6 + 18 * (v5 + v37) + v28 + 17 * v16 + 55 * v30) + 151 * v40 + 230 * v4 + 197 * v19 == 421974 ) , (209 * v21 + 249 * v30 + 195 * v2 + 219 * v25 + 201 * v39 + 85 * v18 + 213 * (v17 + v31) + 119 * (v11 + 2 * v41) + 29 * (8 * v24 + v40 + 4 * v27 + v27) + 2 * (v8 + 55 * (2 * v29 + v19) + 3 * (v10 + 39 * v9 + 2 * (v6 + 20 * v20) + 35 * v7) + 4 * (v5 + 31 * v42 + 28 * v3) + 26 * v28 + 46 * (v37 + v16) + 98 * v1) + 53 * v23 + 171 * v15 + 123 * v4 == 442074 ) , ( 162 * v19 + 74 * v5 + 28 * v27 + 243 * v42 + 123 * v28 + 73 * v8 + 166 * v23 + 94 * v24 + 113 * v11 + 193 * v22 + 122 * (v6 + 2 * v7) + 211 * (v10 + v25) + 21 * (v17 + 7 * v41) + 11 * (v4 + 23 * (v16 + v39) + 2 * (v40 + 5 * v30 + 2 * (2 * v18 + v29) + 2 * v18 + v29)) + 5 * (46 * v9 + 26 * v20 + 4 * (v31 + 2 * v21) + v15 + 27 * v2 + 10 * v1) + 36 * (v3 + 5 * v26) == 376007 ) , (63 * v19 + 143 * v5 + 250 * v6 + 136 * v2 + 214 * v40 + 62 * v26 + 221 * v42 + 226 * v7 + 171 * v28 + 178 * v8 + 244 * v23 + ((v9 << 7 )) + 150 * v31 + 109 * v29 + 70 * v41 + 127 * v20 + 204 * v39 + 121 * v22 + 173 * v18 + 69 * (v25 + v30 + v27) + 74 * (v16 + 2 * v15 + v15) + 22 * (7 * v24 + v17 + 10 * v11) + 40 * (v1 + 4 * v21 + v21) + 81 * v10 + 94 * v4 + 84 * v3 == 411252 ) , (229 * v15 + 121 * v4 + 28 * v30 + 206 * v16 + 145 * v27 + 41 * v1 + 247 * v6 + 118 * v26 + 241 * v28 + 79 * v8 + 102 * v25 + 124 * v23 + 65 * v9 + 68 * v31 + 239 * v17 + 148 * v24 + 245 * v39 + 115 * v11 + 163 * v22 + 137 * v18 + 53 * (v5 + 2 * v29) + 126 * (v40 + 2 * v10) + 38 * (v7 + v21 + 4 * v7 + 6 * v41) + 12 * (v2 + 16 * v42) + 109 * v20 + 232 * v3 + 47 * v19 == 435012 ) , (209 * v21 + 233 * v40 + 93 * v1 + 241 * v2 + 137 * v8 + 249 * v17 + 188 * v29 + 86 * v24 + 246 * v10 + 149 * v20 + 99 * v11 + 37 * v22 + 219 * v18 + 17 * (v6 + 10 * v25) + 49 * (v5 + 3 * v3 + 4 * v28 + v28) + 5 * (16 * v39 + 11 * (v41 + 2 * v27 + v27) + 12 * v7 + v31 + 30 * v16 + 27 * v19) + 18 * (v23 + 2 * (v4 + v26 + 2 * v4) + v4 + v26 + 2 * v4) + 24 * v9 + 109 * v42 + 183 * v30 + 154 * v15 == 392484 ) , (155 * v15 + 247 * v40 + 157 * v28 + 119 * v23 + 161 * v17 + 133 * v20 + 85 * v22 + 229 * (v7 + v24) + 123 * (2 * v31 + v42) + 21 * (v41 + 12 * v30) + 55 * (v9 + v5 + v18 + 2 * v5) + 15 * (v3 + 16 * v10 + 9 * v21) + 2 * (v2 + 115 * v29 + 111 * v16 + 26 * v6 + 88 * v8 + 73 * v39 + 71 * v11 + 28 * (v26 + 2 * (v25 + 2 * v1)) + 51 * v27 + 99 * v4 + 125 * v19) == 437910 ) , (220 * v3 + 200 * v4 + 139 * v15 + 33 * v5 + 212 * v30 + 191 * v16 + 30 * v27 + 233 * v1 + 246 * v6 + 89 * v2 + 252 * v40 + 223 * v42 + 19 * v25 + 141 * v21 + 163 * v9 + 185 * v17 + 136 * v31 + 46 * v24 + 109 * v10 + 217 * v39 + 75 * v22 + 157 * v18 + 125 * (v11 + v19) + 104 * (v33 + v20) + 43 * (v28 + 2 * v29 + v29) + 32 * (v8 + v7 + 2 * v8 + 2 * (v23 + v26)) == 421905 ) , (211 * v24 + 63 * v15 + 176 * v5 + 169 * v16 + 129 * v27 + 146 * v40 + 111 * v26 + 68 * v42 + 39 * v25 + 188 * v23 + 130 * v9 + ((v31 << 6 )) + 91 * v41 + 208 * v20 + 145 * v39 + 247 * v18 + 93 * (v22 + v17) + 71 * (v6 + 2 * v11) + 103 * (v8 + 2 * v30) + 6 * (v21 + 10 * v28 + 28 * v7 + 9 * v29 + 19 * v2 + 24 * v1 + 22 * v3) + 81 * v10 + 70 * v4 + 23 * v19 == 356282 ) , (94 * v42 + 101 * v2 + 152 * v40 + 200 * v7 + 226 * v8 + 211 * v23 + 121 * v24 + 74 * v11 + 166 * v18 + (((v6 + 3 * v28) << 6 )) + 41 * (4 * v9 + v21) + 23 * (v39 + 11 * v41) + 7 * (v20 + 10 * v25 + 2 * v12 + v12) + 3 * (78 * v30 + 81 * v16 + 55 * v27 + 73 * v1 + 4 * v26 + v15 + 85 * v3 + 65 * v19) + 62 * v22 + 88 * v5 + 110 * v4 == 423091 ) , (133 * v22 + 175 * v15 + 181 * v30 + 199 * v16 + 123 * v27 + 242 * v1 + 75 * v6 + 69 * v2 + 153 * v40 + 33 * v26 + 100 * v42 + 229 * v7 + 177 * v8 + 134 * v31 + 179 * v29 + 129 * v41 + 14 * v10 + 247 * v24 + 228 * v20 + 92 * v11 + 86 * (v9 + v32) + 94 * (v23 + v21) + 37 * (v17 + 4 * v3) + 79 * (v25 + 2 * v28) + 72 * v5 + 93 * v39 + 152 * v4 + 214 * v19 == 391869 ) , (211 * v24 + 213 * v18 + 197 * v40 + 159 * v25 + 117 * v21 + 119 * v9 + 98 * v17 + 218 * v41 + 106 * v39 + 69 * v11 + 43 * (v2 + v29 + 2 * v2) + 116 * (v4 + v10 + v37) + 5 * (v42 + 9 * v23 + 35 * v20 + 37 * v31) + 11 * (v16 + 13 * v27 + 5 * v5 + 8 * v30) + 6 * (29 * v28 + 25 * v8 + 38 * v22 + v15 + 13 * v1 + 10 * v3) + 136 * v7 + 142 * v6 + 141 * v19 == 376566 ) , (173 * v3 + 109 * v15 + 61 * v30 + 187 * v1 + 79 * v6 + 53 * v40 + 184 * v21 + 43 * v23 + 41 * v9 + 166 * v31 + 193 * v41 + 58 * v24 + 146 * v10 + ((v20 << 6 )) + 89 * v39 + 121 * v11 + 5 * (v17 + 23 * v8) + 7 * (29 * v18 + v29 + 4 * v7) + 13 * (3 * v42 + v16 + 7 * v26 + 13 * v2) + 3 * (v4 + 83 * v5 + 51 * v27 + 33 * v22 + 8 * (v19 + 4 * v28) + 18 * v25) == 300934 ) , (78 * v1 + 131 * v5 + 185 * v16 + 250 * v40 + 90 * v26 + 129 * v42 + 255 * v28 + 206 * v8 + 239 * v25 + 150 * v10 + 253 * v39 + 104 * v22 + 58 * (v2 + 2 * v7) + 96 * (v15 + v31) + 117 * (v9 + 2 * v4) + 27 * (v17 + 8 * v18 + v18) + 19 * (v23 + 3 * v21 + 4 * v29 + v29) + 7 * (22 * v41 + 3 * (v11 + 11 * v24) + v3 + 29 * v6 + 14 * v27) + 109 * v20 + 102 * v30 + 100 * v19 == 401351 ) , (233 * v19 + 71 * v5 + 209 * v27 + 82 * v6 + 58 * v26 + 53 * v25 + 113 * v23 + 206 * v31 + 39 * v41 + 163 * v20 + 222 * v11 + 191 * v18 + 123 * (v7 + v40) + 69 * (v9 + 2 * v22 + v22) + 9 * (v3 + 8 * v24 + 7 * (3 * v1 + v28) + 5 * v16 + 19 * v30) + 4 * (v15 + 26 * v17 + 61 * v29 + 43 * v42 + 49 * v2 + 32 * v4) + 10 * (7 * (v8 + v36) + v39 + 12 * v10) == 368427 ) , (139 * v30 + 53 * v5 + 158 * v16 + 225 * v1 + 119 * v6 + 67 * v2 + 213 * v40 + 188 * v28 + 152 * v8 + 187 * v21 + 129 * v23 + 54 * v9 + 125 * v17 + 170 * v24 + 184 * v11 + 226 * v22 + 253 * v18 + 26 * (v29 + v41) + 97 * (v4 + 2 * v25) + 39 * (5 * v26 + v27) + 21 * (v39 + 8 * v42) + 12 * (17 * v10 + v31 + 15 * v7 + 12 * v19) + 165 * v20 + 88 * v15 + 157 * v3 == 403881 ) , (114 * v3 + 61 * v27 + 134 * v40 + 62 * v42 + 89 * v9 + 211 * v17 + 163 * v41 + 66 * v24 + 201 * (v7 + v18) + 47 * (5 * v16 + v22) + 74 * (v4 + v31) + 142 * (v2 + v28) + 35 * (v20 + 6 * v26) + 39 * (v15 + 6 * v30) + 27 * (v25 + 9 * v23 + 8 * v6) + 4 * (v21 + 63 * v19 + 2 * (v1 + 12 * (v10 + v5) + 8 * v11 + 26 * v29)) + 10 * (v8 + 4 * v39 + v39) == 382979 ) , (122 * v25 + 225 * v21 + 52 * v23 + 253 * v9 + 197 * v17 + 187 * v31 + 181 * v29 + 183 * v41 + 47 * v20 + 229 * v39 + 88 * v22 + 127 * (v10 + v32) + 37 * (v7 + 3 * v3) + (((v11 + 2 * v30 + v30) << 6 )) + 7 * (21 * v8 + v27 + 18 * (v4 + v1 + v38)) + 6 * (23 * v24 + v26 + 17 * v2 + 39 * v6) + 10 * (v5 + 11 * v28 + 21 * v42) + 149 * v19 + 165 * v40 + 121 * v15 == 435695 ) , (165 * v20 + 223 * v4 + 249 * v5 + 199 * v1 + 135 * v2 + 133 * v26 + 254 * v42 + 111 * v7 + 189 * v28 + 221 * v25 + 115 * v21 + 186 * v9 + 79 * v41 + 217 * v24 + 122 * v11 + 38 * v18 + 109 * (v34 + v29) + 14 * (v8 + 17 * v40 + 8 * (v6 + v38)) + 4 * (11 * (5 * v30 + v39) + 6 * (v10 + 2 * v22) + v27 + 52 * v17 + 50 * v23) + 229 * v15 + 86 * v3 + 234 * v19 == 453748 ) , (181 * v25 + 94 * v42 + 125 * v1 + 226 * v26 + 155 * v7 + 95 * v21 + 212 * v17 + 91 * v31 + 194 * v29 + 98 * v24 + 166 * v11 + 120 * v22 + 59 * v18 + 32 * (v9 + v8) + 158 * (v6 + v5) + 101 * (v41 + v19) + 63 * (v4 + 2 * v23) + 67 * (v28 + 2 * v20) + 11 * (v39 + 10 * v16 + 11 * v10) + 39 * (v30 + 4 * (v2 + v15)) + 233 * v40 + 56 * v27 + 225 * v3 == 358321 ) , (229 * v21 + 135 * v4 + 197 * v15 + 118 * v5 + 143 * v16 + 134 * v6 + 204 * v40 + 173 * v26 + 81 * v7 + 60 * v28 + 58 * v8 + 179 * v23 + 142 * v9 + 178 * v17 + 230 * v31 + 148 * v29 + 224 * v41 + 194 * v24 + 223 * v10 + 87 * v20 + 200 * v39 + 233 * v11 + 49 * v22 + 127 * v35 + 31 * (4 * v27 + v18) + 42 * (v1 + 6 * v2) + 109 * v42 + 75 * v3 + 165 * v19 == 456073 ) , (41 * v4 + 253 * v3 + 163 * v15 + 193 * v30 + 155 * v16 + 113 * v27 + 131 * v6 + 55 * v2 + 21 * v40 + 53 * v26 + 13 * v8 + 201 * v25 + 237 * v9 + 223 * v31 + 95 * v24 + 194 * v20 + 62 * v39 + 119 * v11 + 171 * v22 + 135 * v18 + 69 * (v10 + 3 * v28) + 211 * (v1 + v29) + 4 * (43 * v7 + v42 + 40 * v17) + 6 * (v5 + 33 * v41 + 20 * (2 * v19 + v21) + 24 * v23) == 407135 ) , (111 * v19 + 190 * v3 + 149 * v4 + 173 * v28 + 118 * v23 + 146 * v29 + 179 * v10 + 51 * v20 + 49 * v39 + 61 * v11 + 125 * v22 + 162 * v18 + 214 * v35 + 14 * (v34 + v24) + 178 * (v41 + v16) + 11 * (4 * v9 + v21 + 17 * v42) + 65 * (v26 + v17 + 2 * v26 + 2 * v5) + 4 * (v7 + 38 * v15 + 4 * v13 + v13 + 8 * v40 + 43 * v2) == 369835 ) , (27 * v27 + 223 * v6 + 147 * v26 + 13 * v21 + 35 * (v17 + 7 * v4) + 57 * (v19 + v32 + 3 * v11) + 11 * (v1 + 17 * (v9 + v5) + 10 * v16 + 3 * v31) + 2 * (53 * v23 + v25 + 38 * v15 + 43 * v42 + 115 * v29 + 61 * v22 + 111 * (v10 + v40) + 14 * (v20 + v7 + 2 * v7 + 8 * v28) + 109 * v2 + 100 * v41 + 63 * v8) + 93 * v39 + 251 * v30 + 131 * v3 == 393303 ) , (116 * v9 + 152 * v29 + 235 * v20 + 202 * v18 + 85 * (v8 + 3 * v11) + 221 * (v16 + v40) + 125 * (v33 + v24) + 7 * (19 * v4 + 9 * (v10 + 2 * v25) + v2 + 33 * v3 + 32 * v19) + 3 * (71 * v39 + 43 * v22 + 32 * (v17 + v26) + 15 * (v5 + v6 + 2 * v23) + v28 + 74 * v31 + 48 * v42) + 10 * (v21 + 11 * v30 + 16 * v15) + 136 * v7 + 106 * v1 + 41 * v27 == 403661 ) , (127 * v4 + 106 * v15 + 182 * v30 + 142 * v5 + 159 * v16 + 17 * v1 + 211 * v6 + 134 * v2 + 199 * v7 + 103 * v28 + 247 * v23 + 122 * v9 + 95 * v41 + 62 * v10 + 203 * v39 + 16 * v11 + 41 * (6 * v42 + v25) + 9 * (22 * v24 + v20 + 27 * v31 + 28 * v40) + 10 * (v8 + v22 + v36 + 8 * v17 + 2 * (v22 + v36 + 8 * v17) + 13 * v29) + 6 * (23 * v27 + v26) + 213 * v18 + 179 * v3 + 43 * v19 == 418596 ))) s.add(149 * v19 + v1 + 133 * v22 + 207 * v41 + 182 * v26 + 234 * v7 + 199 * v8 + 168 * v21 + 58 * v10 + 108 * v20 + 142 * v18 + 156 * (v9 + v25) + 16 * (v29 + 6 * v31) + 126 * (v17 + 2 * v39) + 127 * (v4 + 2 * v27 + v40) + 49 * (v30 + 4 * v16) + 11 * (v5 + 22 * v11) + 5 * (v15 + v42 + 45 * v24 + 50 * v28) + 109 * v2 + 124 * v6 + 123 * v3 == 418697 ) pcheck(s,a1)