이번 포스트에서는 레나 튜토리얼의 Level 7 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 영수증을 스캔하고 기록하는 프로그램이다. 체험판을 우회하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 프로그램을 실행하고 About를 클릭하면 등록관련 창이 뜬다. 여기서 아무런 이메일과 라이선스 키를 입력해서 시도해보면 다음과 같은 오류가 출력된다. 우선, 해당 오류를 지워보겠다. Ollydgb의 검색 기능을 활용하면 코드의 위치를 쉽게 찾을 수 있다. 해당 코드의 윗부분을 확인하면 아래와 같이 JNZ 명령어가 존재한다는 것을 확인할 수 있다. 해당 JNZ 명령어는 AL(EAX의 하위 8바이트)값을 비교하여 0이 아닐 때만 등록 성공..
이번 포스트에서는 레나 튜토리얼의 Level 6 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 컴퓨터 진단 툴이다. 체험판을 우회하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 우선 프로그램 제목에 있는 체험판 관련 문구를 찾아서 없애보겠다. Ollydbg의 search 기능을 활용하면 다음과 같이 해당 문구를 찾을 수 있다. 해당 위치로 들어가면 다음 사진과 같다. 해당 코드의 윗부분을 분석해보면 아래와 같이 분기문이 존재하는 것을 볼 수 있다. 해당 명령어는 "체험판 버전이다"라는 문구를 제목에다가 쓰는 부분을 건너뛰는 코드이다. 즉 사용자가 체험판을 사용하고 있다면 0이 [60EB8C]라는 메모리에 들어가 있고(확인해본 결..
이번 포스트에서는 레나 튜토리얼의 Level 5 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 사이트 디자이너 툴이다. 현재 남은 체험횟수가 10번이며 이 체험횟수 제한과 프로그램 종료 후의 광고를 제거하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 해당 프로그램을 시작하기 전에 체험 버전인지 아닌지를 확인하는 코드가 존재할 것이다. 따라서 검증 코드를 찾아서 crack를 해보겠다. Step over와 Step In 기능을 통해 찾아본 결과, 프로그램을 실행하는 함수의 바로 직전 코드가 489912인 것을 알 수 있다. 해당 코드의 윗부분을 살펴보면 4898F1번째 줄에는 다른 명령어로 호출하는 코드가 존재한다. 이는 체험판의 ..
이번 포스트에서는 레나 튜토리얼의 Level 4 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 전화부 관련 프로그램이다. 해당 프로그램은 등록되지 않는 상태라 등록된 상태로 crack하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. F9를 눌러 실행해보겠다. 실행하면 다음과 같은 창이 뜬다. 먼저 해당 프로그램의 문자열 부분(제목, 회색 부분, 버전)을 바꿔보겠다. 메모리 덤프에 가서 간단하게 검색기능을 통해 해당 제목의 위치를 찾아보겠다. 위와 같이 4E4BCA에 있다는 것을 확인할 수 있다. 이어서 해당 위치에 들어가서 제목을 변경해보겠다. 수정한 버전을 재 저장하여 실행하면 다음과 같이 제목이 변경된 것을 확인할 수 있다. ..
이번 포스트에서는 레나 튜토리얼의 Level 3 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : nags를 제거하라는 알림이 뜬다. 여기서 nags는 잔소리, 즉 쓸모없는 알림창을 뜻하며, 이를 다 제거하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 40101F는 첫 번째 nags이다. 이를 우회하기 위해 40100F의 JE 명령어를 실행해야 하는데, 40100C를 보면 EAX를 0과 비교하고 있는데, 여기서 EAX는 0이 될 수 없으므로 JE 명령어는 False를 반환하게 된다. 따라서 해당 명령어를 실행하려면 JE를 JMP로 변경해야 한다. 계속 실행하다 보면 아래와 같이 두 번째 MessageBoxA를 만나게 된다. 해당 메..
이번 포스트에서는 레나 튜토리얼의 Level 2 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : Level 1과 똑같은 문제다. 그러나 이번에는 Keyfile을 직접 생성해서 실행해보겠다. 그러기 위해 KeyFile의 검증 과정을 알아내야한다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 프로그램을 계속 실행하다 보면 401073에서 "CreateFileA"라는 함수를 만나게 된다. 빨간색 박스를 확인해보면 파일의 이름이 Keyfile.dat으로 되어 있다. 우선 아무값이 들어간 Keyfile.dat 파일 하나를 생성하겠다. (위치는 같은 폴더) 키 파일을 생성하고 나서 해당 프로그램을 재실행해보겠다. 계속 실행하다 보면 위와 같이 4010B8에서 CM..
이번 포스트에서는 레나 튜토리얼의 Level 1 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 기간이 지나서 라이센스를 새로 구매하라는 알림이 나와 있다. 이를 우회해서 프로그램을 실행하면 되는 것으로 보인다. ## 문제 풀이 : Ollydbg를 통해 해당 파일을 열어보겠다. 프로그램을 계속 실행하다 보면 401073에서 "CreateFileA"라는 함수를 만나게 된다. 해당 함수를 파일을 만드는 함수이며 파라미터 중 Mode = OPEN_EXISTING으로 되어 있다. 즉 FileName에 나와 있는 Keyfile.dat가 존재할 때만 실행한다는 의미이다. 여기서 Keyfile.dat가 존재하지 않으므로 FFFFFFFF라는 값을 반환해주었다. 이어서 바로 아래의 40107B를..
이번 포스트에서는 IA-32 레지스터의 종류 중 하나인 "basic program execution registers"에 대해 다루겠다. Basic program execution registers는 다음 그림과 같이 4개의 그룹으로 이루어져 있다. ## 범용 레지스터 (General-Purpose Registers) : 범용 레지스터는 이름처럼 범용적으로 사용되는 레지스터들이다. 보통 상수/주소 등을 저장할 때 주로 사용되며, 특정 어셈블리 명령어에서는 특정 레지스터를 조작하기도 한다. 32비트로 이루어져있다. 종류 : EAX : 산술 연산 및 논리 연산 실행 (ADD, SUB, XOR, OR), 함수 리턴 값에도 사용 EBX : 메모리 주소 저장 ECX : 반복문 명령어(LOOP)에서 반복 카운트로 ..