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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
| def hexprint(nums, width=11, per_line=16): format_str = "{:>" + str(width) + "s}" for i, num in enumerate(nums): hex_val = hex(num) print(format_str.format(hex_val), end='') if (i + 1) % per_line == 0: print() if len(nums) % per_line != 0: print()
def b2dle(byte_array): return [int.from_bytes(byte_array[i:i+4], byteorder='little', signed=False) for i in range(0, len(byte_array), 4)]
opc = [0x00000001, 0x11223344, 0x00000001, 0x00000BB8, 0x00000041, 0x00000000, 0x00000001, 0x00000040, 0x00000001, 0x00000BB9, 0x00000041, 0x00000000, 0x00000001, 0x000007D1, 0x00000001, 0x000007D0, 0x00000001, 0x00000BC2, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000003, 0x00000016, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC4, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x000007DB, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC4, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC5, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000004, 0x00000017, 0x00000000, 0x00000001, 0x000007DC, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC6, 0x00000041, 0x00000000, 0x00000001, 0x00000BC5, 0x00000040, 0x00000000, 0x00000001, 0x00000BC6, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC2, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC2, 0x00000040, 0x00000000, 0x00000041, 0x00000000, 0x00000001, 0x00000BBA, 0x2202E040, 0x00000000, 0x00000001, 0x00000BB8, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x75DFEB01, 0x00000BBA, 0x2202DF41, 0x00000000, 0x75DFEB01, 0x00000BC2, 0xFFFFFF40, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000002, 0x00000016, 0x00000000, 0x00000001, 0x000007DC, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC7, 0x00000041, 0x00000000, 0x75DFF101, 0x00000BC2, 0x00000040, 0x00000000, 0x75DFEC40, 0x00000000, 0x00000001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x000007DD, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC7, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC8, 0x00000041, 0x00000000, 0x00000001, 0x00000BC2, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000005, 0x00000017, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC9, 0x00000041, 0x00000000, 0x00000001, 0x00000BC8, 0x00000040, 0x00000000, 0x00000001, 0x00000BC9, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000041, 0x00000000, 0x00000001, 0x00000BB9, 0x00000040, 0x00000000, 0x00000001, 0x00000001, 0x00000011, 0x00000000, 0x00000003, 0x00000000, 0x00000001, 0x00000BB9, 0x21F79841, 0x00000000, 0x00000001, 0x00000000, 0x00000024, 0x00000000, 0x00000052, 0x0000000C, 0x00000001, 0x11223344, 0x00000001, 0x00000BB8, 0x00000041, 0x00000000, 0x00000001, 0x00000040, 0x00000001, 0x00000BB9, 0x00000041, 0x00000000, 0x00000001, 0x000007D3, 0x00000001, 0x000007D2, 0x75DFF001, 0x00000BC2, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000003, 0x00000016, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x75DFEE60, 0x00000000, 0xBC0E2501, 0x00000BC4, 0x2207B441, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x2207B440, 0x00000000, 0x00000101, 0x00000BBA, 0x00000040, 0x00000000, 0x75DFEC10, 0x00000000, 0x22027B60, 0x00000000, 0x75DFED01, 0x000007DB, 0x006E0040, 0x00000000, 0x75DFED10, 0x00000000, 0x21F79A01, 0x00000BC4, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x72A03101, 0x00000BC5, 0x00000041, 0x00000000, 0x72A03601, 0x00000BC3, 0x00000040, 0x00000000, 0x72A03640, 0x00000000, 0x21F47101, 0x00000004, 0x72A03117, 0x00000000, 0x729F0001, 0x000007DC, 0x00000040, 0x00000000, 0x00000110, 0x00000000, 0x00000001, 0x00000BC6, 0x00000041, 0x00000000, 0x00000001, 0x00000BC5, 0x72A03140, 0x00000000, 0x00000001, 0x00000BC6, 0x00000040, 0x00000000, 0x72A03118, 0x00000000, 0x00000001, 0x00000BC2, 0x72A03140, 0x00000000, 0x0502C040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC2, 0x00000040, 0x00000000, 0x729F7341, 0x00000000, 0x00000001, 0x00000BBA, 0x00000040, 0x00000000, 0x729F0501, 0x00000BB8, 0x00000140, 0x00000000, 0x21F47110, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BBA, 0x72A03641, 0x00000000, 0x729F0301, 0x00000BC2, 0x00000040, 0x00000000, 0x00000440, 0x00000000, 0x00000001, 0x00000002, 0x729FD316, 0x00000000, 0x00000101, 0x000007DC, 0x00000040, 0x00000000, 0x729FD310, 0x00000000, 0x00000001, 0x00000BC7, 0x729FD341, 0x00000000, 0x05000001, 0x00000BC2, 0x00000440, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000BBA, 0x00000040, 0x00000000, 0x729FB310, 0x00000000, 0x07040001, 0x000007DD, 0x00000040, 0x00000000, 0x729F0310, 0x00000000, 0x729F0701, 0x00000BC7, 0x729F0140, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC8, 0x729FD441, 0x00000000, 0x729F0301, 0x00000BC2, 0x00000040, 0x00000000, 0x00000140, 0x00000000, 0x00000001, 0x00000005, 0x00000017, 0x00000000, 0x00000001, 0x000007DA, 0x729F0340, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC9, 0x00340041, 0x00000000, 0x004C0001, 0x00000BC8, 0x00000140, 0x00000000, 0x729FD301, 0x00000BC9, 0x00000040, 0x00000000, 0x12040018, 0x00000000, 0x00000001, 0x00000BC3, 0x07040040, 0x00000000, 0x729FBA40, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x11040001, 0x00000BC3, 0x729FB940, 0x00000000, 0x729F0041, 0x00000000, 0x00000001, 0x00000BB9, 0x00000040, 0x00000000, 0x00000001, 0x00000001, 0x00000011, 0x00000000, 0x729F0003, 0x00000000, 0x729FB901, 0x00000BB9, 0x00000441, 0x00000000, 0x00000001, 0x00000000, 0x729FB924, 0x00000000, 0x00000052, 0x0000008B, 0x729FB901, 0x11223344, 0x05000001, 0x00000BB8, 0x00000041, 0x00000000, 0x00000001, 0x00000040, 0x00000001, 0x00000BB9, 0x00000041, 0x00000000, 0x729FCF01, 0x000007D5, 0x402C0001, 0x000007D4, 0x00000001, 0x00000BC2, 0x729F0341, 0x00000000, 0x00000001, 0x00000BC3, 0x50000141, 0x00000000, 0x00000001, 0x00000BC3, 0x00000140, 0x00000000, 0x729F0040, 0x00000000, 0x00000001, 0x00000003, 0x00000116, 0x00000000, 0x21F0F560, 0x00000000, 0x729F0001, 0x000007DA, 0x50000140, 0x00000000, 0x00000110, 0x00000000, 0x00000160, 0x00000000, 0x00000001, 0x00000BC4, 0x75DFF041, 0x00000000, 0x729FBA01, 0x00000BC3, 0x50000140, 0x00000000, 0x00000040, 0x00000000, 0x00000001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000110, 0x00000000, 0x50000160, 0x00000000, 0x40000001, 0x000007DB, 0x00000040, 0x00000000, 0x729F0010, 0x00000000, 0x00000001, 0x00000BC4, 0x21F0F140, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC5, 0x00000041, 0x00000000, 0x729F0001, 0x00000BC3, 0x00000040, 0x00000000, 0x21F0F140, 0x00000000, 0x00000001, 0x00000004, 0x729F0017, 0x00000000, 0x00000401, 0x000007DC, 0x402C0040, 0x00000000, 0x00000410, 0x00000000, 0x72A03601, 0x00000BC6, 0x72A03141, 0x00000000, 0x00000001, 0x00000BC5, 0x00000040, 0x00000000, 0x21F45001, 0x00000BC6, 0x729F0040, 0x00000000, 0x02040018, 0x00000000, 0x00000001, 0x00000BC2, 0x729F0040, 0x00000000, 0x50000140, 0x00000000, 0x21F27010, 0x00000000, 0x729F0060, 0x00000000, 0x00000001, 0x00000BC2, 0x00000040, 0x00000000, 0x00000041, 0x00000000, 0x729F0001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000001, 0x00000BB8, 0x21F0F540, 0x00000000, 0x729F0010, 0x00000000, 0x729F0060, 0x00000000, 0x00000101, 0x00000BBA, 0x40000041, 0x00000000, 0x00000101, 0x00000BC2, 0x729FD440, 0x00000000, 0x729FD340, 0x00000000, 0x00000001, 0x00000002, 0x00000016, 0x00000000, 0x21F45001, 0x000007DC, 0x729F0040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC7, 0x729F0041, 0x00000000, 0x00000001, 0x00000BC2, 0x729FD340, 0x00000000, 0x40000040, 0x00000000, 0x40000001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x000007DD, 0x21F47840, 0x00000000, 0x729F0010, 0x00000000, 0x50000101, 0x00000BC7, 0x729F0040, 0x00000000, 0x00000018, 0x00000000, 0x00000001, 0x00000BC8, 0x21F47841, 0x00000000, 0x729F0001, 0x00000BC2, 0x50000140, 0x00000000, 0x729F0040, 0x00000000, 0x00000001, 0x00000005, 0x00000017, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000001, 0x00000BC9, 0x00000041, 0x00000000, 0x50000101, 0x00000BC8, 0x21F27040, 0x00000000, 0x729F0001, 0x00000BC9, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x75DFF301, 0x00000BC3, 0xBC0E3D40, 0x00000000, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x204A0060, 0x00000000, 0x00000001, 0x00000BC3, 0x729F0040, 0x00000000, 0x00000041, 0x00000000, 0x40000001, 0x00000BB9, 0x00000040, 0x00000000, 0x729FBA01, 0x00000001, 0x729FB911, 0x00000000, 0x00000003, 0x00000000, 0x00000001, 0x00000BB9, 0x21F45041, 0x00000000, 0x729F0001, 0x00000000, 0x00000024, 0x00000000, 0x00000052, 0x0000010A, 0x729F0001, 0x11223344, 0x00000001, 0x00000BB8, 0x729FB941, 0x00000000, 0x40000001, 0x00000040, 0x40000001, 0x00000BB9, 0x00000041, 0x00000000, 0x00000001, 0x000007D7, 0x00000001, 0x000007D6, 0x21F47801, 0x00000BC2, 0x729F0041, 0x00000000, 0x50000101, 0x00000BC3, 0x729F0041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000440, 0x00000000, 0x21F0F540, 0x00000000, 0x729F0001, 0x00000003, 0x402C0016, 0x00000000, 0x00000460, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC4, 0x869C2041, 0x00000000, 0x00000001, 0x00000BC3, 0x00000040, 0x00000000, 0x00000440, 0x00000000, 0x002C0001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x729F0060, 0x00000000, 0x00000001, 0x000007DB, 0x40000040, 0x00000000, 0x00000010, 0x00000000, 0x00000101, 0x00000BC4, 0x729F0040, 0x00000000, 0x00000018, 0x00000000, 0x00000101, 0x00000BC5, 0x21F0F541, 0x00000000, 0x729F0001, 0x00000BC3, 0x40000040, 0x00000000, 0x00000140, 0x00000000, 0x00000101, 0x00000004, 0x00000017, 0x00000000, 0x75DFF401, 0x000007DC, 0x729F0040, 0x00000000, 0x40000010, 0x00000000, 0x00000001, 0x00000BC6, 0x00000041, 0x00000000, 0x729FB701, 0x00000BC5, 0x00000140, 0x00000000, 0x00000001, 0x00000BC6, 0x75DFF740, 0x00000000, 0x00000018, 0x00000000, 0x729F0001, 0x00000BC2, 0x00000040, 0x00000000, 0x21F0F140, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BC2, 0x00015040, 0x00000000, 0x00001041, 0x00000000, 0x01000001, 0x00000BBA, 0x869A0040, 0x00000000, 0x00000001, 0x00000BB8, 0x00027040, 0x00000000, 0x00007010, 0x00000000, 0x00000060, 0x00000000, 0x00000001, 0x00000BBA, 0x00000041, 0x00000000, 0x00000001, 0x00000BC2, 0x89634340, 0x00000000, 0x1F270A40, 0x00000000, 0x869C2001, 0x00000002, 0x00000016, 0x00000000, 0x00000001, 0x000007DC, 0x00000040, 0x00000000, 0x869A0010, 0x00000000, 0x00027001, 0x00000BC7, 0x00000041, 0x00000000, 0x40000001, 0x00000BC2, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x729F0001, 0x00000BBA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x21F0F501, 0x000007DD, 0x729F0040, 0x00000000, 0x40000010, 0x00000000, 0x00000001, 0x00000BC7, 0x00000040, 0x00000000, 0x00000018, 0x00000000, 0x75DFF701, 0x00000BC8, 0x00000041, 0x00000000, 0x729FB701, 0x00000BC2, 0x1F828840, 0x00000000, 0x1F700140, 0x00000000, 0x729FB701, 0x00000005, 0x00000117, 0x00000000, 0x00000001, 0x000007DA, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x1F72D101, 0x00000BC9, 0x00000141, 0x00000000, 0x21F0F101, 0x00000BC8, 0x00000040, 0x00000000, 0x00000001, 0x00000BC9, 0x00000040, 0x00000000, 0x1F704A18, 0x00000000, 0x729F6C01, 0x00000BC3, 0x00000040, 0x00000000, 0x00000040, 0x00000000, 0x00000010, 0x00000000, 0x00000060, 0x00000000, 0x1F828801, 0x00000BC3, 0x729F6C40, 0x00000000, 0x1F704841, 0x00000000, 0x75DFF701, 0x00000BB9, 0x75DFF740, 0x00000000, 0x1F828801, 0x00000001, 0x75DFF711, 0x00000000, 0x729FB703, 0x00000000, 0x1F768701, 0x00000BB9, 0x869A1441, 0x00000000, 0x869BD501, 0x00000000, 0x00000024, 0x00000000, 0x75DFF752, 0x00000189, 0x75DFF7FF]
enc = [0x877A62A6, 0x6A55F1F3, 0xAE194847, 0xB1E643E7, 0xA94FE881, 0x9BC8A28A, 0xC4CFAA9F, 0xF1A00CA1]
stack = [0] * 16 mem = [0] * 6000
key = [0xA56BABCD, 0x00000000, 0xFFFFFFFF, 0xABCDEF01] for i in range(len(key)): mem[0x7DA+i] = key[i]
inp = b"12345678123456781234567812345678" dinp = b2dle(inp) for i in range(len(dinp)): mem[0x7D0+i] = dinp[i]
opidx = 0 stackidx = 0
def push(arg): global stack, stackidx stack[stackidx] = arg stackidx += 1
def pop(): global stack, stackidx stackidx -= 1 return stack[stackidx]
while opidx < len(opc): if opc[opidx] & 0xFF == 1: push(opc[opidx+1]) print(f"push stack[{stackidx}], {hex(opc[opidx+1])}") opidx += 2 elif opc[opidx] & 0xFF == 3: arg = pop() push(arg) push(arg) print(f"mov stack[{stackidx-1}], stack[{stackidx-2}] = {hex(stack[stackidx-1])}") opidx += 2 elif opc[opidx] & 0xFF == 0x10: arg1 = pop() arg2 = pop() num = (arg2 + arg1) & 0xFFFFFFFF print(f"add stack[{stackidx+1}] = {hex(arg2)}, stack[{stackidx}] = {hex(arg1)}\npush stack[{stackidx}], res = {hex(num)}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x11: arg1 = pop() arg2 = pop() num = (arg2 - arg1) & 0xFFFFFFFF print(f"sub stack[{stackidx+1}] = {hex(arg2)}, stack[{stackidx}] = {hex(arg1)}\npush stack[{stackidx}], res = {hex(num)}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x16: arg1 = pop() arg2 = pop() num = (arg2 << arg1) & 0xFFFFFFFF print(f"shl stack[{stackidx+1}] = {hex(arg2)}, stack[{stackidx}] = {hex(arg1)}\npush stack[{stackidx}], res = {hex(num)}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x17: arg1 = pop() arg2 = pop() num = (arg2 >> arg1) & 0xFFFFFFFF print(f"shr stack[{stackidx+1}] = {hex(arg2)}, stack[{stackidx}] = {hex(arg1)}\npush stack[{stackidx}], res = {hex(num)}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x18: arg1 = pop() arg2 = pop() num = (arg2 ^ arg1) & 0xFFFFFFFF print(f"xor stack[{stackidx+1}] = {hex(arg2)}, stack[{stackidx}] = {hex(arg1)}\npush stack[{stackidx}], res = {hex(num)}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x24: arg1 = pop() arg2 = pop() num = 1 if arg1 < arg2 else 0 print(f"lt stack[{stackidx}] = {hex(arg1)}, stack[{stackidx+1}] = {hex(arg2)}\npush stack[{stackidx}], res = {False if num == 0 else True}") push(num) opidx += 2 elif opc[opidx] & 0xFF == 0x40: arg1 = pop() arg2 = mem[arg1] push(arg2) print(f"push stack[{stackidx}], mem[{arg1}] = {hex(arg2)}") opidx += 2 elif opc[opidx] & 0xFF == 0x41: arg1 = pop() arg2 = pop() mem[arg1] = arg2 print(f"mov mem[{arg1}], stack[{stackidx}] = {hex(arg2)}") opidx += 2 elif opc[opidx] & 0xFF == 0x52: arg = pop() if not arg == 0: jmpaddr = opc[opidx+1] * 2 print(f"jnz to {hex(jmpaddr)}") opidx = jmpaddr else: opidx += 2 print(f"jnz denied") elif opc[opidx] & 0xFF == 0x60: print(f"nop") opidx += 2 elif opc[opidx] & 0xFF == 0xFF: print(f"exit") break else: print(f"unknown opc[{opidx}] = {hex(opc[opidx])}") break hexprint(mem[0x7D0:0x7D8]) hexprint(mem[0x7DA:0x7DE]) hexprint(mem[0xBB8:0xBBC] + mem[0xBC2:0xBCA])
|