소프트웨어 크래킹

소프트웨어 크래킹()은 소프트웨어를 수정하여 소프트웨어를 크랙하는 사람이 원하지 않는 기능들, 보통은 수정 방식(복사 보호, 소프트웨어 조작 보호)을 비활성화하거나 제거하는 일을 말하며, 여기에는 시험/데모 버전, 일련 번호, 하드웨어 키, 날짜 검사, CD 검사 및 애드웨어, 내그웨어 따위의 성가신 것들을 포함한다.

크랙(crack)은 소프트웨어 크래킹을 달성하는 수단을 가리킨다. 예를 들면, 도난당한 일련번호 또는 크래킹을 수행하는 툴이 있다.  툴들 중 몇몇은 키젠, 패치, 로더 라고 불린다. 키젠은 당신의 이름을 갖고 타당한 라이센스를 생성하는 능력을 제공하는 제품 라이센스 생성기이다. 패치는 기계어나 다른 프로그램을 수정하는 작은 컴퓨터 프로그램이다. 이것은 크래커가 큰 실행 파일을 포함하지 않고 바뀐 작은 부분만 배포할 수 있다는 장점이 있다. 로더는 프로그램의 스타트업 흐름을 수정하며, 보호를 제거하고 피해간다. 로더의 잘 알려진 예시로는 게임에서의 치트를 위한 트레이너가 있다.

크랙된 복사본을 배포하는 것은 대부분의 국가에서 불법이다. 소프트웨어 크래킹에 대한 소송들도 진행 중이다. 어떤 상황에서는 크랙된 소프트웨어를 사용하는 것이 합법일 수도 있다.

방식 
소프트웨어를 크랙하는 가장 흔한 방식으로, 프로그램에서 중요한 특정 분기를 유발하거나 방지하기 위한 애플리케이션 바이너리의 수정이 있다. 이것은 디버거를 이용하여 컴파일된 프로그램을 리버스 엔지니어링 함으로써 가능해진다. 크래커는 소프트웨어를 보호하는 중요한 메소드를 포함한 서브루틴에 도달할 때까지 계속한다. 그 후 바이너리는 디버거나 헥사 편집기 등을 통해 중요한 분기 명령 코드를 보수나 NOP 명령 코드로 변경하여 특정한 서브루틴이 실행되거나 건너뛰게 한다. 대부분의 소프트웨어 크랙은 이 방식을 변경한 것이다. 사유 소프트웨어 개발자들은 지속적으로 코드 난독화, 암호화, 자체 수정 코드 등의 기법을 통해 이러한 수정을 매우 어렵게 만든다. 심지어 이런 방식을 사용하면서도 개발자들은 소프트웨어 크래킹과의 싸움에서 힘겨워 한다. 이것은 프로들에게 크랙된 EXE나 인스톨러를 간단히 공중에 배포하는 점이 쉽고, 일반 사용자들은 직접 크랙할 필요가 없어지기 때문이다.

이 기법의 특별한 예는 시간이 제한된 애플리케이션의 만기 시간을 제거하는 것이다. 이러한 크랙들은 보통 프로그램 실행 파일과 애플리케이션에 링크된 dll 파일을 바꾸는 프로그램이다. 비슷한 크랙들은 하드웨어 동글을 필요로하는 소프트웨어에도 가능하다. 회사는 그들이 합법적으로 구입하였지만 특정한 하드웨어에만 라이센스 된 프로그램의 복사 방지를 깰 수 있다. 그럼으로써 하드웨어 실패로 인한 다운타임에 대한 리스크가 사라질 수 있다.

다른 경우로, 원본 소스 코드에 대한 접근을 목적으로 프로그램을 역컴파일하는 것도 가능하다. 이것은 종종 스크립트 언어와 JIT 모음을 사용하는 언어에서 가능하다. 예를 들면 자바 바이트코드는 프로그램이 플랫폼에 의존적인 기계어로 컴파일되기 전의 중간 언어로서 사용된다.

시큐롬, 세이프디스크 또는 스타포스 같은 보호들을 리버싱하는 것은 크래커들에게 보호를 공부하고 보호된 코드의 결합을 찾는데 훨씬 많은 시간을 투자하게 만든다.

인터넷에는 인기 많은 게임이나 애플리케이션을 위한 크랙들이 수많은 사이트들에서 다운받을 수 있게 존재한다. 비록 이러한 크랙들이 합법적인 소프트웨어 구매자들에게 사용되지만, 불법 다운로드를 통해 소프트웨어를 얻은 사람들에 의해서도 사용된다.

각주 

해커 문화
저작권 침해
와레즈