Wargame/Pwnable.kr

특이점이 온 random

210_ 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 값은 0x‭b526fb88‬, 10진수로 ‭3039230856‬ 이다. 이 값이 나타나는 음수 값을 이용해보자.

NOT(‭3039230856‬) -> 0x4ad90477 앞의 ffffffff 생략
NOT(0x4ad90477) -> -1255736440(‭0xb526fb88‬)

이므로, -1255736440 이라는 값을 입력해주면 eax에 정상적으로 0x‭b526fb88‬ 값이 들어갈 것이다.