Replace

숫자만 입력이 된다.
Wrong이 아니라 Correct 가 나오게 하면 될거같다.
12345라는 값을 넣어서 실행을 해봤는데, 0x40466F에서 예외가 발생한다.
0040466E | 00C6 | add dh,al | 0040466F | C600 90 | mov byte ptr ds:[eax],90 |
Python
이때 eax 에 있는 값이 60163604인데, Access violation이 난다.
eax의 주소에 90(NOP)를 적어주는 기능인데, 어떤 영역을 잘못 적어서 에러가 난 것 같다.
전체적인 동작을 적어보자
1.
0x4084D0에 입력값을 저장한다.
2.
(0x404689)에서 입력값 +1 을 한다.
3.
(0x404690)에서 eax 에 0x4084D0의 값을 가져오는데, 이때 값이 601605CA에 input+1 을 더한 값이다.
4.
이때 eax 값에 (0x601605CA + input +1)이 들어가 있고, 이 주소의 값을 NOP로 채운다.
5.
0x401071인 다음 점프문으로 간다.
이정도로 정리할 수 있다. 근데 첫번째 분기는 분석을 했는데, 두번째 점프문에서 항상 Correct를 넘어가기 때문에 jmp 부분을 NOP로 덮어버리는 방법을 선택할 수 있다.
즉 0x401071이 eax 값이길 원하고, 이때 input은 -1607857754 이면 된다. 이는 아래 계산식과같다.
즉 입력값으로 2687109542를 넣어주면 된다.