-
특이점이 온 randomWargame/Pwnable.kr 2019. 12. 29. 11:10
이 문제를 최근에 다시 풀어본 결과, 3039230856 을 입력하면 eax가 0으로 되어 있는것을 확인할 수 있었다.
따라서, 문제 풀이 방법을 살짝 바꿔보았다.
unsigned int 변수에 입력을 받으므로, 음수를 입력받으면 !(입력받은 값) 이 되는 것을 확인 할 수 있다.
즉, -2를 입력하게 되면 0xfffffffe 를 나타낸다. (0 -> 1, 이후 1을 더해주는 연산을 취함.)
2 0000 0010 -2 1111 1110
random 값이 0x6b8b4567 이었고, key 값을 구하는 과정에서 xor 연산은 교환법칙이 성립한다.
random ^ key = 0xdeadbeef random ^ 0xdeadbeef = key
key 값은 0xb526fb88, 10진수로 3039230856 이다. 이 값이 나타나는 음수 값을 이용해보자.
NOT(3039230856) -> 0x4ad90477 앞의 ffffffff 생략 NOT(0x4ad90477) -> -1255736440(0xb526fb88)
이므로, -1255736440 이라는 값을 입력해주면 eax에 정상적으로 0xb526fb88 값이 들어갈 것이다.