본문 바로가기
PC & Windows/TIP

batch 파일을 exe파일로 변환

by aegypius 2021. 1. 3.
728x90
반응형

Batch file compile


  6년전에 배치파일로 만든 스크립트가 있다. 총 1200줄 안팎이었던 이 스크립트는 만든 후에도 계속 고객(?)들이 원하는 기능을 추가하면서 버그를 찾고 수정하는 등의 작업을 거쳐서 완성도를 높여 나갔다. 윈도우 xp부터 7, 8, 8.1을 거쳐 윈도우 10까지 스스로 감지하여 환경에 맞춰서 스스로 작동하게 만들다보니 조금 덩치가 커지긴 했다. 현재 1500줄 정도..

  무엇보다도 이 스크립트는 내가 지정한 날짜 범위 내에서만 실행이 된다. 소위 말하는 날짜제한을 걸어둔 것이다. 날짜 제한에 대한 간략한 정리는 아래와 같다.

  1. 스크립트 내부에 시작일과 종료일을 미리 설정한다.
  2. 실행되면 스크립트의 환경을 따로 저장하는 설정파일(로그파일)을 스스로 생성한다.
   : 로그파일에도 프로그램의 시작일, 종료일, 최종실행일, 실행횟수 등을 암호화하여 기록한다.
  3. 컴퓨터의 날짜가 종료일 보다 크다면 실행을 정지한다. (사용기간 만료)
  4. 프로그램의 시작일이 현재 날짜보다 크다면 실행 정지한다. (날짜변경?)
  5. 프로그램의 최종 실행일이 오늘날짜보다 크다면 실행 정지한다.(날짜변경?)
  6. 컴퓨터의 부팅한 날짜가 오늘날짜보다 크다면 실행 정지한다. (날짜변경?)
  7. 로그파일의 생성날짜(=실행된 날짜)와 오늘 날짜가 동일하지 않다면 실행 정지한다.

  대략 이런식인데 모든 날짜는 16진수로 변환하여 특정 값으로 xor 연산 후 저장하는 지극히 단순한 방법이다. -_-; 이는 로그 파일을 열어봤을 때 직관적으로 '이 부분이 날짜구나~'라고 알아채지 못할 정도면 충분했기 때문이다. 이 외에도 스크립트 내부에서도 현재의 날짜를 체크하여 계속 실행이 되거나 중간에 멈출지 판단하는 부분이 세 곳이나 된다.

  이 정도면 대충(?) 날짜제한은 확실하다는 판단에 배포하였는데...아직까지도 날짜 제한이 깨지지는 않은 듯 하다. 마음 같아서는 스크립트의 모든 주석문을 없애고 소스를 배포해도 날짜제한 부분을 수정하기 어렵긴 할 것 같다. -_-;

  배치파일을 exe로 변환하여 배포하는 주된 이유는 소스코드의 유출을 방지하기 위함일 것이다. 검색해보면 몇 가지가 눈에 띄지만 처음부터 줄 곧 'Bat To Exe Converter' 를 사용하고 있다. 처음 시작버전은 2.X 로 기억하는데 윈도우 10에서도 완벽하게 작동하는 버전이 3.0.10이다. 현재는 이 버전만 사용하고 있으며 그 이후의 버전에 대해서는 모른다. 지금 검색해보니 3.2 버전이 보이는데...나는 계속 3.0.10을 사용할 것 같다.

  컴파일된 exe파일에 원하는 아이콘을 넣을 수 있으며, 32비트 혹은 64비트 실행파일로 만들 수 있다. 무엇보다도 실행했을 때에 관리자 권한으로 실행되게 끔 컴파일이 가능하다는 것이 매력적이다.

  또한 UPX compression 옵션이 있는데, 이는 오래전 도스시절에 실행형 압축파일을 떠올리게 한다. 나는 잘 모르겠다. 이 기능이 컴파일된 실행 파일의 용량을 줄이기 위함인지 아니면 크랙을 막기위한 방패인지... (실행파일이건 데이터건 간에 압축알고리즘을 사용하여 사이즈를 줄이는 것 자체가 -물론 압축 후에 오히려 부피가 커질 수도 있지만- 분명히 보안(?)에 도움이 되는 경우도 있다.)

  스크립트 파일은 어떠한 텍스트 에디터를 사용해도 무관하겠지만 제대로 컴파일하기 위해서는 ANSI 형식으로 저장해야 컴파일 할 때 오류가 생기지 않는다. 

  프로그램을 실행했을 때 기본 첫 화면은 아래와 같다.

Bat To Exe Converter v3.0.10 실행화면

 내가 컴파일 할 때에 사용한 옵션은 아래와 같은데 처음 30줄은 스크립트에 대한 주석문이기에 가릴 수 밖에 없었다.

  컴퓨터의 하드디스크에 저장되지 않고 바로 실행되는 소규모 스크립트 코드이기에 실행횟수 제한이나 날짜 제한등은 스크립트 자체로 해결이 가능하다. 또한 컴파일된 실행 파일의 복사 방지(복제방지) 기능도 쉽게(?) 추가할 수 있을 것 같다. 특정 usb 메모리에서만 실행되게 끔...할 수 있지 않을까? USB 메모리의 고유 UUID나 Disk Signature를 활용해서....

  Disk Signature를 이용하는 방법은 깨질 위험이 높긴 하지만....어차피 날짜 제한이 있기에...깨지더라도.....ㅎㅎ 아주 오래전 sw 복제 방지장치인 T-LOCK 류를 개발한 적이 있다. 그 때의 자료가 남아 있다면 깔끔하게 정리해서 글을 써봐야겠다.

728x90
반응형

댓글