
abex' crackme 1번 예제를 공부해본다.

하드디스크를 CDRom처럼 생각하게 하라는것이다.

PEView로 봤을때 다음과 같다.
EP(Entry Point) : 운영체제가 최초로 제어를 프로그램으로 넘기는 지점
PE구조는 상대주소로 지정 : Base Address + RVA
따라서 시작점은 Image Base 400000 + Address of Entry Point 1000

Ollydbg로 열어봤을때 401000에서 시작한다.
<사용법>
F8 스텝오버 : 한줄씩 실행
F7 스텝인투 : 실행하되 실행명령어 주소에 있는 서브루틴으로 들어감
F2 브레이크포인트 : 중단점
F9 프로그램 실행 : 실행
ctrl + F2 프로그램 재실행
NumLock + : 전진
NumLock - : 후진
IAT 테이블의 API를 부를 때 : JMP DWORD PRT DS:[함수주소] 이와 같은 방식
IAT(Import Address Table) 외부 DLL 제공 함수 주소

다음줄에서 메세지가 나온다.

구글에 검색해보면 USER32.dll 의 MessageBox() 함수에 대해서 볼 수 있다.
PUSH OFFSET 402000 - Caption
PUSH OFFSET 402012 - Text
이들을 인자로 스택에 넣고있다.

메모리에 현재 저장되고 있는 것을 볼 수 있다.
GetDriveType() : 드라이브 종류를 반환하는 함수
CMP를 이용해서 EAX, ESI를 비교해서 JE로 분기
해결법 :
- 프로그램 코드 변경
- 플래그 값 변경

JMP하는 부분을 분기점에서 성공했을때로 보냈다.

다음과 같이 HD를 CDROM으로 이해하고 있다.

다음 분기점에서 ZeroFlag를 1로 바꿔주는것 역시도 가능한 방법이다.
'정보보안 > 리버싱 입문' 카테고리의 다른 글
리버싱의 어려운 문제들 (0) | 2022.03.04 |
---|---|
리버싱, 좀 더 깊숙이 (0) | 2022.03.01 |
리버싱에 익숙해지기 (0) | 2022.02.25 |
리버싱시작하기(2) (0) | 2022.02.22 |
리버싱을 위한 기초 지식 (0) | 2022.02.15 |