You’ve graduated from baby, congrats!
- [141 solves / 100 points]
리버싱 문제에서 솔브가 가장 많아서 도전해봤다.
Analysis
main을 살펴보면 플래그는 어디엔가 있다고 한다. 문자열 검색으로는 보이지 않고 함수 목록을 살펴보면 아래와 같은 함수가 보인다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int __fastcall sub_1165(char a1) { char v2[43]; char s[42]; char v4; int i;
memset(s, 0, sizeof(s)); v4 = 0; strcpy(v2, "]I^LQb\x1B^IBB\x1BA\x19X\x1Fum_\x1BN\x19u^\x1Au^B\x19um\x1EF\x1ERS\v\vu\x1E\x18W"); for ( i = 0; i <= 41; ++i ) s[i] = a1 ^ v2[i]; return puts(s); }
|
원래 strcpy
가 보이지 않았는데 변수들 자료형이나 배열 크기를 조절해주니까 보였다. 뭔가 puts
함수를 통해 flag를 출력해준다고 생각해서 저 함수만 따로 실행시켜보기로 했다.
Solve
아래와 같이 코드를 작성해주고 컴파일 후 실행하면..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <stdio.h> #include <stdlib.h>
char* v2; char s[42]; char v4; int i;
int main() { v4 = 0; v2 = "]I^LQb\x1B^IBB\x1B\x41\x19X\x1Fum_\x1BN\x19u^\x1Au^B\x19um\x1E\x46\x1ERS\v\vu\x1E\x18W"; char a1 = 42; for ( i = 0; i <= 41; ++i ) s[i] = a1 ^ v2[i];
puts(s); }
|
flag가 짠! 하고 나온다.
Flag
1
| wctf{H1tchh1k3r5_Gu1d3_t0_th3_G4l4xy!!_42}
|