본문 바로가기

코드엔진

CodeEngn Advanced RCE L10 분석 후 드디어 코드엔진 Advance문제의 반을 풀었습니다. L07같은 경우는 어려워서 일단 남겨뒀네요.그래서 반 푼 기념으로 L10문제 분석을 하겠습니다. 문제는 지금까지와 별 다를바 없이 name과 serial을 입력하는 프로그램입니다. name에 따른 serial을 만드는 알고리즘을 파악해야 겠네요. 먼저 프로그램을 실행시키면 다음과 같이 틀리면 wrong serial을 표시하면서 꺼지게 됩니다.그럼 이제 직접 올리디버거를 통해 소스를 분석해보겠습니다. 먼저 name과 serial을 입력받는 부분입니다. 각각 CALL부분에 주석으로 달아놓은 말은 CALL로 부르는 함수가 strlen이라는 뜻입니다. strlen함수 밑에 있는 cmp구문과 함께라면 길이가 몇일때 해당되는지 알수 있겠죠.첫번째 strlen.. 더보기
CodeEngn Advanced RCE L03 분석 먼저 L03 문제를 살펴보겠습니다. 프로그램 자체는 굉장히 단순한 키젠미 파일로Name과 Serial을 입력한 후 Check를 눌렀을때 Serial이 맞으면 성공한다는 메시지가 뜨게 되고 Serial이 맞지 않으면 실패했다는 메시지가 뜨게 되는 프로그램입니다. 문제에서 원하는대로 Name이 CodeEngn일때 Serial을 구하면 되겠네요. 그래서 평소 크랙미파일을 풀때처럼 back to user mode를 통해서 에러메시지창을 잡아내시던가 혹은 오른쪽클릭-Search for-All referenced text strings를 통해서 You failed란 문자열을 출력하는 코드로 넘어오시면 됩니다.이때 맨 위부터 파란색박스를 보면 00401113 PUSH 03.0040323800401118 PUSH 3E.. 더보기
CodeEngn Basic RCE 끝! 수능끝나서 다시한번 달려봤습니다. ※추가Advance L01은 Basic L19랑 MD5해쉬값을 받아야된다는것 하나 빼고는 모두 동일해서 풀이를 올리는것을 생략하고 L02부터 올리겠습니다. 더보기
CodeEngn Basic RCE L06 문제 풀이 원래는 이번에 패킹에 대해서 포스팅하기로 했으나 L06을 보니까 또다시 패킹이 되있는 프로그램이라 한번에 쓸려고 바로 L06분석으로 들어갑니다. L06의 문제를 보시고 프로그램을 다운받고 실행시키시면 이런 창이 뜹니다. 시리얼 넘버를 입력해서 실패하면 Wrong serial!!!이라고 뜨고 성공하면 왠지 You got it ; 이라고 뜰 것 같군요. 아 참고로 코드엔진 분석할 때 분명이 PEiD부터 쓰라고 했는데 저는 분석글을 쓰는것이고, 아직은 간단한 크랙미풀이라서 악성코드처럼 실행하면 안되는 프로그램은 아니기 때문에 프로그램을 실행시켰습니다. 그리고 실제로 악성코드도 VMware나 Virtual PC등을 이용해서 실행해 동작을 분석합니다. PEiD에 넣어서 분석해보면 문제에서 나와있듯이 패킹이 되있는.. 더보기
CodeEngn Basic RCE L05 문제 풀이 코드게이트 예선전 문제 풀이는 제가 푼데 까지의 방법하고, 본선에 올라가신분들의 풀이법과 함께 풀이를 할것이기 때문에 오늘 9시에 끝났으므로 최대 일주일전에는 풀이법 공개를 해야되므로 그때 문제 풀이를 하겠습니다. 그럼 Reverse L05 시작하겠습니다. 프로그램을 켜보면 맨 위의 그림이 나오고, 아무 키나 누른다음에 Register now! 버튼을 누르면 밑의 에러창이 뜹니다. 그럼 지금까지의 경험을 통해 Wrong Serial,try again문자열을 올리디버거를 이용해서 찾은다음에, 그 주변에 패스워드와 성공시 문자열을 찾으면 되겠죠?? 어머 근데 이게 뭔일일까요?? 이상한 BindCtx라는 문자열빼고는 어떠한 문자열도 보이지 않습니다. 네 이번 문제는 바로 패킹에 대한 지식을 알려주기 위한 문제.. 더보기
CodeEngn Basic RCE L04 문제 풀이 코드엔진 RCE L04 시작하겠습니다. 문제를 보시면 오늘 분석할 프로그램은 디버거 프로그램을 탐지한다고 합니다. 그럼 이 디버거를 탐지하는 함수가 무엇일까요?? 이 함수는 안티디버깅중에 한 방법으로써 리버싱을 계속 하면 잘 알고계셔야 하는 함수입니다. 코드엔진은 그것을 알고서 이번 문제는 안티디버깅 기술에 대한 리버싱실력을 키워주기 위해서 이 문제를 낸 것 같네요. 출처 - MSDN 디버거 프로그램을 탐지하는 함수의 이름은 맨 위에 있는 IsDebuggerPresent 라고 합니다. 뜻을 쭉 해석해보시면 api상태에서 IsDebuggerPresent(void)를 쓰면 프로그램 중간에 디버거를 탐지할수 있다고 합니다. 또한 리턴값으로는 디버거가 작동중이면 0이 아닌값(컴파일러마다 달라요), 디버거가 작동.. 더보기
CodeEngn Basic RCE L03 문제 풀이 코드엔진 Basic RCE L03 시작하겠습니다. 문제를 보면 비주얼베이직에서 스트링 비교함수의 이름을 물어보고 있습니다. 저는 비주얼베이직을 못하므로 다른 사람들의 블로그에서 스트링 비교함수의 이름을 찾아봤습니다. 바로 함수명 ㅁ 라고 합니다. 그럼 문제 끝!!!!.. 입니다만 언제나 말하듯이 문제 푸는것이 다가 아니라 리버싱 실력을 늘리기 위해서 프로그램을 분석해 보겠습니다. 프로그램을 실행해보면 이 두 창이 차례대로 나오는데요 맨 처음메시지의 이름이 Nag라고 되있는 걸로 봐서는 Nag(귀찮게하는)메시지입니다. 두번째 메시지창에는 입력창이 뜨는데요 그냥 아무것이나 집어넣으면 라면서 패스워드가 틀렸다고 합니다. 문제에서 나오는 비주얼베이직에서 스트링비교함수를 물어보는 이유가 바로 여기서 내가 입력한 .. 더보기
CodeEngn Basic RCE L01 문제 풀이 일단 프로그램을 무작정 뜯어보기 전에 프로그램에 대한 설명을 보겠습니다. Korea : 로 써있는 부분에 "HDD(하드디스크)를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가" 라고 써있는데요. 이 GetDriveTypeA라는 함수가 어떤 함수인지 알아보겠습니다. -출처 MSDN 이 함수의 리턴 값에 대한 것인데요 이 프로그램이 실행된 드라이브를 리턴값으로 하는데요 그 값들로는 각각 드라이브를 찾을수 없음(0), 최상위경로가 없음(1), 이동식디스크(2), 고정디스크(3), 네트워크드라이브(4), cd롬(5),램디스크(6) 으로 되있는 데요, 우리가 찾는 HDD와 CD롬은 각각 3과 5에 있습니다. 그냥 문제만 풀거라면 CD롬을 가리키는 □번을 정답으로 쓰면.. 더보기