description : can you solve my M-BOX?
The main flow of m-box is :
- get user input
- calculate user input
- check correct
m-box gets a 9x9 matrix value as a user input. (81 characters)
and mix.
when mixing a matrix, it is devided into three part.
- xor with random value(fixed random seed).
and add, sub, xor operation with predefined matrix in binary.
and swap each row and columns.
- compare each values with ascii range.
and compares the diagonal line with the word "5unKn0wn".
- last, it calculates inverse matrix.
if the matrix mixing is complete, you will enter the check routine.
this is what the check routine looks like.
it looks strange.
this checks whether the decimal point of the inverse matrix is less than 0.00001.
if not, it returns false.
all the decimal point of inverse matrix value should be less than 0.00001.
program compares that the decimal point should be less than 0.00001, but when you get the actual inverse matrix, it means that the inverse matrix should have all integers value without decimals.
in other words, it means that the determinant of the matrix to be inversed should be 1.
this is because the formula for obtaining the inverse matrix has the following.
det(A) means determinant of A matrix.
therefore, if det (A) == 1, the decimal point value is 0.
finally, we need to find the matrix diagonally "5unKn0wn", all of value must be in the range of the ascii, and the determinant should be 1.
i calculated this by hand.
A typical matrix having a determinant is 1 is identity matrix.
it looks
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
and there is a matrix operation called "elementary row operation".
elementary row operation does not change determenant.
so i made matrix which match above condition using elementary row operation with identity matrix.
with the result that my calculated matrix is
53 117 117 75 124 48 119 113 54
52 117 117 75 125 48 119 113 53
51 109 110 75 120 48 119 112 52
50 101 102 75 115 48 119 111 51
49 93 94 74 110 48 119 110 50
48 78 78 73 99 48 119 108 49
36 62 62 72 98 47 119 106 37
48 92 70 96 109 48 120 110 49
36 69 58 72 103 47 119 107 37
5 u u K | 0 w q 6
4 u u K } 0 w q 5
3 m n K x 0 w p 4
2 e f K s 0 w o 3
1 ] ^ J n 0 w n 2
0 N N I c 0 w l 1
$ > > H b / w j %
0 \ F ` m 0 x n 1
$ E : H g / w k %
and we should calculate remaining operations likes add, sub, xor, swap.
calculation python code is
index_matrix = [
[
[ 45, 19, 64, 54, 40, 59, 26, 61, 63 ],
[ 66, 17, 1, 77, 79, 15, 65, 29, 7 ],
[ 20, 52, 8, 28, 48, 35, 44, 80, 36 ],
[ 25, 37, 55, 18, 39, 58, 60, 51, 62 ],
[ 56, 49, 42, 3, 30, 57, 12, 71, 46 ],
[ 21, 16, 50, 68, 33, 78, 73, 75, 31 ],
[ 22, 34, 41, 76, 27, 67, 10, 69, 38 ],
[ 47, 6, 4, 32, 70, 53, 43, 23, 11 ],
[ 5, 74, 13, 9, 2, 72, 0, 24, 14 ]
],
[
[ 9, 3, 73, 29, 25, 41, 70, 31, 20 ],
[ 66, 63, 56, 10, 64, 15, 50, 72, 37 ],
[ 19, 44, 69, 52, 32, 16, 39, 21, 23 ],
[ 49, 33, 13, 80, 34, 5, 11, 47, 67 ],
[ 4, 42, 18, 48, 53, 27, 28, 40, 78 ],
[ 26, 0, 77, 24, 59, 74, 61, 51, 43 ],
[ 8, 7, 17, 46, 45, 1, 55, 36, 65 ],
[ 79, 76, 60, 54, 71, 14, 75, 38, 6 ],
[ 62, 35, 12, 2, 68, 58, 22, 30, 57 ]
],
[
[ 66, 8, 41, 68, 63, 9, 15, 31, 12 ],
[ 21, 59, 80, 42, 46, 45, 65, 54, 20 ],
[ 23, 29, 3, 17, 78, 0, 43, 72, 4 ],
[ 36, 48, 75, 71, 11, 57, 38, 73, 61 ],
[ 26, 13, 60, 6, 47, 2, 19, 64, 37 ],
[ 77, 44, 76, 67, 62, 7, 16, 28, 52 ],
[ 33, 49, 50, 56, 58, 79, 74, 1, 51 ],
[ 30, 53, 22, 40, 34, 10, 32, 39, 24 ],
[ 35, 18, 14, 70, 55, 69, 27, 25, 5 ]
],
[
[ 75, 34, 41, 31, 37, 70, 43, 53, 32 ],
[ 67, 55, 39, 22, 54, 33, 2, 8, 20 ],
[ 35, 4, 17, 74, 79, 58, 59, 28, 68 ],
[ 47, 51, 15, 78, 21, 5, 25, 40, 69 ],
[ 76, 46, 52, 30, 50, 73, 61, 36, 23 ],
[ 27, 77, 29, 19, 56, 57, 6, 0, 16 ],
[ 10, 60, 18, 62, 11, 66, 12, 63, 64 ],
[ 26, 65, 72, 80, 44, 45, 24, 9, 3 ],
[ 48, 42, 7, 13, 1, 71, 49, 14, 38 ]
],
[
[ 3, 24, 9, 47, 80, 42, 12, 13, 48 ],
[ 40, 57, 5, 6, 78, 1, 46, 28, 36 ],
[ 74, 31, 35, 44, 37, 56, 27, 68, 34 ],
[ 18, 52, 67, 53, 69, 25, 50, 14, 2 ],
[ 66, 11, 30, 60, 23, 79, 7, 38, 63 ],
[ 64, 59, 76, 55, 72, 26, 62, 19, 15 ],
[ 70, 29, 10, 71, 61, 41, 43, 45, 73 ],
[ 32, 77, 17, 4, 75, 22, 49, 16, 33 ],
[ 51, 58, 39, 0, 65, 21, 54, 8, 20 ]
],
[
[ 12, 77, 47, 51, 68, 73, 21, 59, 31 ],
[ 8, 18, 53, 62, 10, 49, 16, 78, 46 ],
[ 28, 80, 4, 19, 14, 41, 72, 7, 58 ],
[ 23, 74, 52, 63, 11, 24, 60, 45, 40 ],
[ 42, 76, 34, 43, 6, 29, 2, 65, 5 ],
[ 70, 38, 50, 67, 79, 1, 55, 69, 27 ],
[ 26, 33, 17, 75, 54, 22, 9, 44, 13 ],
[ 39, 71, 56, 30, 61, 64, 32, 3, 37 ],
[ 35, 25, 66, 36, 20, 48, 15, 57, 0 ]
],
[
[ 15, 3, 24, 64, 21, 19, 1, 22, 63 ],
[ 20, 72, 73, 42, 49, 2, 25, 70, 37 ],
[ 45, 30, 57, 27, 7, 23, 71, 8, 10 ],
[ 16, 13, 36, 51, 12, 17, 61, 68, 66 ],
[ 43, 79, 54, 46, 14, 59, 44, 33, 67 ],
[ 28, 41, 47, 32, 38, 78, 35, 11, 5 ],
[ 52, 6, 9, 69, 29, 55, 74, 50, 31 ],
[ 48, 34, 80, 58, 39, 62, 65, 60, 0 ],
[ 26, 77, 56, 40, 76, 75, 53, 4, 18 ]
],
[
[ 20, 61, 59, 3, 72, 10, 53, 16, 25 ],
[ 66, 24, 68, 75, 73, 28, 7, 33, 48 ],
[ 44, 45, 37, 15, 71, 55, 56, 42, 17 ],
[ 50, 58, 57, 51, 40, 60, 70, 76, 80 ],
[ 30, 31, 29, 43, 64, 32, 49, 1, 63 ],
[ 54, 9, 65, 34, 26, 0, 22, 39, 41 ],
[ 8, 13, 14, 69, 21, 5, 46, 4, 79 ],
[ 11, 27, 74, 67, 6, 78, 19, 77, 47 ],
[ 62, 18, 36, 23, 38, 52, 2, 12, 35 ]
],
[
[ 10, 39, 4, 3, 43, 77, 46, 71, 48 ],
[ 29, 41, 25, 34, 33, 14, 5, 55, 19 ],
[ 18, 40, 64, 30, 80, 65, 27, 61, 45 ],
[ 15, 8, 59, 17, 11, 70, 26, 12, 35 ],
[ 79, 62, 78, 32, 57, 13, 51, 49, 2 ],
[ 52, 1, 50, 76, 60, 58, 9, 44, 73 ],
[ 69, 38, 68, 47, 74, 67, 0, 22, 63 ],
[ 7, 75, 6, 23, 21, 66, 36, 31, 16 ],
[ 28, 53, 54, 56, 20, 72, 42, 37, 24 ]
]
][::-1]
add_matrix = [
[
[ 22, 247, 9, 39, 135, 255, 73, 128, 13 ],
[ 183, 22, 7, 113, 33, 218, 195, 166, 126 ],
[ 4, 154, 48, 136, 116, 19, 40, 216, 0 ],
[ 71, 78, 172, 93, 101, 163, 102, 140, 42 ],
[ 101, 213, 170, 114, 140, 193, 121, 253, 226 ],
[ 83, 193, 136, 209, 197, 35, 2, 77, 151 ],
[ 21, 117, 111, 21, 189, 190, 193, 26, 35 ],
[ 101, 129, 175, 143, 230, 132, 58, 89, 17 ],
[ 251, 210, 14, 221, 38, 207, 102, 247, 149 ],
] ,
[
[ 137, 249, 226, 32, 15, 88, 144, 36, 21 ],
[ 78, 230, 47, 113, 75, 176, 32, 218, 151 ],
[ 164, 20, 240, 181, 15, 194, 196, 237, 232 ],
[ 147, 83, 224, 40, 220, 217, 11, 252, 232 ],
[ 99, 140, 13, 120, 218, 243, 167, 75, 62 ],
[ 88, 107, 24, 239, 16, 45, 223, 197, 60 ],
[ 161, 137, 41, 138, 29, 124, 106, 69, 88 ],
[ 67, 80, 85, 44, 179, 225, 57, 43, 188 ],
[ 44, 211, 7, 106, 43, 115, 130, 26, 131 ],
] ,
[
[ 175, 249, 72, 236, 154, 210, 21, 36, 239 ],
[ 146, 142, 52, 234, 210, 133, 63, 254, 56 ],
[ 33, 55, 100, 221, 99, 55, 228, 205, 98 ],
[ 87, 79, 124, 218, 255, 117, 35, 235, 15 ],
[ 245, 0, 52, 228, 146, 194, 24, 125, 148 ],
[ 157, 188, 146, 214, 221, 201, 58, 186, 44 ],
[ 113, 159, 249, 211, 246, 73, 79, 209, 72 ],
[ 196, 244, 51, 211, 233, 51, 7, 205, 198 ],
[ 202, 229, 67, 94, 131, 255, 241, 89, 221 ],
] ,
[
[ 186, 147, 151, 231, 4, 54, 224, 215, 45 ],
[ 41, 38, 254, 113, 234, 242, 164, 189, 219 ],
[ 216, 197, 168, 158, 143, 141, 225, 237, 16 ],
[ 224, 222, 105, 189, 153, 252, 85, 128, 0 ],
[ 139, 96, 215, 184, 138, 253, 182, 251, 231 ],
[ 168, 160, 165, 131, 120, 106, 43, 22, 249 ],
[ 185, 247, 230, 201, 215, 197, 51, 149, 94 ],
[ 47, 234, 222, 48, 117, 62, 7, 46, 200 ],
[ 5, 228, 196, 236, 141, 100, 145, 16, 220 ],
] ,
[
[ 251, 60, 242, 244, 245, 233, 219, 190, 192 ],
[ 160, 241, 85, 254, 33, 63, 220, 81, 181 ],
[ 26, 88, 227, 227, 93, 199, 167, 74, 84 ],
[ 11, 219, 101, 231, 215, 161, 217, 203, 150 ],
[ 194, 166, 84, 130, 70, 70, 216, 68, 103 ],
[ 23, 32, 184, 204, 59, 16, 175, 30, 110 ],
[ 119, 197, 184, 203, 208, 147, 48, 183, 106 ],
[ 209, 144, 54, 103, 82, 220, 188, 212, 35 ],
[ 2, 172, 103, 105, 196, 136, 33, 144, 195 ],
] ,
[
[ 49, 64, 225, 159, 183, 166, 87, 130, 118 ],
[ 235, 179, 45, 85, 132, 189, 139, 236, 15 ],
[ 104, 168, 227, 139, 170, 144, 242, 19, 84 ],
[ 122, 52, 228, 61, 101, 36, 30, 5, 219 ],
[ 196, 92, 94, 58, 71, 17, 103, 157, 149 ],
[ 36, 40, 129, 51, 144, 41, 23, 27, 211 ],
[ 167, 14, 230, 251, 136, 26, 223, 198, 128 ],
[ 4, 228, 133, 223, 169, 225, 61, 227, 41 ],
[ 78, 75, 198, 228, 111, 238, 101, 163, 127 ],
] ,
[
[ 143, 186, 154, 98, 97, 168, 73, 92, 49 ],
[ 99, 59, 247, 227, 63, 219, 104, 31, 132 ],
[ 74, 92, 104, 115, 171, 179, 57, 143, 34 ],
[ 39, 244, 197, 166, 131, 127, 65, 230, 224 ],
[ 233, 47, 60, 26, 146, 120, 17, 118, 183 ],
[ 237, 222, 214, 113, 40, 51, 217, 155, 222 ],
[ 140, 212, 109, 175, 252, 97, 116, 162, 229 ],
[ 244, 227, 203, 212, 205, 250, 17, 231, 140 ],
[ 137, 249, 2, 64, 230, 225, 23, 87, 9 ],
] ,
[
[ 74, 49, 165, 40, 189, 121, 149, 108, 117 ],
[ 246, 225, 24, 219, 213, 251, 166, 169, 200 ],
[ 160, 186, 176, 45, 67, 169, 47, 132, 143 ],
[ 16, 155, 230, 26, 229, 23, 191, 13, 213 ],
[ 56, 162, 65, 174, 152, 34, 198, 116, 247 ],
[ 193, 26, 161, 138, 187, 91, 58, 232, 159 ],
[ 227, 23, 35, 114, 40, 190, 88, 66, 163 ],
[ 112, 1, 176, 69, 57, 82, 134, 231, 234 ],
[ 169, 173, 94, 160, 111, 121, 65, 249, 52 ],
] ,
[
[ 157, 51, 28, 60, 22, 51, 95, 136, 91 ],
[ 29, 224, 157, 192, 80, 158, 112, 149, 216 ],
[ 194, 28, 191, 172, 197, 109, 11, 101, 220 ],
[ 132, 167, 213, 184, 68, 8, 212, 128, 30 ],
[ 7, 223, 166, 99, 252, 134, 0, 188, 215 ],
[ 159, 44, 108, 119, 238, 136, 54, 154, 77 ],
[ 163, 165, 179, 127, 41, 90, 84, 225, 158 ],
[ 92, 181, 30, 122, 189, 253, 32, 32, 249 ],
[ 167, 32, 181, 126, 191, 225, 234, 54, 207 ],
]
][::-1]
sub_matrix = [
[
[ 220, 141, 223, 20, 192, 153, 121, 60, 155 ],
[ 150, 199, 227, 68, 99, 208, 165, 18, 248 ],
[ 157, 9, 83, 123, 186, 120, 189, 162, 55 ],
[ 26, 182, 20, 217, 146, 162, 184, 166, 98 ],
[ 81, 31, 158, 237, 182, 102, 208, 250, 201 ],
[ 160, 159, 219, 152, 60, 229, 236, 183, 159 ],
[ 100, 117, 65, 156, 143, 247, 176, 104, 137 ],
[ 82, 32, 47, 181, 114, 78, 83, 95, 4 ],
[ 185, 47, 255, 131, 207, 158, 94, 104, 219 ],
] ,
[
[ 67, 84, 146, 226, 184, 7, 35, 84, 150 ],
[ 26, 5, 254, 163, 87, 31, 210, 12, 145 ],
[ 33, 96, 240, 37, 25, 31, 36, 156, 238 ],
[ 195, 251, 86, 158, 62, 170, 48, 33, 99 ],
[ 56, 68, 183, 206, 95, 188, 205, 2, 20 ],
[ 236, 213, 32, 125, 246, 128, 109, 27, 154 ],
[ 140, 64, 54, 122, 3, 49, 209, 161, 112 ],
[ 123, 209, 145, 222, 9, 213, 150, 216, 52 ],
[ 82, 165, 55, 102, 145, 12, 135, 14, 2 ],
] ,
[
[ 7, 123, 29, 161, 7, 93, 216, 129, 96 ],
[ 9, 82, 1, 121, 206, 211, 10, 172, 220 ],
[ 224, 66, 180, 20, 149, 89, 75, 251, 234 ],
[ 87, 130, 248, 89, 138, 115, 119, 43, 122 ],
[ 212, 3, 252, 53, 13, 78, 54, 134, 28 ],
[ 9, 145, 201, 230, 113, 11, 154, 133, 160 ],
[ 244, 209, 156, 222, 40, 30, 215, 130, 168 ],
[ 74, 249, 212, 197, 205, 215, 193, 2, 228 ],
[ 15, 57, 107, 44, 66, 252, 245, 40, 109 ],
] ,
[
[ 0, 195, 242, 161, 183, 195, 61, 149, 236 ],
[ 91, 108, 110, 4, 183, 103, 216, 124, 52 ],
[ 175, 61, 55, 148, 76, 112, 255, 120, 178 ],
[ 251, 109, 219, 104, 110, 158, 90, 15, 85 ],
[ 30, 76, 234, 10, 167, 87, 120, 171, 14 ],
[ 223, 131, 138, 19, 51, 199, 74, 199, 19 ],
[ 186, 198, 140, 109, 193, 249, 72, 41, 103 ],
[ 230, 131, 118, 59, 161, 194, 37, 171, 106 ],
[ 124, 35, 21, 138, 2, 153, 20, 22, 204 ],
] ,
[
[ 219, 96, 147, 239, 27, 89, 123, 136, 26 ],
[ 116, 208, 67, 220, 182, 198, 82, 241, 104 ],
[ 21, 22, 19, 127, 147, 55, 148, 29, 57 ],
[ 45, 50, 79, 249, 13, 176, 140, 252, 203 ],
[ 229, 119, 83, 255, 236, 35, 66, 200, 217 ],
[ 9, 26, 202, 113, 47, 224, 132, 174, 115 ],
[ 187, 67, 145, 245, 112, 195, 68, 106, 208 ],
[ 244, 246, 205, 191, 220, 68, 18, 219, 48 ],
[ 53, 30, 248, 14, 39, 19, 216, 152, 66 ],
] ,
[
[ 185, 28, 241, 44, 216, 52, 189, 205, 164 ],
[ 128, 17, 14, 81, 6, 5, 30, 197, 225 ],
[ 98, 216, 188, 147, 13, 218, 139, 28, 1 ],
[ 158, 244, 153, 225, 173, 182, 210, 218, 142 ],
[ 6, 151, 91, 170, 24, 108, 185, 105, 114 ],
[ 190, 135, 56, 159, 233, 16, 91, 124, 29 ],
[ 54, 8, 57, 55, 166, 46, 209, 135, 219 ],
[ 135, 89, 181, 21, 95, 77, 112, 10, 101 ],
[ 220, 195, 206, 79, 129, 85, 135, 32, 62 ],
] ,
[
[ 151, 123, 187, 180, 177, 195, 238, 233, 105 ],
[ 28, 186, 241, 247, 65, 74, 173, 86, 170 ],
[ 250, 198, 180, 95, 162, 119, 45, 241, 248 ],
[ 130, 120, 24, 192, 15, 147, 123, 196, 69 ],
[ 62, 178, 46, 168, 206, 232, 153, 197, 41 ],
[ 227, 114, 127, 141, 108, 69, 65, 203, 231 ],
[ 184, 248, 217, 176, 122, 81, 200, 59, 97 ],
[ 92, 182, 37, 161, 245, 215, 207, 157, 165 ],
[ 183, 54, 106, 224, 25, 221, 95, 167, 73 ],
] ,
[
[ 164, 232, 21, 139, 161, 13, 100, 81, 136 ],
[ 182, 26, 195, 23, 118, 121, 60, 23, 110 ],
[ 19, 230, 11, 184, 157, 65, 34, 125, 91 ],
[ 255, 220, 2, 73, 128, 234, 94, 11, 139 ],
[ 107, 112, 221, 243, 38, 247, 182, 61, 109 ],
[ 48, 121, 132, 158, 140, 106, 170, 68, 7 ],
[ 235, 102, 132, 70, 102, 96, 72, 175, 224 ],
[ 51, 13, 235, 190, 120, 91, 155, 108, 129 ],
[ 146, 34, 190, 255, 82, 55, 131, 241, 195 ],
] ,
[
[ 237, 155, 7, 244, 134, 110, 120, 205, 212 ],
[ 216, 21, 131, 184, 72, 144, 164, 7, 8 ],
[ 255, 162, 116, 129, 53, 151, 63, 52, 233 ],
[ 119, 184, 218, 58, 165, 117, 66, 154, 252 ],
[ 176, 18, 201, 132, 235, 222, 7, 163, 39 ],
[ 151, 71, 46, 159, 71, 208, 20, 200, 5 ],
[ 171, 7, 58, 148, 126, 242, 111, 185, 151 ],
[ 228, 251, 49, 224, 171, 68, 169, 47, 47 ],
[ 136, 54, 210, 175, 205, 26, 221, 108, 97 ],
]
][::-1]
xor_matrix = [
[
[ 111, 187, 217, 27, 67, 214, 117, 117, 254 ],
[ 170, 20, 84, 62, 177, 164, 251, 187, 74 ],
[ 145, 82, 15, 236, 25, 97, 237, 80, 129 ],
[ 186, 213, 90, 193, 68, 21, 154, 95, 88 ],
[ 112, 212, 205, 111, 126, 226, 195, 188, 147 ],
[ 103, 183, 78, 178, 73, 160, 193, 53, 185 ],
[ 35, 34, 10, 164, 220, 223, 255, 158, 35 ],
[ 20, 56, 131, 109, 169, 87, 58, 24, 214 ],
[ 28, 219, 146, 176, 67, 74, 254, 245, 147 ],
] ,
[
[ 159, 182, 200, 88, 217, 235, 98, 126, 199 ],
[ 65, 125, 101, 101, 145, 158, 232, 254, 71 ],
[ 63, 57, 95, 21, 85, 58, 168, 5, 125 ],
[ 242, 4, 114, 133, 163, 41, 77, 251, 2 ],
[ 56, 94, 128, 0, 159, 253, 101, 4, 143 ],
[ 3, 236, 141, 74, 44, 198, 169, 65, 28 ],
[ 228, 233, 33, 97, 219, 37, 212, 96, 200 ],
[ 253, 174, 196, 255, 230, 34, 128, 230, 193 ],
[ 125, 76, 198, 12, 79, 178, 154, 154, 222 ],
] ,
[
[ 96, 67, 32, 124, 39, 9, 158, 137, 229 ],
[ 195, 93, 69, 140, 90, 243, 80, 89, 218 ],
[ 114, 217, 192, 51, 87, 12, 249, 99, 92 ],
[ 172, 253, 246, 138, 94, 57, 170, 218, 97 ],
[ 180, 120, 234, 153, 60, 71, 222, 200, 161 ],
[ 210, 24, 250, 172, 138, 212, 108, 189, 43 ],
[ 121, 183, 142, 213, 99, 140, 203, 237, 234 ],
[ 4, 152, 196, 101, 76, 61, 79, 229, 121 ],
[ 150, 195, 65, 55, 149, 89, 50, 65, 227 ],
] ,
[
[ 6, 174, 160, 49, 39, 87, 191, 252, 186 ],
[ 75, 199, 168, 53, 203, 64, 250, 49, 140 ],
[ 55, 128, 113, 176, 23, 52, 241, 78, 202 ],
[ 74, 128, 11, 45, 134, 185, 205, 183, 224 ],
[ 37, 119, 220, 223, 194, 163, 135, 248, 111 ],
[ 199, 242, 160, 83, 41, 32, 196, 217, 55 ],
[ 249, 202, 134, 195, 20, 6, 206, 65, 141 ],
[ 136, 14, 68, 104, 51, 187, 69, 19, 126 ],
[ 232, 154, 118, 87, 98, 104, 247, 181, 145 ],
] ,
[
[ 24, 122, 106, 79, 115, 52, 213, 54, 72 ],
[ 220, 4, 137, 105, 140, 151, 173, 245, 203 ],
[ 105, 58, 222, 231, 34, 120, 93, 122, 218 ],
[ 197, 113, 144, 86, 137, 10, 192, 217, 125 ],
[ 244, 174, 179, 60, 138, 183, 197, 243, 68 ],
[ 92, 161, 57, 39, 10, 115, 5, 241, 149 ],
[ 126, 78, 15, 88, 19, 129, 232, 105, 10 ],
[ 242, 41, 227, 111, 29, 146, 34, 89, 28 ],
[ 218, 30, 16, 30, 122, 177, 87, 162, 187 ],
] ,
[
[ 202, 167, 172, 95, 37, 250, 111, 126, 13 ],
[ 240, 102, 118, 250, 89, 159, 222, 200, 188 ],
[ 112, 235, 21, 140, 197, 51, 156, 227, 173 ],
[ 77, 58, 79, 8, 4, 247, 180, 99, 28 ],
[ 174, 210, 154, 187, 194, 1, 49, 189, 90 ],
[ 208, 155, 34, 140, 11, 13, 161, 151, 210 ],
[ 212, 52, 181, 130, 129, 239, 209, 138, 243 ],
[ 200, 62, 87, 229, 237, 41, 127, 168, 236 ],
[ 128, 218, 169, 218, 170, 68, 253, 55, 79 ],
] ,
[
[ 10, 216, 230, 221, 173, 26, 146, 47, 156 ],
[ 130, 0, 38, 117, 201, 100, 204, 174, 81 ],
[ 246, 45, 250, 226, 174, 212, 139, 136, 126 ],
[ 207, 133, 181, 30, 144, 142, 4, 109, 59 ],
[ 31, 255, 106, 187, 129, 106, 225, 247, 51 ],
[ 69, 195, 225, 151, 185, 15, 145, 155, 189 ],
[ 101, 38, 69, 227, 245, 203, 153, 19, 91 ],
[ 39, 24, 200, 98, 55, 199, 204, 242, 73 ],
[ 54, 211, 64, 106, 24, 3, 75, 175, 189 ],
] ,
[
[ 90, 64, 88, 23, 165, 127, 93, 137, 116 ],
[ 40, 34, 136, 131, 73, 160, 75, 171, 215 ],
[ 18, 119, 201, 91, 173, 156, 155, 23, 180 ],
[ 159, 99, 100, 92, 189, 164, 180, 213, 74 ],
[ 51, 50, 211, 168, 90, 245, 48, 221, 62 ],
[ 208, 40, 233, 167, 58, 96, 112, 150, 13 ],
[ 12, 49, 37, 192, 208, 136, 36, 44, 69 ],
[ 201, 225, 26, 19, 20, 76, 230, 188, 166 ],
[ 219, 236, 131, 25, 188, 171, 2, 99, 230 ],
] ,
[
[ 98, 211, 124, 111, 223, 173, 148, 160, 126 ],
[ 28, 196, 170, 98, 141, 139, 124, 160, 160 ],
[ 201, 134, 92, 111, 97, 73, 243, 122, 5 ],
[ 158, 124, 105, 132, 222, 60, 0, 78, 28 ],
[ 174, 226, 188, 44, 255, 128, 214, 97, 14 ],
[ 98, 221, 174, 2, 166, 53, 94, 22, 150 ],
[ 167, 9, 17, 173, 167, 141, 22, 44, 108 ],
[ 82, 44, 186, 110, 218, 156, 42, 6, 155 ],
[ 171, 221, 252, 185, 63, 218, 103, 65, 128 ],
]
][::-1]
# already calculated matrix using hand (det A == 1)
final_matrix = [
[53, 117, 117, 75, 124, 48, 119, 113, 54],
[52, 117, 117, 75, 125, 48, 119, 113, 53],
[51, 109, 110, 75, 120, 48, 119, 112, 52],
[50, 101, 102, 75, 115, 48, 119, 111, 51],
[49, 93, 94, 74, 110, 48, 119, 110, 50],
[48, 78, 78, 73, 99, 48, 119, 108, 49],
[36, 62, 62, 72, 98, 47, 119, 106, 37],
[48, 92, 70, 96, 109, 48, 120, 110, 49],
[36, 69, 58, 72, 103, 47, 119, 107, 37]
]
rand_table = [
[65, 21, 211, 184, 70, 118, 221, 160, 138],
[158, 244, 131, 242, 135, 111, 250, 126, 37],
[241, 184, 37, 9, 219, 114, 233, 104, 244],
[76, 87, 190, 9, 153, 211, 220, 81, 25],
[82, 46, 185, 221, 205, 173, 96, 191, 53],
[207, 185, 179, 245, 170, 107, 26, 180, 70],
[141, 157, 174, 129, 234, 5, 63, 243, 158],
[18, 207, 240, 43, 33, 30, 229, 254, 235],
[146, 95, 170, 199, 46, 100, 122, 35, 14]
]
N = 9
for i in range(N):
# xor matrix
for j in range(N):
for k in range(N):
final_matrix[index_matrix[i][j][k] / N][index_matrix[i][j][k] % N] ^= xor_matrix[i][index_matrix[i][j][k] / N][index_matrix[i][j][k] % N]
# swap row
for j in range(N / 2):
for k in range(N):
final_matrix[j][k], final_matrix[N - j - 1][N - k - 1] = final_matrix[N - j - 1][N - k - 1], final_matrix[j][k]
# sub matrix
for j in range(N):
for k in range(N):
final_matrix[index_matrix[i][j][k] / N][index_matrix[i][j][k] % N] += sub_matrix[i][k][j]
# swap column
for j in range(N):
for k in range(N / 2):
final_matrix[j][k], final_matrix[N - j - 1][N - k - 1] = final_matrix[N - j - 1][N - k - 1], final_matrix[j][k]
# add matrix
for j in range(N):
for k in range(N):
final_matrix[index_matrix[i][j][k] / N][index_matrix[i][j][k] % N] -= add_matrix[i][k][j]
# xor with rand value
for i in range(N):
for j in range(N):
final_matrix[i][j] ^= rand_table[i][j]
ans = ''.join(chr(final_matrix[i / N][i % N] & 0xff) for i in range(N * N))
print ans
if we run above python code, it gives me the correct input.
and flag is SECU[s0_s0_n1ce_inv3rs3_m4tr1x_wh1ch_d3t3rm1n4nt_is_1]
thanks for GoN and 217.