abex' crackme #1
abex' crackme #1은?
- 크랙 연습 공개 프로그램 - Error 메시지 창에서 OK 창이 나오게 해야 됨
디버깅 - EP 확인하기
- 주석 창을 보면 세 개의 메시지 창이 뜨는 프로그램이란 걸 알 수 있음
- 장점: 시작 주소와 EP가 동일 (시작하자마자 시작 주소가 나옴)
- 매우 간단하고 명확하게 작성됨 (stub code가 없음)
- 교육용 목적이라 그럼
사용 함수 분석
- MessageBox: 메시지 창을 띄우는 함수
- 파라미터: Style → Title → Text → hOwner 총 4개
- 이 메시지 함수를 띄우기 위해선 위에 4개의 파라미터가 필요한 것
- GetDriveTypeA: 드라이브 타입을 가져오는 API 함수
- 디스크 드라이브가 이동식, 고정식, CD-ROM, RAM 디스크 또는 네트워크 드라이브인지 여부를 확인
- 파라미터: RootPathName
- 루트의 경로
- ExitProcess: 프로세스 종료 함수
- 프로세스는 실행돼서 메모리에 상주하고 있는 프로그램을 의미
- 즉, 현재 프로그램을 종료하는 함수
주요 어셈블리 명령어
- PUSH
- 스택의 값을 입력
- CALL
- 지정된 주소의 함수를 호출
- INC
- 값을 1 증가
- DEC
- 값을 1 감소
- JMP
- 지정된 주소로 점프
- CMP
- 주어진 두 개의 operand 비교
- SUB 명령어와 동일, 그러나 operand 값이 변경되지 않고 EFLAGS 레지스터만 변경
- 두 operand의 값이 동일 -> SUB 결과는 0, ZF는 1로 세팅
- JE
- 조건 분기(Jump if equal)
- ZF = 1이면 점프
cracking
- 크랙: 패치를 통해 코드의 프로그램 수정
- 실행(F8/F9_
- Copy to executable로 저장
- 해당 파일을 그냥 실행하면 JE 밑에 있는 401028 주소로 진행됨
- JE를 JMP로 수정하면 두 번째 메시지 창이 아닌 세 번째 메시지 창을 띄우도록 패치할 수 있음
- JMP로 수정 시 비교하지 않고 지정된 주소로 점프함
- 401028으로 가는 건 똑같으나 401028에서 F8을 클릭하면 40102A로 가지 않고 40103D로 이동
abex' crackme #3
abex' crackme #3은?
- 크랙 연습 공개 프로그램 - Error 메시지 창에서 OK 창이 나오게 해야 됨
- key file 관련 리버싱!
디버깅 - EP 확인하기, 사용 함수 분석
- 시작 주소와 EP가 동일
- MessageBoxA
- CreateFileA: 파일 또는 I/O 디바이스를 만들거나 읽는 함수
- 파라미터: FileName, Access, ShareMode, pSecurity, Mode, Attributes, hTemplateFile
- Mode = OPEN_EXISTING
- Access = GENERIC_READ
- FileName=“abex.l2c”
- 파라미터: FileName, Access, ShareMode, pSecurity, Mode, Attributes, hTemplateFile
- GetFileSize: 지정된 파일의 크기(바이트)를 검색
- 반환 값: 파일 사이즈
- 파일 사이즈가 1이라는 건? → 아스키 기준으로 글자가 하나다!
- 반환 값: 파일 사이즈
메시지 창을 중심으로 분석 및 패치
- 패치 전엔 key가 없기 때문에 1 → 2 → 3 순서대로 실행됨
- 그냥 쭉 실행하면 CreateFileA 함수 실행하고 리턴 값이 FFFFFFF로 설정됨
- CreatFileA 함수에서 FileName=“abex.l2c”라는 것을 보고 abex.l2c 파일이 필요하다는 것을 알 수 있음
- 그냥 간단하게 abex.12c 파일 생성 (내용 x, 같은 경로)
- 이제 파일은 찾았지만 유효하지 않다는 메시지 창까지 뜸
- 3번이 수행이 안 돼서 4번이 수행된 거임
- 이번에는 EAX에 FFFFFFF 가 아닌 다른 값이 들어감
- GetFileSize를 실행하면 EAX에 000000000가 저장됨
- 00401046에서 CMP 명령으로 EAX에 저장된 값과 12를 비교함
- JNZ 00401040
- not zero -> 00401060
- 앞서 생성한 abex.12c 파일 내용을 변경
- 문자열의 길이 18자리(0x12)가 되게 변경해야 됨
- GetFileSize 실행 시 EAX에 12 저장
- 끝까지 실행하면 keyfile을 찾았다는 메시지 창이 뜸
- 패치 완료
'Study > 악성코드' 카테고리의 다른 글
[윈도우즈 보안과 악성코드 기초] PE 파일 헤더와 섹션 (0) | 2024.04.06 |
---|---|
[윈도우즈 보안과 악성코드 기초] 기초 정적 분석 (0) | 2024.04.06 |
[윈도우즈 보안과 악성코드 기초] PE 파일 구조 (0) | 2024.03.30 |
[윈도우즈 보안과 악성코드 기초] 문자열 패치 실습 (0) | 2024.03.23 |
[윈도우즈 보안과 악성코드 기초] 리버싱 이론 (리틀 엔디안 표기법, Register 이해, assembly 언어) (0) | 2024.03.23 |