여기에서 다운로드 받으면 되는데 왜인지 들어가지지가 않는다
그래서 첨부파일을 따로 첨부한다. 사실 나도 다른 블로그에서 받은 것이기 때문에 뭐...가상머신에서만 틀길 바랍니다.
'파일을 틀자마자 확인되는 화면
아 진짜 티스토리는 글쓰기 너무너무 불편해 이씨
문제 1 - 프로그램을 실행 시 하드 디스크가 CD롬으로 인식되도록 변경하게 하기
****모든 글은 사진 밑에가 설명이다***
1. MessageBox() 함수 구조
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox
title은 메시지 창 캡션의 위치에 보여주고
text는 메시지 창 중앙에 보여줌
push 명령어로 스택에 숫자를 집어 넣음(4개 다)
메모리영역에서 hex 데이터는 00(NULL)이 나오기 전까지 연속적으로 읽으면 됨
노랑 : title
초록 : text
서브 루틴 : 전형적인 스택 프레임 구조로 되어 있음
0040100E -> F7(step into) : 서브루틴 안으로 들어감
00401013 : 서브루틴으로 들어갈 때 운영채재는 복구 주소를 스택에 백업해 놓음, 서브루틴을 호출하는 코드 바로 다음에 오는 명령어를 가리키는 주소를 복귀주소라고 함
............tlqkf,,,,,,,,,,,,, 서브루틴 2해 불가능 일단 넘김
구조 분석
처음 레지스터 값 확인
GetDriveTypeA() 함수 호출, 함수 반환값은 EAX에 저장됨 왜? 모름 일단 그런거라고 알고 있겠음 -> 아 F8로 실행하다보면 메시지박스 띄어지면서 EAX가 1로 됨, 이게 함수 반환값이 저장되는 것인가 봄
GetDriveTypeA()함수에 브레이크포인트 걸고 스텝오버 했을 때 레지스터 값 확인
INC - 뒤에 오는 레지스터 값을 1씩 증가
DEC - 뒤에 오는 레지스터 값을 1씩 감소
ESI 레지스터 1 감소, EAX 레지스터 1 증가
CMP - 뒤에 오는 두 레지스터에 저장된 값이 같으면 제로프래그 레지스터의 값을 1로 설정하는 명령어
JE - 앞에 수행한 비교 구문의 결과가 같으면 지정된 주소로 점프하고 다르면 다음 행을 실행
제로플래그 레지스터 - 비교 구문의 결과가 같으면 1
해당 구조를 봤을 때 ESI와 EAX의 크기를 비교하여 점프문을 쓴다. 다르기 때문에 다음 행으로 넘어가니까 코드르 바꿔 같게 하던가 제로 플래그 값을 변경해서 구문 점프문을 사용하면 된다.
프로그램 코드 변경을 통한 문제 해결
변경하고자 하는 부분에서 오른쪽 버튼 클릭 > Assemble 메뉴 클릭
넘어가고자 하는 코드 줄 입력> Assemble > 창 닫고 > 실행 위치가 변경하고자 하는 코드 위에 있어야 코드 변경 후 실행해서 동작 확인 가능
성공~
살펴보면
JMP문 때문에 INC 두 개를 건너뛰고 바로 EAX를 감소하러 왔다.
레지스터 값을 보면 같은 걸 확인 가능
JE 명령어는 두 값이 같을 때
제로플래그 값이 1로 되는 것을 확인하고 JE 명령어 뒤에 있는 값으로 이동하기 때문에 처음과 다른 결과를 확인 가능
점프문에서 제로 플래그 변경을 통한 문제 해결
점프문에서 제로플래그 클릭하여 1로 변경
그러면 오케이 화면 확인 가능
'정보보안 > 리버싱' 카테고리의 다른 글
리버싱) abexcm1.exe#2 - abex crackme 두번째 (0) | 2021.05.30 |
---|---|
리버싱) abexcm1.exe#2 - abex crackme (0) | 2021.05.13 |
리버싱) 올리디버거 사용법 (abex crackme #1) - 단축키, 올리디버거 필수 사전 지식 (0) | 2021.04.25 |
리버싱) 기초 정적 분석과 기초 동적 분석 (0) | 2021.04.12 |
리버싱) 리버싱의 기초_2 (0) | 2020.12.24 |
댓글