CodeEngn Challenges : Basic 04 문제 풀이
반응형

안녕하세요


테라트입니다


4번 풀이하겠습니다


URL : https://codeengn.com/challenges/basic/04




가장 먼저 프로그램을 실행시켜보겠습니다


아마도 문제를 가지고 추측해봤을 때, 디버깅 프로그램으로 이 프로그램을 분석하는지 탐지 하는 함수가 어떤 것인지를 찾으라는 의미 같습니다



프로그램 실행 시 계속 정상, 정상, 정상이라고 표시되네요



올리디버거로 열어보니, 프로그램이 실행되면서 디버깅이 시작됩니다


어떤 행위를 하는지 천천히 살펴보겠습니다



올리디버거 기능 중 Animate over (Ctrl + F8)를 사용하여서 어디서 걸리는지 확인해보겠습니다


* Animate Over : 자동으로 멈춰지는 곳까지 함수를 내부까지 들어가지 않고 진행하도록 하는 기능



CALL하는 부분으로 들어가보기 위해서 그 위에 Break Point를 설정하고

재시작 (Ctrl + F2) 후에 F9 (Break Point 설정한 곳까지 실행)을 해보겠습니다



이곳에는 디버깅 당함이라는 문자가 저장되어 있습니다



Sleep 함수를 MSDN에서 찾아보겠습니다



모르시는 API(함수)들을 보게 되면


이렇게 찾아보시면 됩니다!ㅎㅎ

(Microsoft Docs 또는 MSDN 문서를 참조하시면 됩니다)


Sleep 함수는 타임아웃을 걸고 스레드를 일시 중지 시키는 함수라고 하네요


그러면 저기 표시된 숫자가 일시 정지 시키는 시간이라는 것을 알 수 있습니다



이곳에는 정상이라는 단어가 저장되어 있습니다


저희가 확인했던 글자들이네요 



계속 진행해보니, 디버깅 당함이라고 표시됨을 확인 할 수 있습니다


정답은 이미 눈치 채셨죠?



바로 지금 찍혀 있는 저기 JE문을 통해서


디버깅 상태 여부를 판단하게 됩니다


물론 자세한 비교는 IsDebuggerPresent 함수를 호출하는 부분에 내부로 들어가보아야겠지만


이번 문제는 이렇게 진행하도록 하겠습니다



JE문이 Zero Flag가 1 일때, 점프를 수행합니다


그래서 Zero Flag 값을 임의로 수정하여 0으로 바꾸어 줬더니 정상으로 표시 됨을 확인 할 수 있었습니다


정답을 입력하고 다음 문제로 넘어가보도록 하겠습니다




다음 시간에는 5번문제를 이어서 풀도록 하겠습니다!



반응형

댓글,

테라트

Since 2018.07.03 / IT 관련 정보, 일상의 공유를 위한 블로그