블로그 이미지
Nehoy
경기대학교 / kknock

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Tag

2016. 5. 18. 23:09 Hack/리버싱








 일단 "1분 미리~"를 띄우는 메세지 박스 함수의 주소를 찾는다.

 (rtcMsgBox함수의 주소가 0x0040104C인 것을 볼수있다!)


 이 함수 주소에 하드웨어 브레이크 포인트를 사용하여, 어느 부분에서 이 함수를 통해 "1분 미리~"라는 문자열을 출력하는지 찾아낸다.


 브레이크 포인트 때문에 프로그램이 중지되었을 때, Call Stack을 통해서 함수를 호출한 코드의 주소를 참조한다.

 

 그러면 이렇게 rtcMsgBox함수가 사용된 것을 볼 수 있는데, 이 메세지는 1분이 지날 때에만 출력이 되므로 분기가 있을거란걸 예상할 수 있으므로, 이 함수를 호출하는 코드 부분을 감싸고 있는 분기문을 찾으면

 

 이 곳이 되는데 여기가 First Check Routine인 것을 알 수가 있다!


 일단, 1분이 지나도 이 코드 부분이 실행되지 않도록 jl을 jmp로 바꿔준다.


//


하지만 이렇게만 했을 경우에는 

이런 오류 메세지가 뜨는 것을 볼 수가 있다.


나는 이 때 First Check 코드 부분을 제외하고도 1분이 지났을 때에만 실행이 되는 코드 부분이 있을거라고 생각했고, First Check Routine 밑 코드들 중 의심스러운 모든 분기문에 break point를 사용하여 Second Check Routine와 Third Check Routine를 찾아내었다.



이 두 routine 중 에러 메세지가 출력 되기 전에 실행되는 코드를 break point로 찾아내면, 그 부분이 third check routine인 것을 알 수 있는데


 이 부분 또한 아까와 같이 jge를 jmp로 바꾸어준다.



 이제 다시 실행해보면 1분이 넘어갔을 때, 프로그램의 타이틀이 Password is LIstenCare로 변한 것을 볼 수 있다! 끝!

'Hack > 리버싱' 카테고리의 다른 글

[CSAW 2017] tablez  (0) 2017.09.20
[Codegate 2016] compress  (0) 2017.05.20
[CodeEngn] Challenges : Basic 01  (0) 2016.12.20
[Reversing.kr] imagePrc  (0) 2016.05.30
[Reversing.kr] Easy Unpack  (0) 2016.05.12
posted by Nehoy