这次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)