Wargame/pwnable.xyz
pwnable.xyz / l33t-ness
Syine Mineta
2020. 1. 13. 19:01
숫자로 장난치는 문제다. 포너블이라기보다는 리버싱 문제 같다..
printf("x: ");
read(0, buf[0], 0x10uLL); printf("y: "); read(0, buf[1], 0x10uLL); if ( strchr(buf[0], '-') || strchr(buf[1], '-') ) return 0; x = atoi(buf[0]); y = atoi(buf[1]); if ( x <= 1336 && y <= 1336 ) result = x - y == 1337; else result = 0; return result; |
round_1
sub 문제와 똑같지만 음수 기호를 쓸 수 없다. x=1336
, y=4294967295
를 사용하면 된다.
_isoc99_scanf("%d %d", &x, &y);
return x > 1 && y > 1337 && x * y == 1337; |
round_2
두 수를 곱해서 1337을 만들어야 하며, 하나는 1보다 커야 하고 다른 하나는 1337보다 커야 한다.
2^32+1337=4294968633 는 integer overflow로 결과값이 1337이 되고, 소인수분해하면 3*3*12289*38833 이다. 범위 조건에 맞게 인수들을 잘 분배해서 나눠주면 된다.
_isoc99_scanf("%d %d %d %d %d", &n[0], &n[1]);
for ( i = 1; i <= 4; ++i ) { if ( n[i] < n[i - 1] ) return 0LL; } return n[3] + n[2] + n[1] + n[0] + n[4] == n[3] * n[2] * n[1] * n[0] * n[4]; |
round_3
5개의 숫자를 입력받는다. 이 숫자들은 단조 증가하면서 5개를 전부 더한 값과 5개를 전부 곱한 값이 같아야 한다. 간단한 답으로는 5개의 0이 있다.

Last update: 10/23/2020