▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

1. abex3 크랙 설명서

기타 조회 수 7016 추천 수 0 2004.03.12 09:52:03
뭉충닷컴 *.154.199.102
/--------------------------------------------------------------------------
예제 : abexcrackme3.exe
종류 : key-file crack
툴   : W32Dasm Ver 8.9
일시 : 2003.12.17 Wed
mail : mianamssi@hotmail.com
---------------------------------------------------------------------------/

첫번째 크랙 강좌이다. -_-)/
솔직히 강좌라 할만한 글이라 할순 없고 단순히 내가 크랙을 공부해 나가기 위해서 크랙한 예제나 프로그램들은
하나씩 하나씩 log를 남기기위해서 적는 글이다. 나의 머리가 그리 좋지 않기때문에 뭔가를 하고 나면 자꾸
까먹기때문에 귀찮더라도 이러한 일을 한다.

원래는 이전에 몇일정도 크랙에 대한 부분을 해보려고 공부한적 있었고 몇가지 예제도 내 나름대로 해결한적이
있었는데 그 때 log를 남기지 못해서 지금 다시 하려니 다시 처음 시작하는 기분이 든다. -_-;
이번에는 좀더 정통적으로 해서 크랙에 대한것을 주로 하겠지만 그것 보다도 어셈블리언어에 대해서 조금이라도
친숙해지고자 하는 목적이 강하다. 내 분야가 주로 웹쪽이라서 시스템 언어인 어셈을 이용할리는 거의 없겠지만
그냥 재미삼아 해본다. (어디서 본글이 있는데 어셈공부는 프로그래밍 언어를 익히는것이 아니라 컴퓨터 내부의
구조에 대해서 좀더 이해하기 위해서 하는 공부라고...이 말이 맞는말 같다.)

내가 사용할 예제들은 주로 http://www.learn2crack.com 사이트에서 구해오고 정답이 있는 예시들이다.
이번에 선택한 것도 정답, 즉 크랙방법에 대한 글이 올려져있는 예시들이다.

그렇다고 이 글을 그 해답과 똑같이 적겠다는것은 아니다. 그 해답이 번역문서도 있고 국내 크래커들이 해놓은 문서들도
있는데 나는 단지 그 문서만 참고할뿐이고 내 나름대로 다시 해보겠다는 소리이다. 초짜가 해답없는 프로그램을
이리저리 고민고민 해서 풀어나가는 것도 좋지만 어느정도 해답이 있는것을 본후 이리저리 해결하는것도 좋은것같다.

뭐랄까..스타랑 비슷하다고 해야하나.. 혼자 이리저리 스타 빌드오더 구상하고 할수 있지만 남들이 해놓은것을
보고 익힌후 자기 나름대로의 좀 더 좋은전략을 세우는것이 더 좋은 일이라고 본다. 즉! 취할수 있는 부분은
과감히 취하자!

쓸데없는 얘기를 했는데 시작하겠다.. -_-



일단 이 abexcrackme3.exe 예제에 대한 해답은 외국 크래커가 쓴문서를 번역한 것으로써 크랙툴은 소아(SoftICE)를 이용하였다.
그래서 나도 부랴부랴 소아 설치하고 그대로 따라해봤는데 그놈이랑 운영체제가 틀려서 그런것인지 소아 버젼이 틀려서
그런것인지 몰라도 최종 정답은 맞는데 그 문서에서 설명한 어셈코드들이 내가 소아에서 보았던 코드들과는 너무도 판이해서
그 문서의 설명이 나의 경우엔 전혀 해당사항이 없었다. (심지어는 거기서 적어놓은 소아 단축키까지 제대로 맞지 않았다 -_-)

문서는 그냥 단지 참고자료라 생각하고 '내 나름대로 크랙해보자' 하는 마음으로 천천히 코드를 분석했다. 이리저리 차근 차근
살펴본 결과 어떤 key-file를 생성해야한다는 부분까지는 접근을 했으나 그 이후 해결책을 찾지 못해서 이리저리 고민하던중
W32Dasm 프로그램으로 한번 그 abexcrackme3.exe 프로그램을 열어보니 훨씬 접근하기 쉬웠다. (예전에 크랙 공부할때 소아설치가
쉽지 않아서 W32Dasm으로만 크랙했었다..그래서 그런지 W32Dasm 이 좀더 편하긴 하다.)

이런 이유때문에 내가 이 프로그램은 소아를 이용하지 않고 W2Dasm을 이용하게 되었다. 자 그럼 진짜로 시작해보자!
일단 abexcrackme3.exe 프로그램을 실행시켜보자.

"Click OK to check for the keyfile."
keyfile를 체크한다는 메시지 박스가 뜬다. 여기서 OK 버튼 누르면
"Hmmmmm, I can't find the file!"
keyfile을 찾지 못했다는 메시지 박스가 뜬다.

일단 이 프로그램이 어떻게 돌아가는지 대충 머리속에 들어왔을것이다. 미션이 한가지 생겼다 key-file이 무지 알아내야 하는것이다.
그럼 이 프로그램을 W32Dasm을 이용해서 열어보자

프로그램을 열었으면 [Refs]-[String Data Reference]를 열어보자! 웃! 아까 봤떤 메시지들도 있고 처음 본 메시지들도 있다.
왠지 이 프로그램은 크랙하기 무지 쉽다는 생각이 든다. 그 창에서 아까 봤떤 메시지인
"Click OK to check for the keyfile." 이 부분을 찾아서 더블클릭하면 그 위치로 이동을 한다.


=====================================================================================
* Possible StringData Ref from Data Obj ->"Click OK to check for the keyfile."
                                  |
:00401007 6812204000              push 00402012
:0040100C 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:0040100E E88C000000              Call 0040109F
:00401013 6A00                    push 00000000
:00401015 6880000000              push 00000080
:0040101A 6A03                    push 00000003
:0040101C 6A00                    push 00000000
:0040101E 6A00                    push 00000000
:00401020 6800000080              push 80000000

* Possible StringData Ref from Data Obj ->"abex.l2c"
                                  |
:00401025 68B9204000              push 004020B9
=====================================================================================

이와 같은 부분이 나타나는데 왠지 이 "abex.l2c"란 것이 눈에 거슬인다. 혹시 이것이 그 찾는 key-file인가 의심을 해보고
이 파일을 한번 만들어보자. abexcrackme3.exe 파일이 있는 디렉토리에서 마우스 오른쪽 버튼 누른후
[새로만들기]-[텍스트문서] 이렇게 한후 abex.l2c 이란 파일을 만들자. 주의 할것은 l2c는 확장자이다.
잘못 만들면 abex.l2c.txt란 파일을 만들수 있으니 주의해서 abex.l2c 파일을 만들자.

이 파일을 만들었으면 이제 프로그램을 다시 실행시켜보자.

"Click OK to check for the keyfile."
여기서 OK 버튼을 누르면
"The found file is not a valid keyfile!"
이라해서 잘못된 key-file라고 나온다. 흠...그 key-file가 abex.l2c 파일명은 맞는데 뭔가 이 파일에서
또 다른것을 검사하나보다. 또 다른 미션이 생겼다. 유효한 key-file이 뭔지 찾는것이다.!

다시 [Refs]-[String Data Reference] 을 보자. 아주 고맙게도 성공했을때 나타나는 메시지들이 보인다.
"Well done!"
"Yep, keyfile found!"
이렇게 2개이다. 그럼 이 정보를 가지고 역추적 해보자. 즉, 어떤 경우일때 성공하는지 알아보는것이다.
Wel done! 부분을 더블클릭해서 해당 코드부분으로 이동한다. 그 코드 부분은 성공했을때 부분이므로
이 코드의 약간 윗부분을 살펴보자


=====================================================================================
* Possible StringData Ref from Data Obj ->"abex.l2c"
                                  |
:00401025 68B9204000              push 004020B9

* Reference To: KERNEL32.CreateFileA, Ord:0000h
                                  |
:0040102A E85E000000              Call 0040108D
:0040102F A3CA204000              mov dword ptr [004020CA], eax
:00401034 83F8FF                  cmp eax, FFFFFFFF
:00401037 743C                    je 00401075
:00401039 6A00                    push 00000000
:0040103B FF35CA204000            push dword ptr [004020CA]

* Reference To: KERNEL32.GetFileSize, Ord:0000h
                                  |
:00401041 E84D000000              Call 00401093
:00401046 83F812                  cmp eax, 00000012
:00401049 7515                    jne 00401060
:0040104B 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Well done!"
                                  |
:0040104D 6835204000              push 00402035

* Possible StringData Ref from Data Obj ->"Yep, keyfile found!"
                                  |
:00401052 6840204000              push 00402040
:00401057 6A00                    push 00000000
=====================================================================================



유심히 살펴보니 제일 첫줄의 "abex.12c" 문자열을 참조하는데 그 이후에 2개의 시스템 함수를 참조하는 부분이 보인다.
* Reference To: KERNEL32.CreateFileA, Ord:0000h
* Reference To: KERNEL32.GetFileSize, Ord:0000h
이렇게 2부분인데 CreateFileA 함수를 파일에 관련된 함수이고(아마도 이 부분은 abex.l2c 파일이 있는지 없는지를 존재하는 함수로
여기서 이용된듯 하다)
GetFileSize 이 부분이 많이 의심스러운데 이 부분에서 이 abex.l2c 파일의 크기를 검사하는것 같다.
이부분의 어셈 코드 부분을 살펴보자. 웃! 금방 나왔다!


=====================================================================================
* Reference To: KERNEL32.GetFileSize, Ord:0000h
                                  |
:00401041 E84D000000              Call 00401093     <ㅡ 이 부분은 시스템함수인 GetFileSize를 호출한다는 소리
:00401046 83F812                  cmp eax, 00000012 <ㅡ eax의 값이 00000012 와 같는지 검사한다.
:00401049 7515                    jne 00401060      <ㅡ 틀리면 00401060 으로이동
:0040104B 6A00                    push 00000000
=====================================================================================

00401060 이 어떤 곳인지 살펴보자


=====================================================================================
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401049(C)
|
:00401060 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Error"
                                  |
:00401062 6879204000              push 00402079

* Possible StringData Ref from Data Obj ->"The found file is not a valid "
                                        ->"keyfile!"
=====================================================================================

                                        
                                        
웃! 이 주소를 찾아가보니 아까 봤던 에러메시지를 뿌려주는 부분이다.
그럼 해답은 거의 나온거나 다름없다 eax값이 00000012 이여야한다. 즉 파일 사이즈의 값이 00000012이여야하는데
이 00000012 값은 16진수 이므로 이 값을 10진수로 바꾸면 18이란 값이 나온다. 즉! key-file가 18byte의 사이즈면
된다는 소리이다. 맞는지 확인해 보자. 이 abex.l2c 파일을 연후 18byte를 입력해보자. 한글은 한글자가 2byte로
인식하므로 그냥 영문이나 숫자를 18번 넣자 나 같은 경우 그냥 "111111111111111111" 이렇게 "1"만 18번 넣었다.
이렇게 저장하고선 다시 abexcrackme3.exe 프로그램을 실행시켜보자.

웃! "Yep, keyfile found!" 메시지가 나왔다! 크랙 성공한것이다.! 이 예제는 알고보니 너무도 간단한 프로그램이였다.
단순히 어떤 파일명의 key-file를 찾은후 그 파일의 크기만 체크하는것이였다.
사실 이런 종류의 key-file를 찾는 크랙은 그리 많지 않은 편인데 어쩌다가 첫번째로 크랙할 프로그램을 선정하다보니
이 프로그램이 선택되었다. -_-

크랙한 방법이 알보고면 상당히 허접하고 제대로된 지식없이 끼여맞추기 식으로 했다. -_-; 초보니 이해해라..
내가 생각해도 정말 무식하게 크랙한듯 싶다...-_-
아무튼 다음다시 다른것 선정해서 크랙한후 글올리겠음 -_-;;;


*) http://www.learn2crack.com/abex3.zip  :이 파일 예제
*) http://www.learn2crack.com/CoDe_InSiDe-abex3.txt  :참조문서
*) 이 파일을 크랙하면서 알게된 사실들....
USER32.MessageBoxA : Call 0040109F
KERNEL32.CreateFileA : Call 0040108D
KERNEL32.GetFileSize : Call 00401093
KERNEL32.ExitProcess : Call 00401099

cmp 연산자는 뭔가 비교하는것!

* Possible StringData Ref from Data Obj ->"Well done!"
:0040104D 6835204000              push 00402035
* Possible StringData Ref from Data Obj ->"Yep, keyfile found!"

이렇게 되어있을경우 Well done!는 메지시박스의 제목 그 다음은 메시지박스의 내용




















******************** 아래는 소아용으로 크랙하려고 했을때 썼던 글이다...삭제하기 뭐해서 그냥 올린다... -_-;;



abex3 크랙


첫번째 크랙 강좌다.
나도 아직은 크랙 초보라서 잘은 못하지만 이제부터 익혀보려고 한다.
지금이야 웹상에 떠도는 예제들 가지고 연습하지만 조만간 실력이 늘면 상용프로그램을 크랙해볼것이다 -_-

이번에 크랙할 예제 프로그램은 abexcrackme3.exe이다. 이 프로그램은 key-file을 찾는 프로그램으로써
프로그램을 시작할때 어떤 key-file를 찾아서 없으면 경고가 나타나는 형식이다.

일단 다운받은 abexcrackme3.exe 파일을 실행시켜보자 그럼 다음과 같은 2번의 메시지가 나타난다.

"Click OK to check for the keyfile"
"Hmmmmm, I can't find the file!"

경고창들을 보니 확실히 어떤 key-file를 찾는다는것을 쉽게 알수 있다. 여기서 크랙의 방향이 정해졌다.
key-file을 있나 없나 체크한다는 소리는 즉 윈도우의 CreateFileA 함수를 호출한다는 소리이다.
잘 모르면 일단 외워라 윈도우에서 파일관련 함수로는 CreateFileA가 있다는것을 말이다. -_-;

그럼 여기까지 생각이 미쳐으므로 브뽀를 CreateFileA에 걸자.
(초보자들을 위해서 브뽀란 break point를 줄임말이고..브뽀를 거는 이유는 abexcrackem3.exe를 실행할때
파일이 있나 없나 검사하므로 윈도우의 CreateFileA란 시스템 함수를 호출하게 될것이다. 우리는
수많은 소스코들 중에서 CreateFileA를 호출하는 부분을 쉽게 찾기 위해서 브뽀를 걸어주는것이다.)

소아를 실행시킨후 bpx CreateFileA라 적은후 엔터쳐서 브뽀를 설정해둔후 X를 누른후 엔터쳐서 일단 소아창을
없앤다.

이제 abexcrackme3.exe란 파일을 다시 실행시켜보자.
"Click OK to check for the keyfile" 이 메시지가 뜰때 Ok 버튼을 클릭하면 소아창이 뜰것이다.
왜냐하면 아까 CreateFileA함수를 호출할때 브뽀를 걸었기때문이다. 아직은 잘 모르겠지만 OK 버튼을 클릭했을때
이 프로그램은 뭔가 내부적으로 어떤 파일처리 함수를 이용함을 유추할수 있다. 일단 여기까지만 생각자.

CreateFileA 함수를 호출했으면 파일 이름을 찾아야한다. CreateFileA함수는 파일명이 꼭 필요하므로 분명
파일명이 존재할것이다. 자 그럼 여기서 미션이 또다시 정해졌다! 그 파일명이 뭔지를 찾는것이다!


생각을 정리한후 소아로 돌아와서 어셈코드들을 보자

PUSH   EBP
MOV    EBP, ESP
PUSH   DWORD PTR [EBP+08]
CALL   77E792C5              <ㅡ F8을 눌러서 코드들을 한줄 한줄 실행하다보면 여기서 어떤 부분으로 분기한다.
TEST   EAX, EAX
JNZ    77E6C123
OR     EAX, -01
JMP    77E6C13D

어떤 부분 분기한 부분에서 계속 F8을 10번 약간넘게 눌러보자...(이 부분은 코드를 안적는이유가 너무 많다 -_-;)
쭈욱 가다보면 다음과 같은 코드가 보일것이다.

PUSH   EDI
MOV    EDI, [ESP+0C]
MOV    EDX, [ESP+08]   <ㅡ 여기까지 실행되도록 F8을 누른다.

여기서 소아창에서 "d edi" 라고 입력해서 edi의 값이 뭔지 본다 그럼 왼편에 abex.l2c란 값이 나오는것이 보일것이다!
바로 이것이 파일명이다.! 일단 그 상태에서 X 눌러서 소아를 종료한후 abex.l2c란 파일을 만든다.

그런후 다시 프로그램을 실행시켜보자 경고창이 뜨고 OK 버튼 클릭하면 소아창이 뜰것이다.
우리는 일단 제대로 크랙을 했는지 확인할 필요가 있으므로 쓸데없이 뜨는 소아창을 유심히 볼필요는 없다.
여기선 그냥 x 눌러서 소아창을 종료시킨다.
이번엔

"The found file is not a valid keyfile!" 란 메시지가 나왔다.
즉 key-file는 찾았으나 잘못된 파일이라는것이다. 그럼 어떻게 해야 프로그램이 원하는 파일이 되는지 다시 찾아야한다.



-> 여기서 더 진행못해서 그냥 W32Dasm으로 크랙해버림 -_-;;

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 기타 공부하는 곳 -_-; [2] 뭉충닷컴 2002-09-22 10647
31 토비의 스프링 뭉충닷컴 2011-03-28 3920
30 웹사이트 최적화 기법 file [1] 뭉충닷컴 2009-08-10 7468
29 기타 아파치 튜닝 [1] 뭉충닷컴 2009-08-03 8044
28 기타 아파치 설정 httpd.conf 뭉충닷컴 2009-08-03 5374
27 Intercepting Filter 패턴 뭉충닷컴 2009-06-17 7076
26 Core J2EE Pattern file 뭉충닷컴 2009-06-16 6548
25 기타 [C++ Study] Timer 사용 [3] 뭉충닷컴 2004-06-29 8626
24 기타 [C++ Study] Click Count, Toggle, Move String 뭉충닷컴 2004-06-29 7364
23 기타 [C++ Study] WinMain와 WinProc 뭉충닷컴 2004-06-28 8733
22 기타 C# Pattern - Simple Pattern 뭉충닷컴 2004-03-17 6237
» 기타 1. abex3 크랙 설명서 뭉충닷컴 2004-03-12 7016
20 기타 어셈 강좌 1, 2장 정리 뭉충닷컴 2004-03-12 7712
19 기타 SoftICE 4.05 설치 & 간단한 사용법 뭉충닷컴 2004-03-12 9122
18 기타 5. Overloading, Overriding, Runtime Type and 객체지향 뭉충닷컴 2003-12-02 6489
17 기타 4. Flow 통제와 예외 처리(Exception Handling) 뭉충닷컴 2003-11-05 6009
16 기타 3. 연산자와 지정 뭉충닷컴 2003-11-03 6628
15 기타 2. 선언과 엑서스 제어 뭉충닷컴 2003-11-03 5918
14 기타 1. 자바언어의 기본 뭉충닷컴 2003-11-03 5804
13 기타 Parameter 을 asp 처럼 사용하게 만든 class 뭉충닷컴 2003-11-03 6680