본문 바로가기

[Riversing]/[코드엔진] BASIC

[코드엔진] basic4

코드엔진 사이트에 들어가 basic4 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn)

이번 프로그램은 안티디버깅을 내재하고 있는 프로그램인가보다.

패킹은 되어있지 않았고, 프로그램을 실행하면

정상 정상 정상 이라고 뜨다가 ollydbg 를 이용하여 실행하면 디버깅 당함 디버깅 당함 거린다.

내가 디버깅을 하고있다는걸 걸린것이다.

 

코드를 분석해보자.

f8 을 이용하여 진행하다 보면

위의 사진처럼 

 

DWORD PTR FS:[30]

BYTE PTR DS:[EAX+2]

 

라는 코드가 나오는데, DWORD PTR FS:[30] 의 경우 PEB 구조체를 호출하는 코드이다.

(PEB구조체에 대해서는 나중에 따로 글을 쓰도록 하겠다.)

BYTE PTR DS:[EAX+2] 는 PEB 구조체의 멤버 IsDebuggerPresent 를 호출하는 코드이다.

 

따라서 위의 두줄로 우리는 IsDebuggerPresent 코드로 왔다.

이 함수같은 경우에는 디버깅을 하는 중이면 0이 아닌 수를, 아니라면 0을 반환하는 함수이다.

 

이 함수를 진행해보면 

EAX의 값이 1 (0이 아닌 수)로 반환되는데 이는 디버깅 중임을 의미한다.

따라서 우리는 이 값을 0으로 바꿔주면 된다.

 

위 사진처럼 EAX 값을 0으로 바꾸고, 실행파일을 저장하면 된다.

 

이같은 방식으로 패치한 04_patch 파일을 실행시켜 보면

아래와 같이 정상으로 뜨게 된다.

 

 

 

코드엔진이 원했던 답은

디버깅중인지 아닌지를 판단하는 함수 IsDebuggerPresent 이고 이를 코드엔진에 입력하면,

 

 

성공!

'[Riversing] > [코드엔진] BASIC' 카테고리의 다른 글

[코드엔진] basic6  (0) 2020.03.25
[코드엔진] basic5  (0) 2020.03.25
[코드엔진] basic3  (0) 2020.03.24
[코드엔진] basic2  (0) 2020.03.16
[코드엔진] Basic1  (0) 2020.03.13