알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
Lena Reversing for newbies(기초)(1) 본문
Lena Reversing for newbies(기초)
이번 강좌는 Lena 라는 사람이 초보유저를 위해서 올려 놓은 크랙 파일입니다.
1단계 목표는 위의 메세지를 없애는 것입니다.
그럼 ollydbg 로 실행 해 보겠습니다.
일단 F9를 눌러 start 코드 까지 가보겠습니다.
일단 이파일은 F9로 전진 하다 보면
00401162 $- FF25 64514000 JMP [<&MSVBVM50.#100>] ; MSVBVM50.ThunRTMain
을 보니 visual studio 로 작성된것임을 알수 있습니다.
그럼 여기서 우리는
메세지 박스를 없애기 때문에
코드 에서 msgbox 을 사용 했을것으로 유추 하고
ollydebug 에서 오른쪽 버튼을 눌러 Search for - All intermodular calls 명령을 사용 하겠습니다.
그리고 Destination 을 눌러서 정렬을 시켜 줍니다.
이중에 하나가 아닐까 라는 생각에 모두 break point 을 걸어 주고 프로그램을 실행 시켜 줍니다.
그럼 그중 break point 중 1개가 걸리게 됩니다.
해당 CALL 문에서 F9 을 눌러서 전진 해 보면
해당 CALL 문이 문제의 메세지 창임을 알수 있습니다.
해당 문제를 해결하는데 여러가지 방법이 있지만
이전에 stack 와 함수 처리 방식에 대해서 살펴 봤으니 해당 이론을 응용 하여 해결 하겠습니다.
해당 CALL 문 위로 쭉쭉 올라 가다 보면
해당 함수 가 호출이 시작 된 부분을 찾을수 있습니다 .
함수 초입부 이죠 .
PUSH EBP
MOV EBP,ESP
이건 함수 초입이죠
그럼 해결 방안중 1개는 바로 리턴을 해버리는 것이죠 .
그럼 밑에 코드를 실행 안하고 리턴을 하는것이죠 .
하지만 그냥 리턴을 하면 안됩니다.
스택을 정리 해주고 리턴을 해줘야 합니다.
그럼 스택을 어떻게 정리해줘야 하나 ?
우리는 해당 함수를 부른 CALL 에서 CALL 을 부르기 전과 후의 ESP를 봐서
아 ! 원래 함수를 스택을 이렇게 복귀 시켜줬구나
를 인지 하고 나도 이렇게 복귀 해주면 되겠다 라는 방안으로 가겠습니다.
먼저 해당 PUSH EBP 에 break point 를 걸고 스택을 보겠습니다 .
왜냐하면 CALL 을 호출할때 스택에 CALL 호출 후 RETN 할때 어디로 복귀 해야 하는지에 대해서 그 주소를 스택에 저장하기 때문입니다.
저의 stack 에는 위와 같이 쌓여 있네요
그럼 저 0F01E5A9 로 덤프 해서 해당 disasm 을 보겠습니다.
EAX 레지스터에 있는 값을 호출 하였던 거군요 .
그럼 해당 CALL 이전과 이후에
break point 를 걸어 stack 의 변화를 보겠습니다.
해당 상태일때 ESP 레지스터를 보겠습니다.
0019F188 이네요
그럼 CALL 후에 보겠습니다
해당 상태 일때
0019F18C 이네요
그렇다면 이것은 4만큼 증가 한것을 알수 있습니다.
그럼 저희도 해당 함수 부를때 RETN 4 = RETN + POP 4 를 사용해서 리턴과 통시에 Stack 을 정리 해주면 됩니다.
그럼 다시
에서
호출 하자 마자
해주고 실행 하면 바로 리턴을 해서 메세지 창을 안나오게 됩니다.
그렇다면 저장을 하려면
해당 부분 선택후에
오른쪽 버튼 눌러서
하셔서 저장 하시면 됩니다.
'리버싱' 카테고리의 다른 글
[reversing] PE 헤더 분석 (1) (0) | 2018.05.03 |
---|---|
Lena Reversing for newbies(기초)(2) (0) | 2018.04.27 |
cdecl,stdcall,fastcall 함수 호출 규약 (0) | 2018.04.25 |
abex crack me2 리버싱 분석 (0) | 2018.04.23 |
[reversing] stack frame 예제 (0) | 2018.04.22 |