챌린지 49

Challenge - Music Player

Reversing.kr의 네 번째 문제인 Music Player다. 이전 Easy 시리즈들과는 달리 푼 사람의 수가 비약적으로 줄어든 것을 볼 수 있다. 아마 여기서부터는 장난은 끝난다는걸 의미하는 것 같기도 하다. 글을 쓰기 전에 먼저 말해둘 것은 나도 이 문제를 풀지 못해서 다른 사람의 풀이를 보고 풀었다는 것이다. Easy 시리즈들을 풀때는 나 혼자의 힘으로 풀 수 있었지만 아직 리버싱 초보인 이상 문제를 푸는 데 한계가 슬슬 다가오는 것인지 바보같이 dll 내부까지 들어가서 로직을 파악하느라 끙끙대는 실수를 저지르고 말았다. 여기서 시간과 에너지를 너무 소모해버려서 결국 힌트를 보고 풀게 되었지만 다시는 엉뚱한 곳을 분석하지 말자는 교훈을 얻을 수 있었다. 어쨌든 이번 챌린지의 목적은 이 음악 재..

Challenge - Easy Unpack

Reversing.kr의 세 번째 문제인 Easy Unpack이다. 이전 문제인 Easy Keygen보다 약간 적은 3000명 정도의 사람들이 푼 문제로 언패킹에 관련된 문제다. 언패킹은 보통 OEP(Original Entry Point)를 찾아서 덤프를 뜨고 IAT를 복구하는 것이 목적인데 언패킹된 파일을 워게임 사이트에 업로드할 수도 없는 노릇이기 때문에 이번 문제에서는 이 프로그램의 OEP를 찾아 사이트에 인증하도록 설명하고 있다. 일단 프로그램을 실행시켜보면 다음과 같은 단순한 창이 뜨는데 뭘 눌러도 아무런 반응이 없기 때문에 정보를 얻어낼 수 없었다. DIE로 확인해보아도 별다른 패커 정보를 찾을 수 없었다. 그렇기때문에 일단 프로그램을 x32dbg로 실행시켜보았다. 0x0040A04B에서 프로..

Challenge - Easy Keygen

Reversing.kr의 두 번째 문제인 Easy Keygen이다. 첫 번째 문제가 6천 명이 풀었던 것에 비하면 좀 줄어들긴 했지만 그래도 Easy라는 이름답게 4천명이나 풀은 문제다. 이번 문제는 설명 파일도 따로 포함되어 있는데 다음과 같다. 즉 시리얼이 5B134977135E7D13인 이름을 찾는 것이 이 문제의 목적이 될 것이다. 우선 키젠 프로그램을 실행시켜서 어떻게 동작하는지 확인해보자. 이번 프로그램은 콘솔 프로그램이기 때문에 명령 프롬프트에서 실행해서 프로그램 종료 후 곧바로 창이 꺼지는 것을 방지했다. 어쨌든 실행시키면 먼저 사용자 입력으로 이름(Name)을 받는다. 일단 아무 문자열이나 입력해보자. 이번에는 시리얼을 입력받고 있다. 아직 이 이름에 어떤 시리얼이 해당되는지 알 수 없기..

Challenge - Easy Crack

Reversing.kr(립케알)에 있는 간단한 크랙미를 풀어보기로 했다. 6000명이 푼 간단한 문제로 아마 Abex 크랙미 정도의 난이도에 해당하지 않을까 싶다. 우선 프로그램을 실행시켜보면 다음과 같이 시리얼을 입력하는 창이 나타난다. 확인 버튼은 항상 활성화되어있으며 시리얼 키를 입력하는 필드에는 별다른 이벤트가 존재하지 않는 것 같다. 아무런 값을 입력하지 않아도 혹은 틀린 시리얼을 입력해도 동일하게 다음과 같은 메시지 박스를 호출하고 있다. 그렇다면 해당 문자열을 기반으로 먼저 찾아보자. 일단 디버거로 파일을 열어보면 다음과 같이 0x00401188에서 진입점을 확인할 수 있다. 초반 부분부터 여러가지 함수를 호출하고 있는데 F8 등 Step Over로 하나하나 실행시키다 보면 머지않은 곳에서 ..

Abex's 5th Crackme

Abex의 크랙미 중 마지막 작품이다. 따로 설명이 필요할 정도로 복잡한 프로그램이 아니며 이전과 비슷하게 시리얼 키를 입력해서 비교하는 방식으로 작동한다. 프로그램을 실행시키면 간단하게 텍스트 필드와 버튼이 하나 뜬다. 다행히 비주얼 베이직으로 만든 프로그램은 아니고 델파이와 터보 링커를 활용하여 개발된 프로그램이다. 일단 바로 Check 버튼을 눌러보면 시리얼이 틀렸다는 메시지와 함께 프로그램이 곧바로 종료된다. 시리얼에 아무런 값을 입력하지 않아도 동일하게 메시지 박스가 나타난 후 프로그램이 종료된다. 더이상 얻을 정보가 없으므로 일단 디버거를 켜서 확인해보도록 하겠다. 엔트리 포인트에서 머지않아 금방 다이얼로그 박스를 그리는 함수를 호출하는 것 같다. 아직은 별다른 중단점을 설정하지 않았기에 Ch..

챌린지/CrackMe 2020.10.26

Abex's 4th Crackme

이번에는 4번째 크랙미다. 사실 다른 사이트에 나와있는 풀이들도 그렇고 대부분 메모리 상에 남아있는 해답으로 푸는 방식이 대부분이지만 저렇게 몇시간동안(총 실행시간이니 22시간이나 붙잡고 있던 건 아닐것이다.. 아마도?) 붙잡고 있던 이유는 문제에서 다음과 같은 요구사항이 있었기 때문이다. 즉, 단순히 값을 찾는 게 아니라 키젠 프로그램을 만들어야 한다는 것이다. 분석해보면 알겠지만 이 크랙미는 매 시간마다 시리얼 키가 변하기 때문에 일일히 디버거를 켜서 값을 찾을수도 없는 노릇이고 결국 시리얼 키를 생성하는 키젠을 작성하는 것이 최종 해답이 될 것이다. 프로그램을 실행시켜보면 친숙한 비주얼 베이직 아이콘과 텍스트 필드, 버튼이 하나 주어진다. 일단 아무 시리얼이나 입력해보았지만 Registered 버튼..

챌린지/CrackMe 2020.10.25

Abex's 3rd Crackme

Abex의 3번째 크랙미다. 이번 파일은 델파이로 작성되어 있으며 크랙미와 같은 디렉토리에 위치한 유효한 키파일을 찾아야 한다. 설명은 간단하다. 그럼 우선 프로그램을 실행시켜 보자. 시작하자마자 아무런 창도 없이 바로 메시지 박스가 호출되었다. 키파일을 확인하는 단계인 것 같다. 확인을 누르니 키파일을 찾을 수 없다는 메시지 박스가 호출된 후 프로그램이 종료되었다. 확인 -> 성공/실패로 이어지는 간단한 로직의 프로그램인 것 같은데, 일단 디버거로 열어보자. 예전 첫번째 크랙미처럼 스크롤 안에 다 들어오는 간단한 구조를 가지고 있다. 호출하는 함수명을 살펴보니 MessageBoxA(), CreateFileA() 등 윈도우 API를 사용하고 있는데 이 함수들의 동작은 MSDN 등 구글링을 통해 쉽게 찾을..

챌린지/CrackMe 2020.10.23

Abex's 2nd Crackme

2020.10.26 수정 - Abex's 4th Crackme를 풀면서 얻은 지식으로 키젠을 구현, 반영하였음. Abex의 두 번째 크랙미다. 이번 파일은 Visual Basic으로 작성되어 있으며 다음과 같이 시리얼 코드를 확인하는 동작을 하고 있다. 설명은 간단하다. 그럼 프로그램을 실행시켜보자. Check, About, Quit 버튼은 각각 시리얼 넘버 확인, 간단한 정보 출력, 프로그램 종료를 수행한다. 필드에 아무것도 입력하지 않고 Check 버튼을 눌러보면 어떻게 될까? 위와 같이 최소한 4글자를 입력하라는 경고가 나왔다. 그렇다면 4글자를 입력해보자. 위와 같이 올바른 시리얼을 입력하라는 문구가 나왔다. 그렇다면 어떻게 올바른 이름과 시리얼을 찾아낼 수 있을까? 우선 디버거로 이를 실행시켜보..

챌린지/CrackMe 2020.09.29

Abex's 1st Crackme

리버싱 입문 도서에서 거의 빼놓지 않고 다루는 Abex의 첫번째 Crackme 파일이다. 파일은 https://crackmes.one/에서 간단한 가입 후 다운받을 수 있다. 크랙미의 목적은 이 파일이 하드 드라이브를 CD롬으로 인식하도록 조작하는 것이다. 성공한다면 "OK, I really think OK, I really think that your HD is a CD-ROM! :p"이라는 문자열을 출력하며 실패한다면 "NAH... This is not a CD-ROM drive!"라는 문자열을 출력하게 된다. 사실 문제를 풀어보기 전에 가장 좋은 습관은 그냥 실행시켜 보는 것이다. 아무런 조작을 하지 않은 채 실행시키면 처음에는 위와 같은 메시지박스가 뜨는 것을 볼 수 있다. 확인을 누르면 위와 같..

챌린지/CrackMe 2020.08.29