정보보안/리버싱 입문

리버싱 시작하기(1)

b1ackhand 2022. 2. 21. 16:09

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