I've spend over half an hour on solving this task, beside of that wasn't a hard one. But thanks to this exercise I had to learn using regular expressions in my text editor :) Text file connected to this task looked exactly like that (but was much larger):
00000000: 4c5a 4950 01b3 007f b61b edf0 8440 58e3 LZIP.........@X. 00000010: 91de 1027 5861 8a67 4282 46a4 92f9 4cad ...'Xa.gB.F...L. 00000020: 2d5d 14eb 3099 2c31 01c2 d13a 74d2 c620 -]..0.,1...:t.. 00000030: de27 3a8f fa92 0644 5468 2d02 01fa 24bb .':....DTh-...$. 00000040: 719f a0fd a191 1678 8bff a2c4 2627 9871 q......x....&'.q 00000050: 83bf cff2 f8af 99fa c465 2b7c 6bdf ee3c .........e+|k..< 00000060: b71b f61b 0b5e 0ce7 d14f f6a8 0466 6470 .....^...O...fdp 00000070: de67 02da 7be1 1abd e9f0 ac87 131a bcc0 .g..{........... 00000080: 0b0b 9f31 9400 48e3 616a 8f3f 4804 79ad ...1..H.aj.?H.y. 00000090: a6bb 863a f641 01da b1ee c4fe b338 9289 ...:.A.......8.. 000000a0: 2a90 8302 4170 773c 88d3 2641 d274 f533 *...Apw<..&A.t.3 000000b0: 84cf e7d9 f687 3b12 1516 970e 04c2 cfdd ......;......... 000000c0: c1ca dc46 981d 2a7c 1b39 cb0b 4f8c 58cc ...F..*|.9..O.X. 000000d0: 46b4 9744 4cb1 fbd3 c632 f36d ecbf 4789 F..DL....2.m..G. 000000e0: 00b8 d4fc 51a8 394e de2a 1a2d 3c43 179c ....Q.9N.*.-<C.. 000000f0: 9623 f971 2935 9564 9e15 c771 c3d5 d8b1 .#.q)5.d...q.... 00000100: a7fa 3c0c f869 b829 f6d6 f145 6d57 b3a1 ..<..i.)...EmW.. 00000110: bd3f 3fc2 a41f 7e35 089c de29 1d55 debf .??...~5...).U.. 00000120: 5400 c548 5c02 cd6c f853 e3e6 56b2 e395 T..H\..l.S..V... 00000130: 29d8 3985 d307 d46e 854c 4987 aab8 a5cb ).9....n.LI..... 00000140: 2fea 6b20 6d24 34b3 a2a3 c8e4 247c 6681 /.k m$4.....$|f.
It's obviuos what we have to do to obtain the flag - we need to strip this text file from unnecessary things, and fill a new file with hex values. We can use any editor, which is capable of serving regular expressions, but I wrote some code in C to do that:
#include <stdio .h> #include <iostream> #include <fstream> using namespace std; int main(void) { int procent = 0; ifstream plik; plik.open("ctf2.txt"); ofstream plik2; plik2.open("output.txt"); char *buf = new char[100]; for (int i = 0; i < 21117; i++) { plik.getline(buf, 100); for (int j = 0; j < 68; j++) { if (j >= 10 && j <= 50 && buf[j] != ' ') { plik2 << buf[j]; } } if (i % 211 == 0) { cout << "\r" << procent << "\% done!"; procent ++; } } plik.close(); plik2.close(); delete [] buf; return 0; }
ctf2.txt was the task's text file ----> here,
and code to produce another C code from this raw bytes is downloadable here. Now we have raw hexadecimal which we have to put into file right now. I've used a code like that to do this:
#include <iostream> #include <fstream> using namespace std; char tab[] = { /* here goes the tab with all hexes */ }; int main(void) { ofstream plik; plik.open("binary.zip", ofstream::binary); for (int i = 0; i < sizeof(tab); i++) plik.put(tab[i]); plik.close(); return 0; }
Next thing to do is to unpack our new archive using lzip (just google this if u don't have one on your machine) and obtain an image with a flag. That's it!
Comments
Post a Comment