문제

 

이 프로그램은 디버거 프로그램을 탐지하는 기능을 가지고 있다. 디버거를 탐지하려는 함수의 이름은 무엇인가

 

풀이

 

<그림 1> 정상 -> 디버깅

일반 실행 시 [정상]으로 뜨던 메시지가 x32 를 통해 실행하였을 땐 디버거를 탐지하여 [디버깅 당함] 이라는 메시지를 출력하였다.

 

<그림 2> 메시지 출력

 

<그림 2>가 반복되면서 IsDebuggerPresent 를 분기점으로 <그림 3> 과 같이 EAX 값이 0 -> 1로 변하며 [디버깅 당함] 이라는 메시지가 출력됨을 볼 수 있다.

 

<그림 3> EAX 변화

즉, IsDebuggerPresent 라는 디버깅 탐지 함수는 디버깅을 당하면 0을 리턴한다는 것을 알 수 있다. 이제 [정상]이라는 메시지를 출력하기 위해 EAX 값을 0으로 바꿔 실행하면 <그림 5>과 같이 원하는 메시지가 출력됨을 볼 수 있다.

 

<그림 4> EAX 편집

 

<그림 5> Crack

 

Flag

IsDebuggerPresent

'챌린지 > CodeEngn' 카테고리의 다른 글

[CodeEngn] CodeEngn Basic 3  (0) 2019.02.10
[CodeEngn] CodeEngn Basic 2  (0) 2019.02.10
[CodeEngn] CodeEngn Basic 1  (0) 2019.02.10

문제


비주얼베이직에서 스트링 비교함수 이름은?


풀이


<그림 1> 실행화면


파일을 실행해 보면 코드를 입력하는 메시지 창이 출력된다. 이 입력 코드를 알아보기 위해 <그림 2>와 같이 x32로 열어 문자열을 참조하였다.


<그림 2> x32 실행


<그림 3> 문자열 참조


문자열 참조를 보면 “2G83G35Hs2”라는 문자열을 볼 수 있다. 이를 클릭하여 들어가 보면 <그림 4>과 같이 문자열 밑에 VbaStrCmp (Visualbasic String Compare) , 문자열 비교 함수를 찾을 수 있다.


<그림 4> VbaStrCmp


확인을 위해 문자열 비교함수에 F2를 눌러 중단점을 잡고 재시작 후 실행하여 <그림 5>과 같이 패스워드를 입력하였다. 그 결과, 00402A27에 입력값이 저장되고 00402A2A에 패스워드 문자열을 비교하여 같지 않으면 Error 메시지에 접근하는 것을 볼 수 있다.


<그림 5> Error Message


<그림 19> Success Message


Flag


VbaStrCmp

'챌린지 > CodeEngn' 카테고리의 다른 글

[CodeEngn] CodeEngn Basic 4  (0) 2019.07.09
[CodeEngn] CodeEngn Basic 2  (0) 2019.02.10
[CodeEngn] CodeEngn Basic 1  (0) 2019.02.10

문제


패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오.


풀이


<그림 1>


우선, 파일을 실행시켜 보면 커서만 깜빡이고 아무동작을 하지 않는 것을 볼 수 있다. 이를 x32로 열어보면 <그림 2>과 같이 잘못된 PE파일이라는 메시지를 보여준다.


<그림 2>


파일 내부를 보기 위해 HxD로 열어 파일 내부를 확인해 보니 다른 섹션들은 데이터가 없지만 data 섹션은 존재하는 것을 볼 수 있다. 보통 전역변수나 정적변수들은 data섹션에 저장되기에 쭉 살펴보면 <그림 3>에서 보듯 패스워드로 추정되는 문자열을 볼 수 있었다.


<그림 3>

Flag

JK3FJZh




'챌린지 > CodeEngn' 카테고리의 다른 글

[CodeEngn] CodeEngn Basic 4  (0) 2019.07.09
[CodeEngn] CodeEngn Basic 3  (0) 2019.02.10
[CodeEngn] CodeEngn Basic 1  (0) 2019.02.10

문제


HDDCD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가


풀이


<그림 1> MessageBox


우선, 파일을 실행시키면 <그림 1>과 같이 메시지 창이 뜬다.


<그림 2> Error


확인버튼을 클릭하면 <그림 2>와 같이 에러 메시지 창이 든다. 이제 x32로 열어 파일 안의 내용을 살펴보자.


<그림 3> x32


EAXESI를 비교하여 같지 않으면 <그림 2>와 같은 메시지가 출력됨을 볼 수 있다. 만약 두 값이 같으면 <그림 3>에서 표시 되었듯 “OK, I really think that your HD is a CD-ROM! :p” 가 출력될 것이다.


<그림 4> Before


<그림 5> After


<그림 6>과 같은 메시지 박스를 출력하기 위하여 위의 <그림 4,5>에서 보다시피 같아야 넘어가는 조건문을 달라도 넘어갈 수 있도록 바꾸었다. 그 후 F8을 눌러 한줄 씩 실행해 보니 <그림 6>과 같은 메시지 박스가 출력되었다.


<그림 6> Success

하지만, 이를 출력해도 CodeEngnBasic1 의 문제 GetDriveTypeA의 리턴값을 구하는 것이 아니므로 다시 구조를 살펴보기로 하자.


<그림 7> GetDriveTypeA


코드를 한 줄씩 실행해 보면 <그림 8>과 같이 EAX3 -> 1, ESI0 -> 3임을 볼 수 있다.


<그림 8> Before Register


이를 참고하여 EAXESI의 값이 같기 위해선 EAX값을 5로 주면 2번의 감소가 되어 ESI의 값과 동일해 진다는 것을 알 수 있다.

 

<그림 9> After Register


, GetDriveTypeA의 리턴값은 5가 되어야 함을 알 수 있다

GetDriveTypeA 함수란?


Return code/value

Description

DRIVE_UNKNOWN 0

The drive type cannot be determined.

DRIVE_NO_ROOT_DIR 1

The root path is invalid; for example, there is no volume mounted at the specified path.

DRIVE_REMOVABLE 2

The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader.

DRIVE_FIXED 3

The drive has fixed media; for example, a hard disk drive or flash drive.

DRIVE_REMOTE 4

The drive is a remote (network) drive.

DRIVE_CDROM 5

The drive is a CD-ROM drive.


Flag


5



'챌린지 > CodeEngn' 카테고리의 다른 글

[CodeEngn] CodeEngn Basic 4  (0) 2019.07.09
[CodeEngn] CodeEngn Basic 3  (0) 2019.02.10
[CodeEngn] CodeEngn Basic 2  (0) 2019.02.10

+ Recent posts