티스토리 뷰

리버싱

abex crackme 1

삼전동해커 2020. 11. 16. 01:22

여러번 리버싱을 공부하려 시도했지만 너무 어려워 모두 수포로 돌아가버렸다.

하지만 이제보니 리버싱을 할줄 모르면 컴퓨터 공부에 있어서 제약이 너무 많다. ios 공부도 해보고 싶은데 리버싱과 시스템 실력이 굉장히 필요로 하더라... 그래서 리버싱도 공부하기로 했다.


책도 샀다. 리버싱 입문.


여기서 추천하기를

1.lena 강의

2.abex crackme -> 코드엔진 문제인듯


공부하라고 하더라.


일단 olldybg를 설치해야 한다.


odbg201.zip


설치하고 


abex' crackme #1.exe


일단 파일을 실행해보면


이렇게 내 하드를 cd-rom으로 인식하게 하란다.



아니란다.


올리디버거로 열어보자.



이렇게 나온다.


이것저것 있는데 당장은 왼쪽 위에만 보면 된다.

저기가 어셈블리 코드를 볼 수 있는 뷰 영역이다.

올리디버거를 사용해서 알아보자.

먼저 F7로 gdb의 ni같은 역할을 할 수 있다. 하나씩 명령어를 실행하되, 함수 호출이 있으면 함수 내부로 이동한다.

F8로 gdb의 si같은 역할을 할 수 있다. 하나씩 명령어를 실행하고, 함수 호출을 만나면 호출한 함수를 실행한 상태가 된다.

처음부터 다시 진행하고 싶으면 ctrl+F2를 누르면 된다.


그래서 천천히 F8로 진행을 하다보면 jmp MessageboxA부분(0040100E)에서 처음 박스가 생성된다.



 그러고 계속 실행을 해보자. 다시 jmp messagebox(00401036)에서 cdrom이 아니라고 박스가 바뀐다. 




근데 메세지 박스 호출 밑에 왠지 정답인거 같은 내용들이 보인다.



여기를 잘 사용하면 될 것 같다.


일단 어셈블리어를 살펴보자.

push 0하고, push 00402000을 했다. 그 값은 abex 1st crackme라는게 들어있다. 이걸 스택에 쌓고, 다음 값인 make me think ~~~를 쌓는다. push 0하고 MessageBoxA함수를 호출한다. 

MessageBox라는 함수가 원래 존재한다.


int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

이런식으로 생겼고,


hWnd - 메세지 박스의 소유자가 들어간다.

lpText - 메세지 박스안에 출력할 문자열. 여기서는 make me ~~가 되겠다.

lpCaption - 타이틀 바에 들어갈 문자열. abex 1st crackme가 되겠다.

uType - 박스에 나타낼 아이콘이나 버튼의 종류를 결정. 여기선 별로 중요하지 않음.


위에서 인자로 준 0, abex~~,make me think~~~,0을 messagebox함수에 인자로 전달한 것이다. 스택이니까 거꾸로 인자를 전달한 것이다.


함수를 호출한 후, getdrivetype함수의 인자값을 push한 후, 함수를 호출한다.

그리고

INC ESI                     - ESI의 값을 1증가시킨다.

DEC EAX                   - EAX값을 1 감소시킨다.

JMP SHORT 00401021 - 다음 명령어로 점프한다.

INC ESI                    - ESI의 값을 1증가시킨다.

INC ESI                    - ESI의 값을 1증가시킨다.

DEC EAX                   - EAX값을 1 감소시킨다.


CMP EAX,ESI             - EAX의 값과 ESI의 값을 비교해서

je 0040103D              - 위의 결과 값이 같으면 0040103D로 이동. 다르면 그냥 진행.

여기 0040103D가 아까 본 정답일 것 같은 부분의 주소이다. 

여기까지 진행을 해야 정답문이 출력되는 것 같다.

그럼 EAX와 ESI의 값이 같아야 한다.

다시 실행해보면서 EAX 값과 ESI의 값을 살펴보자.


메세지박스 함수를 호출한 후 EAX의 값이 1로 바뀌었다.

그럼 쭉쭉 진행해보면



EAX는 1, ESI는 00401003이 설정되었다.


EAX의 값과 ESI의 값이 같아야 하니 ESI의 값을 1로 바꿔버리자.



이렇게 수정하고 진행해보면



진짜 0040103D로 넘어갔다.


그리고



메세지박스에도 하드가 cdrom으로 바뀌었다고 뜬다.


성공.





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

PIN API에 대해  (0) 2022.01.18
abex crackme 4  (0) 2021.02.18
abex crackme 3  (0) 2021.02.18
abex crackme 2  (0) 2021.02.18
reversing.kr ez_crack  (0) 2020.12.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함