HACKING



크게 작게 인쇄

쉐어웨어의 변형방지

쉐어웨어 제작자들은 위와 같은 변형을 막기 위해 여러 가지 방법을 쓴다. 대부분 실행화일을 못 고치게 따로 변형시키는 방법이다. 위와 같은 추적은 실행화일에 제대로된 기계어 코드가 들어 있어야 가능하기 때문이다. 그러한 제작자들의 몇가지 변형방법과 실례를 들어보겠다.


보통 변형

이 방법은 제작자가 직접 프로그램의 실행 코드를 변형시키는 방법으로, 많이 쓰이지는 않는 방법이다. 이 방법을 사용한 대표적인 프로그램에는 PCXDUMP 가 있다. 이 프로그램은 프로그램 본 코드에 전부 1을 더하여 저장을 해 놓았다. 즉 5인 경우는 6으로, 0인 경우는 1로, 255인 경우는 0으로... 그리고 처음 실행되는 부분에 그 부분에서 다시 1을 빼어 실행하는 루틴을 붙여 놓았다. 그렇게 때문에 이런 프로그램의 경우 디스어셈블을 할 때 전혀 엉뚱한 결과가 나오게 되는 것이다.

PCXDUMP의 경우는 간단한 경우라서 실행화일을 보다가 "QDYEVNQ"라는 낱말을 보고 혹은 그 외에 알 수 없는 "Uijt!qsphsbn!jt!tibsfxbsf"등의 영문의 섞인 규칙적인 내용을 보고 대충 짐작할 수 가 있다. 앞의 경우는 "PCXDUMP"에 각각 1을 더한 경우이고 뒤의 것은 "This program is shareware"라는 문장에 1을 더한 경우이다. 보통 이런 식으로 변형이 된 부분은 위 와 같이 내용이 규칙적일 수 있는 데이타 부분을 가지고 추정을 할 수 있다. 대부분의 실행화일은 데이타 부분이 화일 뒷쪽에 있으므로 병형된 코드의 뒷쪽을 유심히 보면 이 변형공식을 추정해 낼 수 있다.

이를 변형하는 방법 중 가장 많이 쓰이는 방법이 비트 연산 중 하나인 XOR 연산을 쓰는 것이다. A를 B로 XOR한 값 C는 A와 별로 관계가 없어 보이지만 C를 B로 다시 XOR하면 A가 나오기 때문에 가장 많이 쓰이게 되는 방법이다. 이럴 때는 뒷부분의 문자열 데이타가 있을 만한 부분에서 " ", 즉 주기적으로 나오는 공백을 찾아서 역으로 원래 코드인 32와 XOR을 해보면 키가 나오게 된다.


실행 압축

이 방법이 가장 많이 쓰이는 것으로 실행 화일을 압축하여 전혀 다른 코드로 만들어 버리는 방식이다. LZEXE나 PKLITE와 같은 유틸리티들은 EXE 등을 압축할 수 있는데, 이런 유틸리티로 자신의 실행화일을 압축시켜 놓으면 전혀 엉뚱한 코드가 되고 역으로 풀기가 굉장히 난해하여진다. 그러나 UNLZEXE나 PKLITE -x로 화일을 다시 풀 수 있기 때문에 제작자는 이렇게 압축되어진 화일의 헤더 중 고치더라도 별 손상이 없는 부분 을 고쳐서 UNLZEXE나 PKLITE 가 압축되어진 화일로 인식하지 못하게 한다.

이러한 방법은 쉐어웨어 프로그램 등에서 많이 찾아 볼 수 있다. PKLITE의 경우는 등록버젼인 경우 -e옵션으로 풀리지 않게 압축하는 경우도 있다. 이런 경우에 해결책은 헤더를 변경시킨 경우 다시 그 유틸리티가 인식을 할 수 있게 헤더부분을 되돌려 주는 방법 또는 PKLITE -e로 압축한 경우는 그것을 풀어줄 수 있는 dislite라는 유틸리티 등을 사용하면 된다. 정 안될 경우 코드 트레이서 등으로 해당
프로그램의 압축을 풀어 로딩하는 곳까지 추적한 후에 로딩된 프로그램을 저장하는 방식을 생각해 볼 수 있으나, 그리 쉽지는 않은 방법이다.


어떻게 막을 수 있나
제작자의 입장에서 어떻게 막을 수 있나를 생각해 보면, 이러한 자신의 프로그램의 변형을 방지할 수 있는 방법은 상당히 많으나 끝까지 막기는 상당히 어렵다고 볼 수 있다. 즉 웬만한 조치에도 성능이 좋은 코드 트레이서 등은 조치를 취하는 과정마저도 해커들에게 보여지기 때문에 완벽히 막는것은 정말 어렵다고 할 수밖에 없다. 보통 디스어셈블링을 피하기 위해서 위와 같은 방법을 쓰되, 코드 트레이서나 디버거 를 피하기 위해서 다른 방법을 쓸 수 있다. 그중 첫번째 방법은 Interrupt 3을 프로그램 안에서 고의로 일어나게 하는 것으로 대부분의 코드 트레이서나 디버거는 브레이크 포인터 등에 Interrupt 3을 쓰므로 추적시 충돌을 고의로 일으킬 수 있다.

또 다른 방법은 타이머 등을 체크하여 원래 실행해야 할 시간보다 실행과정동안 경과한 시간이 더 지났는가를 검사하는 방식이다. 추적을 막는 방법에는 그 외 여러가지가 있으나 그 막는 과정도 프로그램화 되므로 완벽히 막기란 불가능하다고도 볼 수 있다. 그러나 막는 루틴을 작성하는 것보다 해당 루틴을 해채하는 것이 몇배에서 수백배까지도 어려워 질 수 있으니 최선의 방법은 각종 방법을 섞어서 쓰는 것이라고 할 수 있겠다.

코멘트 0
해킹방어 | 전체게시물 119
안내

포인트안내닫기

  • 글읽기0
  • 글쓰기0
  • 댓글쓰기0
  • 다운로드0
해킹방어리스트
번호 제목 등록일 조회
119 텍스트 04-28 5560
118 텍스트 09-17 10486
117 텍스트 09-17 6847
116 텍스트
쉐어웨어의 변형방지
09-17 6746
115 텍스트 09-17 7347
114 텍스트 03-26 7876
113 텍스트 02-15 15938
112 텍스트 02-15 7073
111 텍스트 12-28 8580
110 텍스트 12-27 10982
109 텍스트 11-25 7384
108 텍스트 11-28 6639
107 텍스트 11-28 7704
106 텍스트 10-29 9917
105 텍스트 10-14 6622
104 텍스트 09-18 7899
103 텍스트 03-05 13839
102 텍스트 09-25 8561
101 텍스트 09-25 48470
100 텍스트 09-25 15687
 맨앞이전123456