리버싱.kr-Replace
GetDigItemInt()함수는 MSDN에서도 확인할 수 있지만 쉽게말하면 입력을 받는 함수!!
입력한 값 1111이 16진수로 변환되어 EAX레지스터에 들어가 있다.
004084D0=004084D0+601605C7 이 부분이 여기서 중요한 부분이다. 직접 실행해보면서 이해해보시길 부탁드릴꼐요.
여기서 벗어나질 못하는데 가만보면 60160A22는 주소가 없기 때문에 계속해서 머무르는 것이다. (0x90은 NOP이다.) 즉 저 연산된 주소의 값을 NOP으로 변환하라는 뜻이다.
NOP으로 바꿔주고 실행해보자!!
여기서 살펴보면 JMP문이 성공메시지 자체를 띄울 수 없도록 설정해 놓았다. 따라서 저 JMP문을 NOP으로 바꾸어 주어야한다. 입력한 값을 x라 두면 x+4+601605C7=00401072가 되어야한다. (맨처음에 00401071로 연산을 해서 계속 실패했다. 0401071~0401072까지 NOP으로 만들어야 하므로 00401072를 지정해 주어야한다. JMP SHORT는 2BYTE이기 때문)
값은 음수가 나오는데 음수는 입력할 수 없도록 설정되어 있다. 따라서 오버플로우를 이용해서 FFFFFFFF을 더해주면 제값이 입력된다.
0 개의 댓글