귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
공지사항
투표게시판
델마당소개
개선 건의함
 광고문의 :
강좌, 팁, 정보 강좌, 팁, 정보 입니다.
글내용 - 강좌, 팁, 정보
 Re: [강좌] 막무가내 리버싱 막기 - 2편 : 크레킹은 어떻게 이뤄지나
미루나무
(손님)
2003-07-04 오후 1:19:23
카테고리:팁
2044회 조회



등록된 파일이 없습니다.
홍성진 님이 올리신 글-----------------------
>
> 막무가내 리버싱 막기 - 2편 : 크레킹은 어떻게 이뤄지나
>
> 아, 요즘 미치겠 습니다. 시험기간인데다.. 정보 올림피아드 준비에 바뻐서 말이죠.. 흑..
>
> 바로 본론으로 들어가겠 습니다. :)
>
>
> 크레커들은 보통 뚫어볼 프로그램을 고를때 아무거나 고르는건 아니고,
>
> 고수들이 공부될만한 프로그램을 추천했을때 그걸 쓰거나, 아니면
>
> 자신의 필요 욕구를 느끼는 프로그램을 주로 골라서 씁니다.
>
> 남이 요청해서 해보는 경우도 더러 있죠.
>
> 우리가 정성스레 만든 프로그램을 크렉하는 패치 프로그램을 공개
>
> 해서 사람들이 공짜라고 써버리는 경우, 우리는 피눈물을 흘리죠.
>
> 알집 같은 경우도 개인 버전이 공짜인데도 불구하고 공공기관용
>
> 프로그램을 더러 크렉해서 사용하는 사용자도 많구요. - -;
>
> 크렉킹 강좌를 하는 곳도 많고, 정보를 찾기가 수월해져서 크레커들
>
> 도 점점 늘어나고, 우리같은 개발자는 점점 힘들어 지죠. - -;
>
> 이번편은 말그대로 크레킹은 어떤 순서로 이루어 지나를 알아보겠
>
> 습니다. 또한 그걸 막아보는 단순한 루틴을 작성 해보겠 습니다. :)
>
>
> 크레커들은 우리가 만든 프로그램을 어떻게 크렉킹 할까요?
>
> 혹, 모르시는 분들이 많을것 같아 설명을 드리겠 습니다.
>
> VC++ 이나 Delphi 나 VB(이건 좀 다름)같은 대부분의 컴파일러를 가지는
>
> 개발 프로그램들은 소스코드를 작성한후에 이를 exe 로 바꿀때
>
> 컴퓨터가 인식할수 있는 기계어로 변환해서 exe 를 만듭니다.
>
> 기계어는 이진수로 이루어진 복잡한 코드며, 인간이 이해하기는
>
> 힘이 듭니다. 하지만 기계어와 1:1 로 대응하는 언어가 있는데
>
> 이게 바로 어셈블리(Assembly) 입니다. 결국 exe 로 만들어도
>
> 어셈블리로 내부가 어떻게 작동하는지를 알아볼수 있게 되었습니다.
>
> (아니, 태초부터 그렇게 설계 되었습니다.)
>
> 그래서 크레커들은 어셈블리를 이해하기 쉽게 만드는 디버거나
>
> 디어셈블러를 사용해 우리 코드를 살피고 크렉 하는것 입니다.
>
> 이 내용이 잘 이해가 안가면 한번 다시 읽어보십시요.
>
> source -------------compiler---------------> exe
> pascal ------------------------------------- assembly (기계어)
>
> [이해를 돕기위한 그림]
>
>
> 보통 크렉킹이 어떻게 이루어 지냐.. 라고 하면 수없이 많은 방법이
>
> 나옵니다.
>
> 디버거로 디버깅을 해서 시리얼을 입력하는 란에서
>
> 브레이크 포인트 (델파이에서 코드에 중단점 설치하는거 랑 같습니다.,$s:LF>
> 다만 어셈블리 코드에 중단점을 설치하는게 다를뿐 입니다.. - -)
>
> 를 걸고 입력된 등록번호와 이름이나 특정 하드웨어 시리얼 번호로 생
>
> 성한 진짜 등록번호를 비교하는 루틴을 찾아내서 진짜 등록 번호를
>
> 입력하거나, 비교에서 같으면 등록되게 하는 코드 부분을 비교하던
>
> 말던 무조건 등록되게 하는 방법, 또하나는 진짜 등록 번호를
>
> 생성하는 코드를 뽑아내서 등록번호 생성기를 짜는둥 많습니다.
>
> 대표적인 예들을 정리하면..
>
> - 그냥 시리얼 번호만 알아내서 인터넷에 뿌린다.
> - 비교하는 부분을 바꾸어 무조건 등록되게 바꾼후, 그렇게 프로그램을
> 패치하는 프로그램을 인터넷에 배포한다.
> - 등록번호 생성 코드를 뽑아내서 직접 등록번호 생성기를 만들어
> 인터넷에 뿌린다. (고난이도 기술을 요하기에 많지는 않음)
>
> 이런 수없이 많은 방법들을 제쳐두고, 우리가 왜 허무하게 당하나..
>
> 를 생각해 봅시다.
>
> 우리가 Shareware 를 만들때 보통 유저가 이름과 등록번호를 입력하면
>
> 이름으로 적당한 등록번호를 생성하는 코드를 돌린후 그 등록번호와
>
> 유저가 입력한 등록번호를 대조해서 등록이 되게 만듭니다.
>
> 우리가 쉽게 당하는 것은 저 대조하는 코드와 등록되는 코드를
>
> 같은곳에 놓기 때문에 발생하며, 이름으로 등록번호를 생성시에
>
> 아예 완전힌 등록번호를 크레커에게 보여주기 때문 입니다.
>
> 즉 우리가 이런 점들을 해결 하기 위해서는..
>
> 1. 사용자가 등록 버튼을 클릭시 이름이나 무엇이든을 통해서 나오는
> 정식 등록번호를 바로 생성해서 사용자가 입력한 등록번호와 바로
> 대조하지 말것.
> - 이는 크레커가 정식 등록번호를 빼내는걸 막을수 있습니다.
> 2. 등록번호가 맞는지의 유무를 판단하는 코드를 크레커에게 들키지 말것.
> - 등록 버튼을 누르고 등록번호가 맞는지 바로 알려주는건 자살행위
> 3. 등록 번호 생성 루틴 자체를 다른 곳에 깊숙히 숨겨둘것.
> - 생성 루틴은 프로그램의 생명같이 지켜야할 코드입니다.
>
> 같은 방법들이 있습니다.
>
> 이것들을 형상화 한 예시를 들자면..
>
> 1. 등록 버튼을 누르면 사용자가 입력한 등록번호를 아무도 모르게
> 저장한후 프로그램을 재시작 할때 그것이 맞는지 확인.
> 2. 등록번호 생성 루틴을 여러 dll 에 나누어 넣고 압축을 한다.
> - exe 나 dll 을 UPX 나 ASPack 같은걸로 압축하면 코드가
> 보기가 힘들어 집니다. 물론, 다 푸는 방법이 있습니다. - -;
> 3. 인터넷 인증 방식을 사용한다.
> - 이는 스타크레프트 와 같이 베틀넷 사용시 체크를 합니다.
> 4. 정식 번호를 생성하지 말고, 사용자가 쓴 등록번호를 수학적 연산으로
> 특정 값이 나오도록 만든다. (주민등록 번호 생성 루틴을 참고)
>
> 아, 제가 도저히 시험기간이라.. 새벽 1시20분 입니다.
>
> 다음에 시험을 끝내고 잇도록 하겠습니다.
>
> 2편이 끝난게 아닙니다 ^^;;
>
> 다음에 2.5편을 기대해 주세요..
>
> 7월 3일 쯤에 꼭 올리겠 습니다.
>
> 그럼 이만.. ^^;;



음~! 괜찮은 내용이네여~! ^^
그렇게 하면 크랙이 좀 더 어려워지고 까다로워 지겠지만 반면에 크랙 하는 사람들도
그런 알고리즘을 공부를 하면서 크랙 기법을 연구하게 되겠죠~!
쫓고 쫒기는 싸움 아닌가염? ^_^!
다만 초보크래커들에게는 아주 힘들게 되겠죠~!
크래커 중에는 현전직 프로그래머들이 상당수 포진돼 있다는거 아시죠?
즉 프로그래머가 크래커이고 크래커가 프로그래머가 될수 있죠~!
물론 음지에서 살작 살짝 활동하겠지만....! ^^
전에 aspack 이 나왔을 당시 이 놈이 실행파일을 압축을 해서 코드리버싱을
막겠다고 버전도 올라가면서 줄줄이 나왔는데 첨에는 많이 헤맸을지 몰라도
나중에 보니 그것도 얼마 가지 않아 외국 리버스에게 깨졋더군여~!
aspack 으로 압축된 프로그램을 다시 원위치로 푸는 방법이 나왔고 aspack을 죽이는
프로그램까지 나왔죠~!
결국은 시간이 좀 지나면 크랙 방법이 어느 누군가에게선 해답이 나오게 되죠~!
다만 알고리즘이나 크랙 방어의 노력이 얼마나 오래 견딜수 있느냐겠죠? ^^
근데 리눅스용 프로그램은 어떨런지 모르겠네요~!
리눅스용 프로그램이 크랙됐거나 크랙한 내용들은 아직 보지도 듣지도 못햇는뎅~!! ^_^!
음~!