리버싱 실력이 조금 딸리는거 같아서 reversing.kr 문제를 풀어보려 합니다.
먼저 Replace 를!
시작하면 요런 인풋창이 뜨는데 뭔가 인풋을 넣으면
꺼져버립니당...
그러니 디버거로 살펴봅시다.
프로그램이 제대로 보이는 부분입니다.
미리 주석도 좀 달아 놨는데 저기 있는 get input 부분이 유저의 인풋을 받고 4084d0 에 저장합니다.
그리고 그 밑에 함수를 보면
이런부분으로 오는데 4084d0 에 저장된 값을 +1 합니다.
뭐 그렇게 해서 함수가 끝나는듯이 보이고 그 밑에 jmp 로 들어가면
이런곳에 오는데
여기서 F8 을 조금 더 눌러보면
이런 부분에 옵니다. 여기서 에러가 발생하는데
지금 eip 에 있는 부분에 있는 코드를 보면 eax 에 저장된 주소의 가서 NOP 을 채우는것으로 보입니다.
지금 eax 를 보면 저런 주소에 가있습니다.
지금 저 주소는 아무 의미가 없는 주소입니다.
근데 저주소가 어떻게 생겨나냐면은
아마 input 따라 달라질것이다 하고 생각하고 input 을 0 으로 만들어 보려 했습니다.
근데 최종 input 은 +1 이 되므로 0xFFFFFFFF 를 넣어서 0 으로 만들었습니다.
그리고 eax 값을 봤는데 0x601605CA 가 나왔습니다.
그리고 input 으로 0 을 넣어서 1로 만들고 eax 를 보니 0x601605CB 가 되었습니다.
고로 저 eax 값은
0x601605CA + ( input + 1 ) = eax
가 됩니다.
이제 NOP 을 어디에 채울까 해보니
저기 2번째 JMP 문에 correct 로 가는 길을 막는거 같습니다.
그래서 저걸 NOP 으로 채우자! 해서
eax 를 저기 주소로 돌리기 위해 계산했습니다.
eax - 0x601605CA -1 = input
0x401071 - 0x601605CA - 1 = -1607857498 => 0xA02A0AA6 => 2687109798
고로 2687109798 를 넣으면
제대로 NOP 으로 바뀌어서
정답!
'Reversing' 카테고리의 다른 글
간단한 Arm 리버싱 (0) | 2018.01.06 |
---|---|
[CodeGate] RamG (0) | 2018.01.05 |
[???] cuty (2) | 2017.12.05 |
[DIMICTF2017] ToHard (0) | 2017.07.17 |