这道题是虽然只有75分,但是做出来的队伍却很少,我们队伍也没有做出来,这次是看到了0xAWES0ME 的解题思路后才有了这篇文章。原文地址可以点击看这里,英文的。
题目就是一张图片:
在网上可以找到这个图片的原图,唯一的区别就是这6条线,通过Photoshop软件可以看到它们的起始点:
- (1,0) (56,55)
- (57,0) (112,55)
- (113,0) (168,55)
- (169,0) (224,55)
- (225,0) (280,55)
- (281,0) (336,55)
现在起始点有了,直接取相关的像素点来看看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/python # coding: UTF-8 import Image __author__ = ‘root‘ img_file = ‘Steg75.png‘ im = Image.open(img_file, ‘r‘) im.load() im_rgb = im.convert(‘RGB‘) j = 0 while j < 6: n = 0 while n < 56: c = im_rgb.getpixel((56*j+1+n,n)) print "%d\t%d\t%d" % c n += 1 j += 1 print ‘------------------------------------------------------------------------------‘ |
可以得到如下的数据:
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 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
86 84 1 74 70 2 103 97 3 121 113 4 102 92 5 94 82 6 93 79 7 124 108 8 110 92 9 132 112 10 114 92 11 133 109 12 91 65 13 98 70 14 96 66 15 67 35 16 106 72 17 124 88 18 122 84 19 69 29 20 111 69 21 106 62 22 88 42 23 146 98 24 115 65 25 113 61 26 104 50 27 77 21 28 107 49 29 98 38 30 108 46 31 152 88 32 111 45 33 121 53 34 117 47 35 145 73 36 116 42 37 106 30 38 120 42 39 161 81 40 130 48 41 148 64 42 147 61 43 153 65 44 122 32 45 114 22 46 146 52 47 168 72 48 138 40 49 156 56 50 140 38 51 172 68 52 155 49 53 135 27 54 116 6 55 117 5 56 ------------------------------------------------------------------------------ 142 28 57 130 14 58 159 41 59 177 57 60 158 36 61 150 26 62 149 23 63 180 52 64 166 36 65 188 56 66 170 36 67 189 53 68 147 9 69 154 14 70 152 10 71 122 235 72 162 16 73 180 32 74 178 28 75 124 229 76 167 13 77 162 6 78 143 242 79 202 42 80 171 9 81 169 5 82 159 250 83 132 221 84 162 249 85 153 238 86 163 246 87 208 32 88 166 245 89 176 253 90 172 247 91 201 17 92 171 242 93 161 230 94 175 242 95 217 25 96 185 248 97 204 8 98 203 5 99 209 9 100 177 232 101 169 222 102 201 252 103 224 16 104 193 240 105 212 0 106 195 238 107 228 12 108 210 249 109 190 227 110 171 206 111 172 205 112 ------------------------------------------------------------------------------ 197 228 113 185 214 114 214 241 115 233 1 116 213 236 117 205 226 118 204 223 119 235 252 120 221 236 121 244 0 122 225 236 123 244 253 124 202 209 125 209 214 126 207 210 127 178 179 128 217 216 129 235 232 130 233 228 131 180 173 132 222 213 133 217 206 134 199 186 135 1 242 136 226 209 137 224 205 138 215 194 139 188 165 140 218 193 141 209 182 142 219 190 143 7 230 144 222 189 145 232 197 146 228 191 147 0 215 148 227 186 149 217 174 150 231 186 151 16 223 152 241 192 153 3 206 154 2 203 155 8 207 156 233 176 157 225 166 158 1 194 159 23 214 160 249 184 161 11 198 162 251 182 163 27 210 164 10 191 165 246 171 166 227 150 167 228 149 168 ------------------------------------------------------------------------------ 253 172 169 241 158 170 14 185 171 32 201 172 13 180 173 5 170 174 4 167 175 35 196 176 21 180 177 43 200 178 25 180 179 44 197 180 2 153 181 9 158 182 7 154 183 234 123 184 16 158 183 34 174 184 32 170 185 236 117 188 21 155 187 17 149 190 255 130 191 56 184 192 26 152 193 24 148 194 15 137 195 244 109 196 18 136 197 9 125 198 19 133 199 62 174 200 22 132 201 32 140 202 28 134 203 55 159 204 27 129 205 17 117 206 31 129 207 71 167 208 40 135 209 58 151 210 57 148 211 63 152 212 32 119 213 25 109 214 56 139 215 78 158 216 48 127 217 66 143 218 50 125 219 82 155 220 65 136 221 45 114 222 27 93 223 28 92 224 ------------------------------------------------------------------------------ 53 116 225 41 102 226 70 129 227 88 145 228 69 124 229 61 114 230 59 110 229 90 138 230 76 123 231 98 142 232 80 123 233 99 139 234 57 96 235 64 101 238 62 97 239 33 66 240 72 103 241 90 119 242 88 115 243 35 60 244 77 100 245 72 93 246 54 73 247 112 128 248 81 96 249 79 92 250 70 81 251 43 52 252 73 80 253 64 69 254 74 77 255 118 120 2 77 77 3 87 85 3 83 79 4 111 105 5 82 74 6 72 62 7 86 74 8 126 113 9 96 80 10 114 96 11 113 93 12 119 97 13 88 64 14 80 54 15 112 84 16 133 104 17 104 72 18 122 88 19 106 70 20 137 100 21 121 81 22 101 59 23 82 38 24 83 37 25 ------------------------------------------------------------------------------ 109 61 25 97 47 26 126 74 27 144 90 28 125 69 29 117 59 30 116 56 31 147 85 32 133 69 33 155 89 34 137 69 35 156 86 36 114 42 37 121 47 38 119 43 39 90 12 40 129 49 41 147 65 42 145 61 43 92 6 44 134 46 45 129 39 46 111 19 47 169 75 48 138 42 49 136 38 50 127 27 51 99 254 52 130 26 53 121 15 54 131 23 55 175 65 56 134 22 57 144 30 58 140 24 59 168 50 60 139 19 61 129 7 62 143 19 63 184 58 64 153 25 65 171 41 66 170 38 67 176 42 68 145 9 69 136 255 70 167 28 70 189 48 71 159 16 72 177 32 73 161 14 74 193 44 75 176 25 76 156 3 77 136 237 78 137 236 79 ----------------------------------------------------------------------------- |
rgb的b值有一定的规律,但是到这里我们就陷入迷茫了。
看了0xAWES0ME的文章才豁然开朗:将每一条线的r-b,然后换算成ascii,组成一个字符串,再根据字符串进行下一步的操作.
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 |
#! /bin/python # encoding:utf-8 """ @date: 2014-07-31 @description: stego 75 test py """ import sys __author__ = ‘huangjacky‘ reload(sys) sys.setdefaultencoding(‘utf-8‘) def GetStrFromTxt(): f = open(‘steg75.txt‘) n = 0 s = "" for ff in f: ff = ff.strip() if not ff: continue if ‘--‘ in ff: n += 1 print ‘%d : %s‘ % (n, s) s = ‘‘ else: d = ff.split() r = int(d[0]) g = int(d[1]) b = int(d[2]) x = abs(r - b) c = chr(x) s += c def main(): GetStrFromTxt() if __name__ == ‘__main__‘: main() |
最后输出的结果:
这六行当中可以看出来第一行是经过base64加密的,尝试解密一下:
这样就搞定了。
总结一下:
当初我们做题的纠结在所有数据连在一起的规律上面了,所以一直没有找到,第二就是,我们尝试r-b来换算ascii,但只是个别字符,没有全部列出来。所以做题的时候一定要把想法做下去!
Pwnium CTF2014 – MatterOfCombination writeup