CSAW CTF 2017 tableEZ Reversing 100pt 문제입니다
해당 문제를 IDA로 문제를 대략 파악할 수 있습니다.
1. s2 배열에 암호화된 data를 복사
2. flag를 input 받음
3. input = get_tbl_entry(input)
4. 암호화된 input 과 s2 비교
s2로 복사된 data는 다음과 같습니다
해당 암호화 데이터는 리틀엔디안 형식으로 저장되어 있기 때문에 따로 정렬해주었습니다.
27 B3 73 9D F5 11 E7 B1 B3 BE 99 B3 F9 F9 F4 30 1B 71 99 73 23 65 99 B1 65 11 11 BE 23 99 27 F9 23 99 05 65 CE
get_tbl_entry 함수를 보면 trans_tbl 배열과 input 각 자리 값을 비교하여 같다면 trans_tbl[i * 2 - 1] 을 리턴해줍니다.
(동적디버깅 해보면 return 하는 byte 값이 trans_tbl[i * 2 - 1] 인것을 알 수 있습니다)
반복문은 0부터 순차적으로 돌기 때문에 간단히 역연산 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | table = '01 BB 02 9B 03 C4 04 6C 05 4A 06 2E 07 22 08 45 09 33 0A B8 0B D5 0C 06 0D 0A 0E BC 0F FA 10 79 11 24 12 E1 13 B2 14 BF 15 2C 16 AD 17 86 18 60 19 A4 1A B6 1B D8 1C 59 1D 87 1E 41 1F 94 20 77 21 F0 22 4F 23 CB 24 61 25 25 26 C0 27 97 28 2A 29 5C 2A 08 2B C9 2C 9F 2D 43 2E 4E 2F CF 30 F9 31 3E 32 6F 33 65 34 E7 35 C5 36 39 37 B7 38 EF 39 D0 3A C8 3B 2F 3C AA 3D C7 3E 47 3F 3C 40 81 41 32 42 49 43 D3 44 A6 45 96 46 2B 47 58 48 40 49 F1 4A 9C 4B EE 4C 1A 4D 5B 4E C6 4F D6 50 80 51 2D 52 6D 53 9A 54 3D 55 A7 56 93 57 84 58 E0 59 12 5A 3B 5B B9 5C 09 5D 69 5E BA 5F 99 60 48 61 73 62 B1 63 7C 64 82 65 BE 66 27 67 9D 68 FB 69 67 6A 7E 6B F4 6C B3 6D 05 6E C2 6F 5F 70 1B 71 54 72 23 73 71 74 11 75 30 76 D2 77 A5 78 68 79 9E 7A 3F 7B F5 7C 7A 7D CE 7E 0B 7F 0C 80 85 81 DE 82 63 83 5E 84 8E 85 BD 86 FE 87 6A 88 DA 89 26 8A 88 8B E8 8C AC 8D 03 8E 62 8F A8 90 F6 91 F7 92 75 93 6B 94 C3 95 46 96 51 97 E6 98 8F 99 28 9A 76 9B 5A 9C 91 9D EC 9E 1F 9F 44 A0 52 A1 01 A2 FC A3 8B A4 3A A5 A1 A6 A3 A7 16 A8 10 A9 14 AA 50 AB CA AC 95 AD 92 AE 4B AF 35 B0 0E B1 B5 B2 20 B3 1D B4 5D B5 C1 B6 E2 B7 6E B8 0F B9 ED BA 90 BB D4 BC D9 BD 42 BE DD BF 98 C0 57 C1 37 C2 19 C3 78 C4 56 C5 AF C6 74 C7 D1 C8 04 C9 29 CA 55 CB E5 CC 4C CD A0 CE F2 CF 89 D0 DB D1 E4 D2 38 D3 83 D4 EA D5 17 D6 07 D7 DC D8 8C D9 8A DA B4 DB 7B DC E9 DD FF DE EB DF 15 E0 0D E1 02 E2 A2 E3 F3 E4 34 E5 CC E6 18 E7 F8 E8 13 E9 8D EA 7F EB AE EC 21 ED E3 EE CD EF 4D F0 70 F1 53 F2 FD F3 AB F4 72 F5 64 F6 1C F7 66 F8 A9 F9 B0 FA 1E FB D7 FC DF FD 36 FE 7D FF 31' table = table.split() en_flag = '27 B3 73 9D F5 11 E7 B1 B3 BE 99 B3 F9 F9 F4 30 1B 71 99 73 23 65 99 B1 65 11 11 BE 23 99 27 F9 23 99 05 65 CE' en_flag = en_flag.split() flag = '' for i in en_flag: for j in range(255): if table[j * 2 + 1] == i: flag += ''.join(chr(int(table[j * 2], 16))) break print flag #flag{t4ble_l00kups_ar3_b3tter_f0r_m3} | cs |
'CTF' 카테고리의 다른 글
[SECCON 2017] JPEG file (0) | 2018.01.20 |
---|---|
[Defcon 2016] Baby-re (0) | 2018.01.18 |
[Christmas CTF 2017] Simple_Bit (2) | 2018.01.10 |
TUCTF 2016 Reverse for the Holy Grail (0) | 2017.12.30 |
제 1회 서울디지텍고등학교 청소년 해킹방어대회 (0) | 2017.12.09 |