바이너리를 실행해보면 패스워드값 입력 후 정답여부를 출력한다.

 

디버깅 해보면 패스워드값은 I have a pen.으로 쉽게 구할 수 있는데 그 다음부터 쭉 안티디버깅 코드들이 나온다. 하나씩 우회해주면된다.

 

패스워드 값 확인.

 

 

 

 

IsDebuggerPresent 실행 후 리턴값 0으로 변경하여 우회.

 

 

 

 

 

CALL 00401120을 통해 리턴된 PEB.NtGlobalFlag값을 0으로 변경하여 우회.

 

 

 

 

CheckRemoteDebuggerPresent 실행 후 리턴값 0으로 변경하여 우회.

 

 

 

 

GetickCount를 두번호출해서 타이밍 체크를 하고 있어 구해진 시간차값을 3E8보다 작게만들어서 우회.

 

 

 

 

 

특정파일을 생성한 뒤 결과를 가지고 검증하는데 이부분은 내환경에서 안티디버깅에 안걸려서 그냥 진행.

 

 

 

 

각 프로그램들이 실행되어있는지 확인. 각 문자열들을 모두 NULL처리해서 우회.

 

 

 

 

 

VMware 실행여부 판단할때 호출하는 함수 내에서 예외가 발생하도록 되어있어서 디버기 프로세스한테 예외처리하도록 넘기고 진행.

 

 

 

 

 

0으로 나누기를해서 강제 예외 발생시키고 있길래 디버기 프로세스한테 예외처리 넘기고 진행.

 

 

 

 

 

디버그 탐지 후 종료하는 로직안타도록 Flag값 수정을 통해 점프문 조작.

 

 

 

 

문자열 디코딩 후 메시지박스 호출하는 로직으로 들어가도록 점프문 조작.

 

 

 

Flag = SECCON{check_Ascii85}

 

 

블로그 이미지

JeonYoungSin

메모 기록용 공간

,