본문 바로가기

[Riversing]/[코드엔진] BASIC

(20)
[코드엔진] basic20 코드엔진 사이트에 들어가 basic20 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) cramkme3.key 라는 파일안의 데이터가 무엇인지를 맞춰야 하는 문제이다. 프로그램이 내 컴퓨터 안의 cramkme3.key라는 파일을 찾아 읽고, 그 안의 내용과 프로그램의 key 값을 비교하는 문제인 듯 하다. 우선 실행을 시켜보면, 이게 끝이다. Exeinfo PE로 분석해보자. 패킹은 되어있지 않은것같으니 Ollydbg로 정확한 분석 ㄱㄱ -CreateFileA 함수 부분의 빨간 밑줄 부분을 보자. 0040101D PUSH 3 || Mode = OPEN_EXISTING 빨간 글씨를 보면 mode 는 open_existing 이고 push 3을 해준다. 이건 createfile 함수 원형의 ..
[코드엔진] basic19 코드엔진 사이트에 들어가 basic19 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) 간단명료한 문제이다. 몇 밀리세컨드 후에 종료되는가?! 우선 PEiD로 분석해보자. UPX 패킹이 되어있다. 우선 패킹을 해제해주자. 이제 프로그램을 실행해보자. 강석씨가 만들었다는 문구가 뜨고, 잠깐 냅두면 알아서 종료된다. 우리는 이 잠깐의 시간을 알아내야 한다. Ollydbg로 정확한 분석을 해보자. 좌클릭 -> Search For -> All intermodular calls 클릭 후 time 을 타이핑하면 아래와 같이 timeGetTime 함수가 나온다. # timeGetTime 함수란 -원형 DWORD __stdcall timeGetTime(void); -설명 윈도우가 시작되고 난 뒤 지난 ..
[코드엔진] basic18 코드엔진 사이트에 들어가 basic18 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) Serial 번호를 찾는 문제이다. 프로그램을 실행해보자. 위 그림과 같이 name 을 넣고 serial 번호를 임의로 넣었더니 역시 Bad 라며 에러가 뜬다. Ollydbg로 정확한 분석을 해보자. 많이 해봤으니 익숙하게 프로그램에서 사용된 text를 찾아 분기점으로 이동한다. 코드들을 살펴보니(004011EF) lstrcmpiA 함수로 String 2 와 String1 을 비교한 뒤 (004011F6) JE 명령어로 분기한다. 적절한 곳에 bp를 걸어놓고 프로그램을 실행해 보았다. 위 그림과 같이 String2 와 String1 = 5 (내가 입력한값) 을 비교하는 것으로 보아 String2에 들어..
[코드엔진] basic17 코드엔진 사이트에 들어가 basic17 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) 이번엔 이전 문제들과 다르게 key 값을 주고 name을 찾는 문제이다. 우선 프로그램을 실행시켜보자. 주어진 key 값과 임의의 name 을 A 로 설정해서 입력했더니 더 많은 문자를 입력해야 한다고 뜬다. 하지만 힌트에서 name 은 한자리라고 해주었으니 우선 이부분을 찾아 수정해보자. 찾았다. 빨갛게 bp 걸어놓은 두 부분이 글자수로 분기되는 곳이다. 0045BB24 => cmp eax, 3 => 입력글자가 3글자 이상 이어야한다. 0045BB5E => cmp eax, 1E => 입력글자가 30글자 이하 이어야 한다. 우리가 알고있는 name 은 1글자이기 때문에 그냥 0045BB24 의 명령어를..
[코드엔진] basic16 코드엔진 사이트에 들어가 basic16 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) 14, 15번과 비슷한 문제인 듯 하다. 프로그램을 실행시켜보자. 이름과 패스워드를 입력받는 간단한 콘솔프로그램이다. 이전 문제들과 다른 점이라면 패스워드를 입력받은 뒤 null 값을 생성한다는 것과, 패스워드가 틀리면 프로그램이 종료된다는 것이다. Exeinfo PE 로 분석 ㄱㄱ 패킹은 되어있지 않다. Dev-C++ 로 컴파일되어있다. 그렇다면 Ollydbg로 정확한 분석 ㄱㄱ 프로그램에 사용된 문자열을 찾아 분기점으로 이동해보자. 분기점으로 이동 ㄱㄱ 패스워드를 입력 받고 0040159F 주소에서 EAX와 어떤 값을 비교한 뒤, good job쪽으로 분기한다. 지금까지의 경험으로 보았을 때 eax..
[코드엔진] basic15 코드엔진 사이트에 들어가 basic15 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) 14번과 비슷하다. Name 이 주어졌고 Serial 번호를 구하면 된다. Exeinfo Pe ㄱㄱ 패킹이 되어있지는 않다. 실행시켜보면 위 사진처럼 이름과 번호를 입력하라고 뜬다. 임의로 5를 입력해봤지만 역시나 실패. Ollydbg로 분석 ㄱㄱ Alltext strings 를 이용해 위 사진의 Try Again! 분기점을 찾아보았다. 성공 분기점도 보인다. 이동해보자. 내가 입력한 5 를 EAX에 저장하고 EAX 를 6160(16) 과 비교한 뒤 분기한다. 14번 문제와 마찬가지로 6160의 10진수 값이 해답일 것 같다. 간단하게 성공!
[코드엔진] basic14 코드엔진 사이트에 들어가 basic14 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) Name 과 Serial 넘버를 입력하는 프로그램 일 것 같다. Name은 CodeEngn으로 주어졌고 Serial 넘버만 구하면 된다. 일단 Exeinfo Pe로 분석 ㄱㄱ UPX 패킹이 되어있다. 이전 문제들에서 많이 다뤄봤으므로 바로 언패킹을 해준다. 프로그램을 실행해보자. 예상했던 것 처럼 name 과 serial 번호를 요구한다. 일단 임의로 아무 숫자나 넣어봤더니 역시나 오류가 뜬다. Ollydbg 로 정확한 분석 ㄱㄱ F8로 진행을 하다가 name 과 serial 번호를 위에서 한 것처럼 CodeEngn, 1234 를 입력했다. 내가 입력한 1234 는 EAX에 저장이 되었고, EAX 와 ..
[코드엔진] basic13 코드엔진 사이트에 들어가 basic13 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn) 다짜고짜 정답이 뭐냔다. 우선 Exeinfo PE 를 사용해 분석해본다. 여기서 알 수 있는것은 이 프로그램은 .NET(닷넷)기반으로 짜여진 프로그램이다. => Ollydbg 사용 X 프로그램을 실행시켜보자. 위 사진과 같이 cmd창이 열리며 패스워드를 입력하라는 창이 계속해서 뜨고, 잘못된 패스워드를 입력하면 다시 시도하라는 에러가 뜬다. 디버거로 정확한 분석을 해야하는데 위에서 말했듯이 올리로는 분석이 어렵다. 그래서 JetBrains dotPeek 이라는 프로그램(닷넷 디버거)으로 분석 ㄱㄱ (https://www.jetbrains.com/ko-kr/decompiler/download/downlo..