본문 바로가기

리버스엔지니어링

코드게이트 2013 바이너리 100분석 코드게이트 바이너리 100점짜리 문제의 모습입니다. 100점짜리 싸구려 도어락이며 참가한 500명 정도의 사람들 중에 250명정도의 사람들에게 뚫린 비운의 도어락입니다. *을 누르면 INPUT PASSWORD라고 뜨고 아무 숫자나 입력해서 *를 누르면 코드가 아니라고 뜹니다. 이제 이 문제는 지금까지 풀던 방법과는 다르게 풀건데요 바로 올리디버거로 파일을 분석하지 않고 PEID로 먼저 분석을 하겠습니다. 위의 그림처럼 분석을 하게 되는데요, 디버거로 먼저 분석을 하지 않는이유는 저번 코드엔진 L05때도 그랬듯이 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 L02 문제 풀이 저번 문제였던 L01을 끝내고 이번에는 L02로 넘어가겠습니다. 다음 문제를 푸는 방법은 Continue 부분에 저번 문제의 답을 쓰시면 자동으로 L02의 문제가 나옵니다. 이렇게 L02의 문제가 있는데요 문제를 보니까 실행파일이 손상되어서 실행이 안된다고 합니다. 실제로 눌러서 실행을 시키면 이런 메시지창이 뜨면서 프로그램이 꺼지는데요, 정확히 분석을 할 수는 없어도 16진법으로 된 코드가 나오고, 문제에도 실행파일이 손상되었다고 하는것으로 봐서 OP코드의 f0 00 f0 37 05 부분에 이상이 생겨서 프로그램을 실행시킬수 없다 정도로 생각하시면 될 것 같습니다. 그럼 이것을 올리디버거로 열어볼텐데요 올리디버거로도 에러창이 뜨면서 실행이 안되는 것을 보실수 있습니다. 이 문제는요 리버싱툴중에 하나인 .. 더보기
리버싱 관련 분석 자료 제가 현재 리버스코드엔지니어링 포스팅의 분석자료로 사용하는 프로그램들은 모두 리버스엔지니어링으로 유명한 코드엔진블로그에 올라와 있는 Basic RCE의 자료들입니다. 코드엔진 블로그 주소 : http://codeengn.com/ 코드엔진에 들어가서 Challenge 부분에서 Basic RCE에서 1단계 문제를 보고 Start의 Continue 부분에 문제의 답을 쓰면 다음 문제가 나오는 형식입니다. 원래는 리버싱 포스팅에 DLL인젝션에 대한 부분을 쓰고싶었으나 아직 공부가 덜 된 관계로 .... 고2 여름방학때 쯤부터 Basic RCE를 모두 끝내고 DLL인젝션을 쓸 수 있을 것 같네요. 그럼 모두 리버싱을 잘 하시길 바라겠습니다!! 더보기
CodeEngn Basic RCE L01 문제 풀이 일단 프로그램을 무작정 뜯어보기 전에 프로그램에 대한 설명을 보겠습니다. Korea : 로 써있는 부분에 "HDD(하드디스크)를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가" 라고 써있는데요. 이 GetDriveTypeA라는 함수가 어떤 함수인지 알아보겠습니다. -출처 MSDN 이 함수의 리턴 값에 대한 것인데요 이 프로그램이 실행된 드라이브를 리턴값으로 하는데요 그 값들로는 각각 드라이브를 찾을수 없음(0), 최상위경로가 없음(1), 이동식디스크(2), 고정디스크(3), 네트워크드라이브(4), cd롬(5),램디스크(6) 으로 되있는 데요, 우리가 찾는 HDD와 CD롬은 각각 3과 5에 있습니다. 그냥 문제만 풀거라면 CD롬을 가리키는 □번을 정답으로 쓰면.. 더보기