Lena Reversing tutorial 05
이번 튜토리얼의 목적은 주어진 VisualSite Designer 프로그램 중
10번만 실행 할 수 있는 점을 고치고
프로그램 종료시 나오는 광고창이 뜨지 않도록 하는 것이다.
그럼 프로그램을 실행시켜 보자
첫 화면에서는 하단에 시도횟수가 10번 남았다고 나온다. Start Program을 눌러보자
프로그램이 실행 된 모습이다. 앞서 나온 창을 없애고 바로 위와 같이 실행되도록 바꾸어 주어야겠다.
프로그램을 종료시키면 다음과 같은 창이 나온다.
광고창으로 보인다.
다음의 창도 없애주도록 하자.
해당 프로그램을 Ollydbg에서 열어주었다.
실행 하여 Control + F8을 누르면 F8을 계속 누르고 있는 것 처럼 쭉 진행된다.
진행되다가 다음과 같은 Call에서 첫 화면이 나오며 정지했다.
여기에 break point를 걸어주자
F2를 눌러 break point를 설정해주었다.
프로그램을 다시 실행시키고 F9를 눌러 진행시켰다.
걸어주었던 break point에 멈추었고 여기서 F7을 눌러 안으로 들어간다.
JMP문이 보인다. F8을 눌러 진행해보자
Control + F8로 계속 진행해도 상관없다.
이번에는 여기서 멈추었다.
이번에도 같은 방법으로 Break point를 설정하면 다시 실행했을때 break point가 제대로 동작하지 않는것을 확인할 수 있다.
주소를 확인하면 73으로 시작하는 주소가 보인다.
상단의 M 버튼을 눌러 Memory map을 확인해보자.
내리다보면 해당 주소가 보인다. 해당 주소는 MFC42라고 적혀있는 것이 보인다.
이는 mfc42.dll 즉 시스템 dll의 주소이다.
이처럼 시스템 파일들의 주소는 F2를 활용한 일반적인 break point 활용이 어렵다.
이때에는 hardware breakpoint를 사용해야 한다.
해당 줄의 오른쪽 마우스를 눌러 Breakpoint -> Hardware, on execution을 눌러준다.
확인을 할 때에는 Ollydbg 상단의 Debug 탭의 Hardware Breakpoints를 눌러준다.
다음과 같이 breakpoint가 걸린 것을 확인할 수 있다.
최대 4개만 설정할 수 있다는 것이 단점이다.
다시 실행해서 진행해보면 설정한 breakpoint에 멈추는것을 확인할 수 있다.
호출된 Call stack을 보기 위해서는 K 버튼을 눌러주면 확인할 수 있다.
이전에 진행된 부분들이 눈에 보인다.
쭉 살펴 보았지만 안쪽으로 들어가도 횟수를 판단하거나 첫 화면을 띄울지 말지에 대한 조건은 보이지 않는다.
다시 처음의 breakpoint 위쪽을 살펴보니 조건문이 보인다.
EDI + E4의 주소를 가서 확인해 보니 A의 값이 설정 되어 있다. 이는 시도 횟수로 보여진다.
JLE문에서 Z 플래그를 0에서 1로 바꾸고 진행 해 보니 시도횟수가 끝나 구매할지 종료할지에 대한 창이 출력된다.
따라서 해당 분기문은 시도횟수가 모두 소모되었는지 아닌지를 판단하는 것으로 보인다.
그렇지만 목적과는 다르기 때문에 좀 더 올라가 보았다.
Breakpoint를 걸고 확인해보았다.
JNZ문에서 Z 플래그가 1로 설정되어 있다.
0으로 바꾸어주고 실행해보니 시도횟수가 나타나는 첫 화면이 나오지 않고 그대로 프로그램이 실행된다.
따라서 해당 부분을 JMP문으로 변경하고 copy to executable 을 눌러 프로그램을 저장해 주었다.
저장한 프로그램을 실행해보면 시도횟수가 나타나는 첫화면 없이 프로그램이 실행된다.
다음은 종료시 나타나는 광고창을 없애도록 한다.
프로그램을 실행시키고 광고창이 나오도록 종료시킨다.
광고창이 나오면 F12를 눌러 일시정지 시킨다.
그 후 상단의 K 버튼을 눌러 Call stack을 확인한다.
가장 상단에 있는 VisaulSite Designer 의 콜이 보인다. 00480C24에서 Call이 된 것이 보인다.
해당 주소로 이동한다.
해당 Call 부분이 광고를 출력하는 Call로 보인다.
다음 구문인 LEA 문에 Breakpoint를 설정하고 진행하니 Call 하여 광고를 출력한 후 다시 돌아오는 것을 확인할 수 있다.
그럼 해당 Call 구문을 NOP으로 바꾸어주자.
NOP으로 바꾼 후 copy to executable을 통해 프로그램을 저장해 주었다.
저장한 프로그램을 실행해 보면 종료 후 나오는 광고 창이 없어진 것을 확인 할 수 있다.
이번 튜토리얼에서는 Hardware breakpoint와 Call stack을 확인하는 연습을 할 수 있었다.
끝.
'Security&Hacking > 리버싱' 카테고리의 다른 글
Lena Reversing - tutorial 07 (0) | 2020.03.04 |
---|---|
Lena Reversing - tutorial 06 (0) | 2020.03.02 |
Lena Reversing - tutorial 04 (0) | 2020.02.27 |
Lena Reversing - tutorial 03_2 (0) | 2020.02.24 |
Lena Reversing - tutorial 03_1 (0) | 2020.02.24 |