Wargame/HackCTF
[Reversing] Reversing Me
210_
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!