본문 바로가기

Code Engn - Basic 20 RCE 코드엔진 basic 마지막 문제. 위와같은 방식으로 출력되도록 하면 된다.먼저 PEiD로 확인해보니 어셈블리어로 코딩되어있는 듯하다. 실행해보면 그냥 아래와 같음 먼저 코드부터 확인해보니 CreateFileA()에서 반환값이 -1이다.Mode = OPEN_EXISTING 인데 "CRACKME3.KEY" 파일이 존재하지 않기 때문이다. 파일을 만들고 진행해보면.. 아래와 같은 코드들이 나오는데 이부분이 핵심이다. 먼저 file로부터 0x12(18)바이트 를 읽어오는데, 읽어온 데이터는 0x402008 에, 읽어온 데이터의 길이값은 0x4021A0에 저장한다.그리고 조건 분기문을 두번 통과하면 Cracked가 출력되는 함수로 이어지게 된다. 먼저 첫번째 조건문은 0x401066 을 보면 읽어온 길이값이 0x.. 더보기
Code Engn - Basic 19 RCE 실행시켜보면 위와같은 메세지창 하나만 뜨고 누르면 종료된다. UPX로 패킹되어있어서 일단 언패킹 후 디버깅을 시작해보면.. 제대로 동작하지 않고 경고창이 뜬다. API 목록을 보니 IsDebuggerPresent()를 이용하여 안티디버깅이 되어있었다. 일단 이부분을 패치하고 진행해보면.. 일단 문제에서는 밀리세컨드 단위로 종료되는 시간을 구하라고 하길래, sleep함수가 사용된 부분을 먼저 찾았다.찾다보니 아래와 같이 timeGetTime()함수가 호출되는 부분이 있었고 해당 함수를 찾아보니.. 윈도우 시작 시점으로부터 시간을 재는 용도의 함수였다. 일단 해당 함수가 호출되는 부분들을 모두 찾아봤는데, 문제에서 시간의 차이를 잰다는 점을 이용하여timeGetTime() - timeGetTime() 이런 .. 더보기
Code Engn - Basic 18 RCE PEiD로 확인해보니 [Nothing found *] 라고만 뜬다. 불안했는데 패킹은 되어있지 않았고실패 or 성공의 조건 분기점을 찾아 브포를 걸고 확인해보니 CodeEngn일때의 Serial 값이 바로보였다. 더보기