Skip to content

Instantly share code, notes, and snippets.

@5unKn0wn
Created July 3, 2017 06:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 5unKn0wn/c5517b03a3b78e429098d582ce598d5b to your computer and use it in GitHub Desktop.
Save 5unKn0wn/c5517b03a3b78e429098d582ce598d5b to your computer and use it in GitHub Desktop.

SECUINSIDE 2017 write-ups

Rank

M-BOX

description : can you solve my M-BOX?

The main flow of m-box is :

  1. get user input
  2. calculate user input
  3. check correct

ida main

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.

operation1

  • compare each values with ascii range.
    and compares the diagonal line with the word "5unKn0wn".

operation2

  • last, it calculates inverse matrix.

operation3

if the matrix mixing is complete, you will enter the check routine.

this is what the check routine looks like.

operation3

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.

inverse

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.

success

and flag is SECU[s0_s0_n1ce_inv3rs3_m4tr1x_wh1ch_d3t3rm1n4nt_is_1]

thanks for GoN and 217.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment