실행 시
또 메시지가 뜬다. Nags를 제거하기 위해 patch하라고 한다
또 또 또

 

OllyDBG를 실행한 결과

코드도 몇 줄 안되지만,, 실행하다보면 CMP EAX,0 가 뜬금없이 나온다.

EAX에는 실행 파일의 시그니처 값 MZ가 들어있다. 이는 DOS HEADER의 시작이며

이값은 절대 0일 수가 없다. (JE에서 점프가 불가능)

 

 

따라서 Entry Point를 401000에서 401024로 바꿔줘야 한다.

Memory Map에서 시작주소 400000번지의 PE Header 클릭
EntryPoint를 찾은 후 해당 값이 있는 주소(004000E8) 확인
덤프창에서 해당 주소로 가서 값 확인
00 10 00 00 을 24 10 00 00 으로 변경

원래 프로그램 시작점은 401000 이었지만, (Image Base 값 400000 + Entry Point 값 1000)

우리가 가고자 하는 401024로 가기 위해 4000E8의 값을 00에서 24로 변경해준다.

 

 

덤프창에서 먼저 Copy to executable file로 저장한 후, 실행하면 

요 아이가 또 뜬다

 

따라서 새롭게 저장한 파일을 OllyDBG에 다시 올려준 후 수정작업을 한다.

두번째로 뜨는 MessageBox를 삭제하기 위해서 NOP로 채워준다.

Copy to executable file - selection - save file
성공

'Study > Reversing' 카테고리의 다른 글

악성코드 주요 행위 분석  (0) 2021.11.10
고급 정적 분석 by IDA  (0) 2021.11.10
악성코드 분석  (0) 2021.11.03
Lena 2번 풀이/Rena's Reversing Tutorial 02  (0) 2021.10.27
윈도우 실행 파일과 패커  (0) 2021.10.06

 

라이선스 유효기간이 끝났다는 문자가 뜬다
CreateFileA

1번 문제와 같은 흐름인 것 같다.

CreateFileA는 파일이나 I/O 장치를 만들어내거나 여는 작업을 수행한다.

Keyfile.dat 파일을 원하고 있으니 

Keyfile.dat 파일을 별도로 만들어준다.

Keyfile.dat 추가 후 아무런 내용 적기

 

CreateFileA 함수 이후 CMP EAX,-1 명령어를  실행한다.

화면 하단을 보면 현재 EAX 값이 00000044이므로(다르므로) 둘을 비교 시 1이라는 결과가 나올 것이다.

따라서 ZF는 0(거짓)이 되고, JNZ 명령어를 실행하여 원하는 코드 위치(0040109A)로 간다.

 

그러면 ReadFile 함수가 실행되는 곳으로 넘어오게 된다.

 

ReadFile 함수 이후

XOR EBX, EBX 와 XOR ESI, ESI 명령어를 통해 EBX와 ESI 값을 각각 0으로 만들어준 뒤,

CMP DWORD PTR DS:[412173], 10 명령어로 402173에 있는 값0x10(16진수 10)을 비교하고 있다.

밑에 나와있듯이 DS:[00402173]값은 7이므로 

JL 명령어를 따라 004010F7 위치로 점프하게 된다. ( 그러면 또 프로세스 종료 )

 

따라서 00402173 위치의 값을 10보다 크게 해보자

00402173 값을 10보다 큰 11로 변경

 

그러자 JL 명령어 실행없이 바로 밑 MOV 명령어 부분으로 오게 된다.

MOV 명령어를 통해 EBX+40211A 위치의 값들을 한 바이트 씩 AL로 옮긴 후

CMP 명령어를 통해 0과 각각 비교한다.

 

 

MOV 명령어 이후 AL = 41('A') 이므로

CMP AL, 0 결과는 1 (CMP AL, 0 은 문서의 끝을 파악하기 위한 것임)

같지 않기 때문에 JE 명령어를 건너뛰고 

CMP AL, 47 명령어로 AL과 47('G')을 비교한다.

 

비교 결과 같지 않기 때문에

INC ESI를 건너뛰고

INC EBX로 바로 간다.

이것을 7번 반복하고 (Keyfile.dat에 입력된 길이만큼 반복)

CMP ESI, 8 명령어를 실행한다.

ESI는 1이기 때문에  JL 명령어를 따라 004010F7 위치로 점프하게 된다. ( 그러면 또 프로세스 종료 )

 

004010F7에 도달한 결과

따라서 반복문을 도는 동안(Keyfile.dat 파일에 있는 문자열을 모두 읽어오는 동안) 

전체 길이는 16바이트 이상이어야 하며, 대문자 G가 8개 이상이면 해당 문제를 풀 수 있을 것이다.

 

 

Keyfile.dat

 

성공

'Study > Reversing' 카테고리의 다른 글

Lena 3번 풀이/Rena's Reversing Tutorial 03  (0) 2021.11.03
악성코드 분석  (0) 2021.11.03
윈도우 실행 파일과 패커  (0) 2021.10.06
리버싱 기초 & reverseMe.exe 분석  (0) 2021.09.28
악성코드 유형  (0) 2021.09.18

+ Recent posts