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

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

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

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

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