코드엔진 사이트에 들어가 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 |