
프로그램을 실행하면 다음과 같다.
숫자를 입력하고 check 버튼을 눌렀을때
프로그램이 종료되어 디버거로 열어보았다.

string중 check나 wrong을 출력하는 부분을 검색하여서 해당장소로 간 후 bp를 걸었다.

숫자를 입력하면서 프로그램 돌아가는것을 조사 해 보았다.

숫자 입력된 것을 검색해보니 따로 나오지 않는것으로 보아
입력받은 숫자에 처리를 하는것 같다.

프로그램이 실행되다보면 해당 부분에서 오류를 내뱉는 것을 볼 수 있다.
해당 부분은 eax에 해당하는 메모리에 접근하는데
이 eax 해당 메모리는 입력받은 값에 따라 값이 달라지는걸 유추해 낼 수 있다.

이 eax값은 입력값에서 1을 더하고 후에 뭔가 처리를 해주는데 이를 알아보기위해
FFFFFF를 넣고(1을 더하면 0)
진행해보니

다음과같이 601605CA가 나온다는 사실을 알았다.
즉, 이 프로그램은
입력값 + 1 + 601605CA에 해당하는 주소에 0x90(NOP)을 처리하는것이다.
다시 프로그램을 보다보면 jmp를 두번하는데 그중 첫번째 jmp가
이 NOP을 생성하는 위치로 가져오고 두번째 jmp를 없애면
correct분기점으로 도달하는것을 알 수 있다.
따라서 두번째 jmp의 위치인 0x00401071을 NOP으로 만들 수 있는 값을 조사하면


A02A0AA6값이 나오고 이를 10진수로 변환하면 값이 나온다.

'정보보안 > Reversing.Kr' 카테고리의 다른 글
EasyELF[Reversing.Kr] (0) | 2022.08.07 |
---|---|
Position[Reversing.Kr] (0) | 2022.08.07 |
ImagePrc[Reversing.Kr] (0) | 2022.08.03 |
Music Player[Reversing.Kr] (0) | 2022.07.17 |
Easy Keygen[Reversing.Kr] (0) | 2022.07.05 |