본문 바로가기

pwnable

passcode 일단 위의 소스코드를 보면 scanf로 값을 입력받는 부분의 변수가 전부다 &이 빠져있는 것을 볼 수 있다. 이러한 경우에는 변수에 값을 저장하는 것이 아니라 변수의 주소를 지정하게 된다. 따라서 이러한 오류를 이용하여 flag를 얻어내자! 1) 2) 1번의 0x0804862f를 보면 edx를 ebp-0x70의 공간만큼 간접 참조?를 하고 있는 것을 볼 수 있다. 그리고 0x08048632를 보면 edx는 scanf에 의해서 값을 입력받게 되는 것을 알 수 있다. 2번의 0x0804857c와 0x0804857f를 보면 ebp-0x10의 공간을 간접 참조하는 것을 알 수 있다. 여기서 중요한 것은 1번에서 scanf로 입력받은 값중에 마지막 0x10 즉 4바이트는 passcode의 주소가 된다. 따라서 자.. 더보기
random random.c의 소스코드이다. 위의 if( (key ^ random) == 0xdeadbeef) 부분에서 난수값과 key값을 xor연산을 해주어 0xdeadbeef가 되면 flag를 볼 수 있는 것을 알 수 있다. 브레이크 포인트를 4005fc와 400624 두 개를 잡아줬다. 이 두개를 잡은 이유는 난수가 스택에 어떤 위치에 저장이 저장이 되는 지 보기 위해서 이다. 위의 그림을 보면 난수의 값은 0x7fffe95fa1c에 저장된 것을 알 수 있다. 그리고 그 값은 0x6b8b4567이다. xor연산은 2개의 2진수의 값이 서로 다르면 1 같으면 0이 되는 연산인데 0x6b8b4567은 2진수로 01101011100010110100010101100111이고 0xdeadbeef는 110111101010.. 더보기