-
[Reversing] Reversing MeWargame/HackCTF 2019. 11. 21. 23:17
문제설명
이 코드는 입력값을 xor과 %를 이용하여 serial값과 비교한 값들이 모두 같으면 "정답일세!"를 출력하는 코드이다.
#include <stdio.h> #include <string.h> int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++); if (i - 1 == strlen(enter)) printf("정답일세!\n"); } else printf("그건 아닐세...\n"); exit(0); }
접근방법
XOR은 다음과 같은 공식이 성립한다.
"A ^ [고정값] = B" 은 "B ^ [고정값] = A"과 같다.
그러므로 다음이 성립하게 된다.
"enter[i] ^ (i % 2) = serial[i]" 은 "serial[i] ^ (i % 2) = enter[i]" 가 같다.
풀이
코드를 조금 수정하여 풀어보았다.
#include <stdio.h> #include <string.h> int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; for (i = 0; i < strlen(serial); i++) printf("%c", serial[i] ^ (i % 2)); }
Get Flag!
'Wargame > HackCTF' 카테고리의 다른 글
[Reversing] Static (0) 2019.12.04 [Reversing] Keygen (0) 2019.11.24 [Reversing] strncmp (0) 2019.11.21 [Reversing] Handray (0) 2019.11.21 [Reversing] Welcome_REV (0) 2019.11.21