wargame/codeengn (4) 썸네일형 리스트형 [CodeEngn] basic level4 코드엔진 4번 문제를 보닌 안티디버깅 함수를 찾으라고 하네요. 그냥 실행시에는 초당 한번씩 "정상"이라는 문자를 출력하는 프로그램입니다. 올리디버거로 실행시 디버거를 탐지했다는 문자가 출력되게 되어있습니다. 올리디버거로 프로그램에서 사용된 함수들을 보도록 합시다. 올리디버거에서 프로그램 실행후 마우스 우클릭 후 그림에 보이는 버튼을 누르면 현재 모듈에서 사용하고 있는 함수들을 보여줍니다. 가장 기본적인 안티디버깅 함수인 IsDebuggerPresent(),IsDebugged() 함수가 있나 훑어보니 화면과 같이 IsDebuggerPresent()함수를 발견했습니다. 고전적인 안티디버깅 함수를 사용했기에 쉽게 찾을 수 있었네요 ㅎㅎ [CodeEngn] basic level3 코드엔진 베이직 3번 의문의 영문자가 나오고 패스코드를 인증하는 듯한 프로그램입니다. 독일어같네요… 올리디버거로 사용된 모든 문자열을 보니 thank, this password is right !를 독일어로 써둔듯한 문자열이 보입니다. 그 위에 문자열이 패스워드로 추정됩니다. 인증 성공! [CodeEngn] basic level2 코드엔진 2번 문제 설명을 보니 실행이 되지 않는 파일을 준다고 하네요 확실히 02.exe를 실행시켜보니 동작을 하지 않습니다. 올리디버거로 까봐도 마찬가지 입니다. 헥스에디터로 파일 시그니처를 보니 MZ로 실행파일이 맞습니다. 해결법을 알 수 없으므로 HxD로 탐색해보기로 합니다. 메세지 코드를 보니 이 부근이 실행결과 창인 것을 알 수 있습니다. 성공결과 밑에 의문의 문자열이 있습니다. 위치 상 패스코드일 가능성이 커보입니다. 코드엔진에서 답안제출을 해보니 인증이 되네요 키는 JK3FJZh 원래는 파일구조를 분석해서 실행되도록 고치는게 목적이 아닌가 싶습니다. 나중에 한번 다시 봐야겠네요. [CodeEngn]basic level 1 하드디스크를 CD-ROM으로 인식시키라고 합니다. 올리 디버거로 까보니 gedrivetypea의 반환값에 따라 cmp문으로 실행 결과가 달라집니다. 비교되는 esi의 값은 401003입니다. Eax는 cmp기준으로 401003이 되어야 하니 위에 dec가 2번 실행된걸 상정하여 반환값은 401005가 되어야 합니다! 참고로 00401~은 프로그램에서 지정해준 주소대역이기 때문에 답은 5입니다. MSDN에서 get드라이브타입의 리턴값들에 대한 설명을 봐도 5번이 cd롬의 반환값이 맞네요. 이전 1 다음