본문 바로가기

전체 글

Reversing With Lena Tutorial 17 Lena의 리버싱 튜토리얼 17번째다. 다른 크랙미에서도 많이 볼 수 있는 KeygenMe 형태의 문제로 입력한 이름에 기반하여 시리얼을 생성하며 해당 시리얼이 무엇인지 추측하는 문제다. 먼저 프로그램을 실행시켜보면 다음과 같다. 간단하게 폼 두개와 버튼 두개로 이루어져 있다. About 버튼을 눌러보면 간단한 프로그램 안내 메시지가 뜨고 Check 버튼을 누르면 다음과 같은 메시지 박스가 나타난다. 아무래도 필드가 비어있으면 오류 메시지가 나타나는 것 같다. 위아래 필드에 아무 값이나 채우고 다시 한번 클릭해보니 다음과 같은 메시지 박스가 나타났다. 디버거를 하드 드라이브에서 지우라고 하고 있지만 그냥 하는 말이고 이것은 입력한 이름과 시리얼이 일치하지 않았을 때 나타나는 오류 메시지 박스일 것이다. .. 더보기
Challenge - Easy Keygen Reversing.kr의 두 번째 문제인 Easy Keygen이다. 첫 번째 문제가 6천 명이 풀었던 것에 비하면 좀 줄어들긴 했지만 그래도 Easy라는 이름답게 4천명이나 풀은 문제다. 이번 문제는 설명 파일도 따로 포함되어 있는데 다음과 같다. 즉 시리얼이 5B134977135E7D13인 이름을 찾는 것이 이 문제의 목적이 될 것이다. 우선 키젠 프로그램을 실행시켜서 어떻게 동작하는지 확인해보자. 이번 프로그램은 콘솔 프로그램이기 때문에 명령 프롬프트에서 실행해서 프로그램 종료 후 곧바로 창이 꺼지는 것을 방지했다. 어쨌든 실행시키면 먼저 사용자 입력으로 이름(Name)을 받는다. 일단 아무 문자열이나 입력해보자. 이번에는 시리얼을 입력받고 있다. 아직 이 이름에 어떤 시리얼이 해당되는지 알 수 없기.. 더보기
Challenge - Easy Crack Reversing.kr(립케알)에 있는 간단한 크랙미를 풀어보기로 했다. 6000명이 푼 간단한 문제로 아마 Abex 크랙미 정도의 난이도에 해당하지 않을까 싶다. 우선 프로그램을 실행시켜보면 다음과 같이 시리얼을 입력하는 창이 나타난다. 확인 버튼은 항상 활성화되어있으며 시리얼 키를 입력하는 필드에는 별다른 이벤트가 존재하지 않는 것 같다. 아무런 값을 입력하지 않아도 혹은 틀린 시리얼을 입력해도 동일하게 다음과 같은 메시지 박스를 호출하고 있다. 그렇다면 해당 문자열을 기반으로 먼저 찾아보자. 일단 디버거로 파일을 열어보면 다음과 같이 0x00401188에서 진입점을 확인할 수 있다. 초반 부분부터 여러가지 함수를 호출하고 있는데 F8 등 Step Over로 하나하나 실행시키다 보면 머지않은 곳에서 .. 더보기
Reversing With Lena Tutorial 15 - Call Stack, Code Caving 리버싱 튜토리얼 중에서도 유명한 레나(Lena)의 튜토리얼 15번째다. 첫번째부터 진행하지 않고 중간중간 하는 이유는 지금 읽고 있는 책을 따라서 실습해보는 중이기 때문이다. 추후 첫번째 튜토리얼부터 따라해볼 예정이다. Abex의 크랙미때와는 달리 특별한 설명 파일은 없고 애초에 HTML과 플래시 파일로 튜토리얼이 제공되기 때문에 직접 따라하면서 공부할 수 있다. 여기서는 해당 도서를 따라하면서 했기 때문에 튜토리얼 내용과 차이가 좀 있을 수 있다. 먼저 이번 리버스미(ReverseMe)에서는 Nag라는, 프로그램 실행 전후로 나타나는 특정 창을 띄우지 않도록 리버스 엔지니어링하는것을 목표로 하고 있다. 프로그램을 별다른 조작 없이 곧바로 실행시킨다면 아래와 같은 Nag 창이 몇초간 나타난다. 이후 메인.. 더보기
Abex's 5th Crackme Abex의 크랙미 중 마지막 작품이다. 따로 설명이 필요할 정도로 복잡한 프로그램이 아니며 이전과 비슷하게 시리얼 키를 입력해서 비교하는 방식으로 작동한다. 프로그램을 실행시키면 간단하게 텍스트 필드와 버튼이 하나 뜬다. 다행히 비주얼 베이직으로 만든 프로그램은 아니고 델파이와 터보 링커를 활용하여 개발된 프로그램이다. 일단 바로 Check 버튼을 눌러보면 시리얼이 틀렸다는 메시지와 함께 프로그램이 곧바로 종료된다. 시리얼에 아무런 값을 입력하지 않아도 동일하게 메시지 박스가 나타난 후 프로그램이 종료된다. 더이상 얻을 정보가 없으므로 일단 디버거를 켜서 확인해보도록 하겠다. 엔트리 포인트에서 머지않아 금방 다이얼로그 박스를 그리는 함수를 호출하는 것 같다. 아직은 별다른 중단점을 설정하지 않았기에 Ch.. 더보기
Abex's 4th Crackme 이번에는 4번째 크랙미다. 사실 다른 사이트에 나와있는 풀이들도 그렇고 대부분 메모리 상에 남아있는 해답으로 푸는 방식이 대부분이지만 저렇게 몇시간동안(총 실행시간이니 22시간이나 붙잡고 있던 건 아닐것이다.. 아마도?) 붙잡고 있던 이유는 문제에서 다음과 같은 요구사항이 있었기 때문이다. 즉, 단순히 값을 찾는 게 아니라 키젠 프로그램을 만들어야 한다는 것이다. 분석해보면 알겠지만 이 크랙미는 매 시간마다 시리얼 키가 변하기 때문에 일일히 디버거를 켜서 값을 찾을수도 없는 노릇이고 결국 시리얼 키를 생성하는 키젠을 작성하는 것이 최종 해답이 될 것이다. 프로그램을 실행시켜보면 친숙한 비주얼 베이직 아이콘과 텍스트 필드, 버튼이 하나 주어진다. 일단 아무 시리얼이나 입력해보았지만 Registered 버튼.. 더보기
Abex's 3rd Crackme Abex의 3번째 크랙미다. 이번 파일은 델파이로 작성되어 있으며 크랙미와 같은 디렉토리에 위치한 유효한 키파일을 찾아야 한다. 설명은 간단하다. 그럼 우선 프로그램을 실행시켜 보자. 시작하자마자 아무런 창도 없이 바로 메시지 박스가 호출되었다. 키파일을 확인하는 단계인 것 같다. 확인을 누르니 키파일을 찾을 수 없다는 메시지 박스가 호출된 후 프로그램이 종료되었다. 확인 -> 성공/실패로 이어지는 간단한 로직의 프로그램인 것 같은데, 일단 디버거로 열어보자. 예전 첫번째 크랙미처럼 스크롤 안에 다 들어오는 간단한 구조를 가지고 있다. 호출하는 함수명을 살펴보니 MessageBoxA(), CreateFileA() 등 윈도우 API를 사용하고 있는데 이 함수들의 동작은 MSDN 등 구글링을 통해 쉽게 찾을.. 더보기
Abex's 2nd Crackme 2020.10.26 수정 - Abex's 4th Crackme를 풀면서 얻은 지식으로 키젠을 구현, 반영하였음. Abex의 두 번째 크랙미다. 이번 파일은 Visual Basic으로 작성되어 있으며 다음과 같이 시리얼 코드를 확인하는 동작을 하고 있다. 설명은 간단하다. 그럼 프로그램을 실행시켜보자. Check, About, Quit 버튼은 각각 시리얼 넘버 확인, 간단한 정보 출력, 프로그램 종료를 수행한다. 필드에 아무것도 입력하지 않고 Check 버튼을 눌러보면 어떻게 될까? 위와 같이 최소한 4글자를 입력하라는 경고가 나왔다. 그렇다면 4글자를 입력해보자. 위와 같이 올바른 시리얼을 입력하라는 문구가 나왔다. 그렇다면 어떻게 올바른 이름과 시리얼을 찾아낼 수 있을까? 우선 디버거로 이를 실행시켜보.. 더보기