티스토리 뷰


1.abex1
CD-Protection Crack

Learn2Crack에 있는 Windows Crack Me를 한개씩 풀어 봅시다.

첫번쨰 Crack Me는 abex의 abex1입니다. 이 Crack Me가

원하는 것은 C 드라이브가 CD Rom Drive 라는 결과 입니다.

과연 드라이브의 타입을 체크 하는 API는 무엇일까요?

바로 GetDriveTypeA 입니다.  GetDriveTypeA 함수의

리턴값이 0x5라면 바로 CD rom Drive 인것입니다.

밑은 GetDriveTypeA리턴값들입니다.

 

리턴값들:

0 Drive Cannot Be determined

1 Root Dir Does not exist

2 DriveRemoveable

3 A Fixed Disk (HardDrive)

4 Remote Drive(Network)

5 Cd-Rom Drive <<:::::::::::::::

6 RamDisk

 

자 이제 GetDriveTypeA로 드라이브를 체크한다는것을 알았으니

이제 OllyDbg를 이용하여 크렉을 시작하여 봅시다.

먼저 크렉을 하기 위하여 대상 프로그램을 Olly로 불러 옵시다.

그럼 위의 그림과 같은 화면이 뜨게 됩니다.

이제 상단 메뉴의 E버튼을 눌러 대상 프로그램의 모듈을 봅시다.



그럼 이제뜬 Executable Modules 창에서

맨위의 모듈을 마우스 오른쪽 버튼으로 클릭 하여 뜬 팝업메뉴중

View Names메뉴를 눌러 Name 창을 띠워 봅시다.


Name창 중에서 GetDriveTypeA 마우스 오른쪽 버튼으로 클릭하여

뜬 팝업 메뉴중 Find references to import 메뉴를 눌러

이 함수를 참조하는 위치를을 보도록 하죠.


References 창이 떳다면 이제 마우스 오른쪽 버튼으로 클릭하여서

팝업메뉴중 Set Brackpoing on every command 메뉴를 눌러

브레이크 포인트를 설치 합시다.


이제 브레이크 포인트 설치가 완료 되었으니 프로그램을 Run 시켜 보죠.

Olly의 상단 메뉴중 ▶버튼을 누르시면 됩니다.


첫번쨰
뜨는 메시지 박스의 확인을 클릭하고 나면

0x401018 지점에브레이크가 걸려 Olly뜨는것을 볼수 있습니다.


이제 한줄씩 F8 [Step Over]를 눌러 실행하여 봅시다.

실행 하다보면...

00401024  |. 3BC6           CMP EAX,ESI

00401026  |. 74 15          JE SHORT abexcm1.0040103D

00401028  |. 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL

0040102A  |. 68 35204000    PUSH abexcm1.00402035                    ; |Title = "Error"

0040102F  |. 68 3B204000    PUSH abexcm1.0040203B                    ; |Text = "Nah... This is not a CD-ROM Drive!"

00401034  |. 6A 00          PUSH 0                                   ; |hOwner = NULL

00401036  |. E8 26000000    CALL <JMP.&USER32.MESSAGEBOXA>           ; \MessageBoxA

0040103B  |. EB 13          JMP SHORT abexcm1.00401050

0040103D  |> 6A 00          PUSH 0                                   ; |/Style = MB_OK|MB_APPLMODAL

0040103F  |. 68 5E204000    PUSH abexcm1.0040205E                    ; ||Title = "YEAH!"

00401044  |. 68 64204000    PUSH abexcm1.00402064                    ; ||Text = "Ok, I really think that your HD is a CD-ROM! :p"

00401049  |. 6A 00          PUSH 0                                   ; ||hOwner = NULL

0040104B  |. E8 11000000    CALL <JMP.&USER32.MESSAGEBOXA>           ; |\MessageBoxA

00401050  \> E8 06000000    CALL <JMP.&KERNEL32.EXITPROCESS>         ; \ExitProcess

이런 부분을 볼수 있습니다.

0x401026줄에서 점프를 하지 않으면 CD-ROM Drive가 아니라는..

메시지 박스를 띄우고 프로그램이 종료되는 것입니다.

그럼으로 우리는 0x401026줄의 JE를 JMP로 바꾸어 무조건

점프로 바꾸어 주면 패치 완료 인것입니다.

밑의 그림처럼 0x401026줄을 마우스 오른쪽 버튼으로 클릭하여

팝업메뉴중 Assemble 메뉴를 눌러 Assemble 창을 띄우고

Assemble 창에서 EDIT아이템에 JMP SHORT 0040103D

라고 입력한후 Asseble 버튼을 눌릅시다. 이제 수정이 완료 됬으니

다시 한번 0x401026줄을 마우스 오른쪽 버튼으로 클릭하면

뜨는 팝업메뉴중 Copy to executeable -> Selection 을 클릭합니다.

그러면 수정된 내용으로된 창이 뜨는데요...

그중에 아무줄이나 마우스오른쪽 버튼으로 클릭하면 뜨는 팝업메뉴중

Save File 메뉴를 눌러 저장하시면 됩니다.


이제 저장한 파일을 실행 시켜 보면 밑과 같이 성공했다는

메시지 창을 보실수 있습니다.


--------------------------------------------------------------------------------------------



2.abex2 name/serial VB Crack

이번에는 abex의 abex2입니다. 이 Crack Me의 특징은

VB로 만들어졌고 이름에 맞는 시리얼을 구하는 것입니다.

VB로 만들어졌기 떄문에 우리가 흔히 크렉하는 C/ASM

프로그램과는 크렉하는 방법이 틀립니다.

어쨰뜬 시작하여 보죠. 방법은 우선 크렉미에 아무값이나

입력한후 Check를 눌러 봅시다. 뭐라구 나오나요???

"Nope, this serial is wron!"이라고 나오는 군요.

이 문자열을 잘 기억해 두시구요~~~

이제 Olly Dbg로 이 타겟을 Attach 하도록 합니다.


이제 Olly의 상단 메뉴중 E라고 써있는 버튼을 눌러

모듈창을 띄운후 거기서 가장 맨위의 모듈을 마우스 오른쪽

버튼으로 클릭하여 나오는 팝업메뉴중....

View Code in CPU 메뉴를 누릅니다.


그럼 이제 모듈의 내용이 역어셈블 되어 표시되었을 겁니다.

이제 아무줄에나 마우스를 올려놓고 마우스 오른쪽 버튼으로

클릭하여 팝업메뉴중 Search for -> All referenced text strings 메뉴를 누릅니다.


이제 text string 목록이 표시되었으면

이제 아까 check 버튼을 눌렀을떄 보았던

메시지 박스의 텍스트인

"Nope, this serial is wrong! 찾을수 있습니다.


그럼 찾은 저 문자열을 마우스 오른쪽 버튼으로

클릭하면 나오는 팝업메뉴중 가장 위의 메뉴인

Follow in Disassembler 메뉴를 누릅니다.


Follow된 부분에서 조금 위로 올리다보면...

밑의 그림과 같은 부분을 만날수 있습니다.


보시다시피 0x403413줄에 > 표시가 있습니다.

이것은 다른곳에서 이곳으로 점프해 왔다는

것을 의미 합니다. 밑에 빨간색으로 네모친곳을

보니 Jump from 0x403406 이라고 써있네요.

바로 0x403406으로 부터 점프해 온것입니다.

그러면 0x403406으로 한번 이동하여 보죠.

바로 위니깐 그냥 스크롤바를 올리시면 됩니다.

점프해온곳인 0x403406으로 부터 조금더

스크롤바를 올려보면 밑의 그림과 같은 곳을 만날수 있습니다.



"Yep, this key is right!" 라는 문자열을 볼수 있는데

아마 키가 맞을떄의메시지라느 것을 짐작하여 볼수 있습니다.

그리고 조금 위를 보면 0x4032E9 지점부터 어딘가로 부터

점프해와서 이 부분이 시작된다는 것을 알수 있습니다.

그렇다면 0x4032E9 지점 부터 브레이크 포인트를 걸고

한줄씩 Step by Step을 하면서 내려오다 보니....


0x403307 줄에서 밑과같이 A8D9C5D0이라는 "Dual"이라는 이름에

올바른 시리얼 키를 찾을수 있었습니다.

그래도 혹시 모르니 올바른 시리얼인지 확인해 보죠.



보다 시피 성공 메시지 박스를 볼수 있었습니다.

여러분도 여러분의 이름을 넣고 한번 확인해 보시기 바랍니다.

--------------------------------------------------------------------------------------------


3.abex3 KeyFile Crack

이번 크렉역시 아주 심플하고 쉽다.

언제나 그렇지만 크렉미가 원하는것이

무언지 알고 시작하는 것이 가장 중요하다.

이번 크렉미가 원하는 것은? keyFile이다.

그렇다면 파일이 있는지 없는지 가장

간단하게 체크 하는 API는 무엇일까?

바로 CreateFileA 이다. CreateFileA

지정된 파일을 open 하는 함수이다.

GetFileSize 함수나 ReadFile 함수나

WriteFile 함수 등을 쓰기전에 해당파일의

핸들을 얻기 위하여 쓰는 함수인 것이다.

만약 해당 파일이 없다면 반환값이 -1일것이다.

크렉미 역시 -1와 비교해서 만약 그렇다면

키파일이 없다고 인식하는것일 것이다.

그럼 지금까지 말한걸 알아두고 시작하여 보자.

API에 브레이크 포인트 거는 법은 위에서 배웠으니

생략 하도록 하고 이번에는 Olly로 대상을 불러오고

CreateFileA 함수에 브레이크를 걸도록 한다.

그리고 대상을 Run 시키면 메시지 박스가 하나 뜨는데

확인을 누르면 밑의 그림과 같이 CreateFileA 함수에

브레이크가 걸린체 Olly팝업되는 것을 볼수 있다.

CreateFileA페러미터중 FileName이 abex.l2c

라는것을 볼수 있다. 절대 경로가 안나와 있음으로...

현재 Crack Me가 있는 폴더에 저 파일이 있어야 한다는 것을

알수 있다. 그럼 현재 Crack Me가 있는 폴더에 abex.l2c라는

파일을 만들고 만들었으면 다시 Step by Step으로 한줄씩

실행하여 나가 보자.

00401034  |. 83F8 FF        CMP EAX,-1

00401037  |. 74 3C          JE SHORT abexcrac.00401075

두줄에서 앞에서 말했던 것처럼 -1과 비교하지만

우리는 해당 폴더에 abex.l2c 파일을 만들어 줬음으로

이것은 그냥 넘어 갈수 있다. 계속 Step  by Step으로 내려 가자.

00401039  |. 6A 00          PUSH 0                                   ; /pFileSizeHigh = NULL

0040103B  |. FF35 CA204000  PUSH DWORD PTR DS:[4020CA]               ; |hFile = 0000005C (window)

00401041  |. E8 4D000000    CALL <JMP.&KERNEL32.GETFILESIZE>         ; \GetFileSize

00401046  |. 83F8 12        CMP EAX,12

00401049  |. 75 15          JNZ SHORT abexcrac.00401060

GetFileSize 함수를 쓰고 구해온 크기는 EAX에 담기는데

구해온 크기가 12(Dec->18)인지 체크 한다. 12가 아니라면

0x401049 줄에서 0x401060 줄로 점프하는것을 볼수 있다.

이것은 점프하게 하면 안됨으로 abex.l2c 파일에 내용을

나는 18자의 스트링으로 "Dual is my Hero!!!" 입력하였다.

이제 Olly 메뉴중 ▶를 눌러 보자. 어떤가 성공 메시지를

볼수 있는가 huh ?



위의 메시지 박스가 떳다면 성공한 것이다.

--------------------------------------------------------------------------------------------

2.abex4 serial / VB Crack

별써 4번쨰 크렉미이다.

이번 크렉미는 짜증나는 VB이다.

제작자는 VB를 좋아하는가 보지?:p

어쨰든 abex2 에서 우리는 이미 한번

VB크렉을 해봤었다. 그떄 우리는

Search for - > All referenced text strings

에서 적절한 스트링을 찾아서 크렉을 하였었다.

이번에는 조금 다른 방법을 이용하여 크렉을 하도록 하겠다.

vbde 라는 프로그램의 도움을 받기로 하였다.(강좌를 간단하게..)

vbde 라는 프로그램을 다운로드 한후 우리의 대상 파일을

열어오자. 열어 오는것에 성공하였다면 Procedures 버튼을 눌러보자.


Text1_Change가 0x2280 임을 볼수 있다.

0x2280에 Base Address 0x400000을 합치면

0x402280 이 된다. Olly Dbg로 대상을 Open 한후

0x402280에 브레이크 포인트를 걸어 보자.

Open이 완료 되었다면 브레이크 포인트를 걸고

시킨후 대상 파일의 Text1에 아무글씨나

써넣어 보자. 브레이크가 걸린후 Olly가 팝업 된다.

밑으로 한줄씩 Step by Step으로 내려가 보자.



0x402308 줄에서 올바른 시리얼이 ECX스택으로

옮겨 지는것을 볼수 있는가? 과연 저게 나의 시리얼이

맞는지 한번 입력하여 보자.



하지만 시리얼은 매일 바뀐다... 왜냐구?

이 시리얼은 날짜에 따라 달라지기 떄문에....:p

어쨰든 이번 크렉역시 완료 이다.

--------------------------------------------------------------------------------------------

5.abex5 serial Crack

드디어 마지막 5이다.

아주 간단한 시리얼 체크 크렉이다.

앞에서 몇번 말했던 것처럼..

크렉에서 가장 중요한것은 크렉미가 원하는 것이

무언가 하는 것이다. 이번 크렉미는 시리얼을 원한다.

크렉미를 실행해 보자! 딱 두개의 객체가 보인다.

한개는 Edit 박스 하나는 Check 버튼 이다.

아마 Check버튼을 누르면 Edit박스의 내용을 가져와서

시리얼과 체크 하는 것일 것이다.

그렇다면 Edit 박스에서 시리얼을 가져 오는 함수는

무엇일까? 두가지로 줄여서 짐작하여 볼수 있다.

한개는 GetWindowTextA 두번쨰는 GetDlgItemTextA이다.

이번 크렉미 같은 경우 다이얼로그 리소스 아이템으로

이루어져 있음으로 GetDlgItemTextA 함수에 브레이크

포인트를 걸어 주어야 할것이다. 자 그럼 이제

대상을 실행한후 대상을 Olly로 Attach 한후

GetDlgItemTextA에 브레이크 포인트를 걸어보자.


이제 Olly에서 ▶을 눌러 Run 시킨다음...

Check 버튼을 눌러 보자.


~ 지금부터 Step by Step을 시작하며 내려가 보자.

Step by Step하며 내려가 보면 밑과 같은 부분을 만날수 있다.


lstrcmpiA
함수를 이용하여

내가 입력한 문자열인 "Dual is My Hero!!!" 과..

"L2C-57816784-ABEX"를 비교하는것을 볼수 있다.

그렇다! "L2C-57816784-ABEX"이것이 올바른 시리얼인 것이다.

과연 맞는지 테스트 하여 보기 위해서 대상의 Edit에

"L2C-57816784-ABEX" 입력한후 Check 버튼을 눌러보자.

어떤가 huh? :p



이로써 모든 abex crack이 끝났다.

즐거운 시간이였었으면 좋겠다.

물런 감정을 어떻게 느끼던 그것은...

내가 뭐라 말할 바는 아니지만 말이야!

그래도 즐거운 시간이었기를 바란다.

그럼 앞으로도 즐거운 Crack의 도를 쌓기 바란다.

혹시라도 이 글에 문제가 있다면

댓글