반응형
[summary] xor swap
C++ Trap #3
int main()
{
unsigned int x = 0xB0FF14a5;
unsigned int y = 0x7340c00e;
/*INPUT*/
if(x==0x7340c00e && y==0xB0FF14a5) victory();
return 0;
}
Your main objective is to call the victory function.
You must put one line of your code:
- Max 11 chars.
- You can't use: "main", "victory", "asm", "&", "*", "(", "/".
- You have only one semicolon.
x랑 y의 값을 서로 바꿔주면 된다. 다만 늘 하던대로 새로 변수를 만들어 할 수가 없기 때문에, 다른 swap 알고리즘이 있는지 찾아보았다.
XOR swap 알고리즘이 있더라. 다음과 같음
A = A ^ B;
B = A ^ B;
A = A ^ B;
결국 이런 방식이다.
A = A ^ A ^ B
B = A ^ B ^ B
위의 알고리즘을 어떻게 할당 연산자로 바꿔보니 사이즈가 딱 맞아 떨어진다. 아마 이걸 의도한 문제인 것 같다.
x^=y^=x^=y;
반응형
'Write-up' 카테고리의 다른 글
[W3Challs] Hacking Change your browser writeup (3) | 2019.05.01 |
---|---|
[securitytraps.pl] Exploits/Riddles Training writeup (0) | 2019.05.01 |
[securitytraps.pl] Exploit/Riddles Equation writeup (0) | 2019.05.01 |
[securitytrap.pl] Exploit/Riddles The Truth writeup (0) | 2019.05.01 |
[pwnable.kr] unlink write-up (0) | 2019.05.01 |