본문 바로가기

[CodeEngn Challenges] Basic RCE 19 UPX로 패킹되어있으므로, 우선 언패킹한다. 일단 실행해본다. 아래의 화면이 뜬 후, 확인을 누르면 사라진다. Ollydbg로 실행했는데, 전혀 다른 메시지가 출력된다. 디버거를 탐지하는 IsDebuggerPresent 함수를 쓰는 듯 하다. 예상이 맞았다. 모두 breakpoint 건 후, 반환값을 모두 0으로 바꾸겠다. 또 아래로 내려보면, Killtimer, SetTimer, timeGetTime 함수를 순서대로 볼 수 있다. 함수명으로 시간 관련 함수임을 알 수 있으므로 일단 breakpoint를 건다. 이 IsDebuggerPresent가 포함된 40E940 함수의 마지막에 breakpoint를 걸고 반환값을 0으로 바꾼 뒤 진행해보자. (이후에는 거슬려서 NOP과 XOR EAX, EAX을 이용.. 더보기
[CodeEngn Challenges] Basic RCE 18 첫 시도로, Serial에 아무거나 쳐 보았다. 실패 메시지가 뜬다는 것으로, 성공하면 성공 메시지를 띄울 것이라는 가정을 세웠다. 가정이 들어맞았다. 사각형을 친 부분이 성공 메시지를 이루는 문자열이다. 이곳으로 이동하자마자, 분기문 JZ에 breakpoint를 걸고 실행해보았다. lstrcmpi는 Windows API에 있는 문자열 비교 함수이다. String1은 입력한 값, String2는 실제 “CodeEngn”이라는 문자열로 생성된 문자열이다. 이 둘을 비교해 같으면 성공 메시지를 띄울 테니 String2가 답인 셈이다. 인증 결과 성공 메시지를 출력한다. 더보기