System/[Pwnable.kr]
[Pwnable.kr] collision - 3pt 풀이
유뱃
2015. 7. 24. 14:53
[Pwnable.kr] collision - 3pt 풀이
check_password() 함수의 인자는 포인터로 받는다.
즉 주소인 4바이트로 나눠서 받는다.
argv[1]가 무조건 20바이트여야 된다.
check_password(argv[1])와 hashcode와 동일하게 맞쳐주면 플래그가 출력된다.
check_password함수는 4바이트로 나눠서 받기 때문에 hashcode를 5로 나눠보았다.
저렇게 나오는것을 알 수 있다.
한번 다시 5로 곱해 보았다.
원본값에서 -4된 값이 나오는걸 볼 수 있다.
왜 그런건지는 모르겠지만 그렇게 나왔다.
check_password함수에서 4바이트로 나눠서 받고 그것을 res에 다 더하기 때문에,
hash값을 5로 나눈뒤 그 값인 0x6c5cec8을 4번 0x6c5cecc를 1번 이렇게 인자값에 넣어주면,
check_passwor()에서 res로 다 더해주고 res를 return 한다.
그러면 hashcode랑 값이 동일해져서 플래그가 출력 될 것이다.
클리어