Profile

머리정리하는곳

c2w2m2

[Reversing.kr] Replace

리버싱 실력이 조금 딸리는거 같아서 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