controlpro

Reversing1일차 easy crack 본문

카테고리 없음

Reversing1일차 easy crack

controlpro 2020. 11. 27. 20:39
728x90

Reversing.kr 1번문제 easy crack Write up Start 

 

Reversing 너무 오랜만에 해서 쉬운문제 부터 ㄱㄱ 

처음에 문제를 실행 했을 때 나타나는 화면이다. 특정한 입력을 했을 경우에 Incorrect 혹은 congratualation 이 뜬다.

문제를 디버거로 풀어보자!

 

 

 

사용한 디버거는 Ollydbg이고, 처음에는 ida의 힘을 조금 빌리기도 했다. 

리버싱의 핵심은 처음부터 찬찬히 내가 이 프로그램을 분석해보겠다라는 자세가 중요하긴 한데, 귀찮으니 pass 

 

F8로 계속해서 실행 시키면서 Jump문(jnz) 혹은 if문(cmp)문을 중심으로 계속해서 찾아나간다. 

 

 

main문을 계속해서 실행하다 보면은, 

 

분기점이 발생하게 되고, 여기에 Breakpoint를 건다음(F2로 가능) Ctrl + F2로 다시 실행시킨후 F7로 저 함수에 직접 들어가보자 

 

 

들어가면은 다음과 같은 함수 목록이 나오는데, 다시 여기서 DialogBox로 가는 것을 봐서는 여기에 다시 Breakpoint를 걸고 함수의 내용을 살펴 보면 (다음은 아무 함수 값이나 입력 시켰을 때 나온 결과들)

 

그냥 갑자기 Incorrect가 뜬다. 굉장히 빡치지 않을 수 가 없는데,  Reversing을 할때 프로그램이 일단 주는 힌트들이 있는데 incorrect도 힌트가 될 수 있다. 

 

4분할 했을 때 첫번째 화면을 우클릭한 다음에 Search for -> All referenced text string 이 있는데 여기에 들어가면 

 

이 text가 언제 어디서 나왔는지 알 수 있다. 대충 저런 말이 나오기 전에 정답에 대한 체크를 할 테니까 확인을 해보면(Incorrect Password 를 두번 누르면 된다.) 

다음과 같이 Incorrect Password가 나오는데 여기서 조금만 위로 올라가면 검사하는 루틴을 확인할 수 있다 . 

요러한 루틴이 있는데 이제 이 루틴을 하나하나 리버서의 자세로 분석을 해보자! 

리버싱을 할 때 아까도 말했지만 중요한 부분 부분을 신경써서 보는 것이 빨라지는데, Jmp문이나 if같은 구문을 잘보면 된다. 

 

처음으로 비교후 jmp문이 나오는 경우는 CMP BYTE PTR SS:[ESP+5] 저 부분이고 ESP+5는 우리가 입력한 문자열의 두번째 부분이다. 따라서 두번째 자리가 a라는 것을 알수 있다.  

esp+5 부분(aaaabbbb)

그리고 그다음 CMP문을 확인을 해보면 

다음과 같고 이 부분은 [ESP+A] 이 5y와 같다는 것이다. 여기서 ESP의 위치를 고려 하여 계산해 봤을 때 3번째 4번째 자리 임을 확인 할 수 있다. 

 

다음 jmp문이 속한 구문은 여기고 여기 문제를 F8을 통해 하나씩 실행시키다 보면 

ESI에 R3versing이라는 값을 올려주고 EAX에 내가 입력한 값을 올려줘서 2자리씩 비교하는 구문이므로 나머지 자리는 R3versing이 되겠다 .

 

마지막으로 첫번째 자리가 0x45 즉 E가 되니까 조합하면 정답이 되겠다 .

728x90
반응형