Nuitka나 PyInstaller로 만든 실행 파일(.exe)이 윈도우 디펜더(Windows Defender)에서 바이러스로 오인

Nuitka나 PyInstaller로 만든 실행 파일(.exe)이 윈도우 디펜더(Windows Defender)에서 바이러스로 오인받는 것은 파이썬 개발자라면 누구나 한 번쯤 겪는 아주 흔한(그리고 짜증 나는) 일입니다. 😂

윈도우는 “서명되지 않은 + 처음 보는 + 압축된” 실행 파일을 잠재적 위협으로 간주하기 때문인데요. 이를 해결하기 위한 현실적인 방법들을 단계별로 정리해 드릴게요.


1. 가장 확실한 방법: 디지털 서명 (Code Signing)

윈도우가 파일을 신뢰하게 만드는 가장 정석적인 방법입니다.

  • 원인: 서명(Signature)이 없는 파일은 출처를 알 수 없으므로 차단됩니다.

  • 해결: 배포용이라면 유료 코드 사인 인증서를 구매해야 하지만, 개인용이나 내부용이라면 **Self-signed certificate**를 만들어 서명하거나, Nuitka 옵션에서 파일 정보를 최대한 상세히 적는 것이 도움이 됩니다.

2. Nuitka 빌드 옵션 최적화

단순히 파일을 합치는 것보다, 파일의 “정체”를 명확히 밝혀주는 옵션을 추가하면 탐지율이 낮아집니다.

Bash

python -m nuitka --onefile --windows-disable-console \
--standalone \
--enable-plugin=tk-inter \
--windows-icon-from-ico=.\myicon.ico \
--company-name="내회사이름" \
--product-name="프로그램이름" \
--file-version="1.0.0.0" \
--product-version="1.0.0.0" \
--file-description="네이버 카페 크롤러" \
.\final_crawler.py

Tip: --company-name이나 --file-description 같은 메타데이터가 들어 있으면 무명 파일보다 훨씬 덜 의심받습니다.

3. --onefile 대신 --standalone 사용 고려

  • --onefile: 실행 시 임시 폴더에 파일을 풀어서 실행하는데, 이 동작이 악성코드의 동작 방식과 매우 유사해서 차단될 확률이 높습니다.

  • --standalone: 폴더 형태로 배포됩니다. 파일 크기는 커지지만 디펜더의 감시망을 더 잘 통과하는 경향이 있습니다.

4. 개발 환경에서의 즉각적인 해결책 (제외 설정)

개발 중에는 매번 빌드할 때마다 파일이 삭제되면 작업이 불가능합니다. 이럴 땐 폴더 자체를 검사 예외로 설정하세요.

  1. 윈도우 설정 > 업데이트 및 보안 > Windows 보안 > 바이러스 및 위협 방지.

  2. 설정 관리 클릭.

  3. 하단의 제외 추가 또는 제거 클릭.

  4. 제외 사항 추가 버튼을 누르고 프로젝트 폴더(G:\test5\naver_cafe_crawler)를 지정합니다.

    • 이제 해당 폴더 안에서 생성되는 .exe 파일은 디펜더가 건드리지 않습니다.

5. UPX 압축 사용 자제

Nuitka는 용량을 줄이기 위해 UPX 압축을 사용하기도 하는데, 많은 백신 프로그램이 UPX로 압축된 실행 파일을 “악성코드의 특징”으로 인식합니다. 만약 UPX를 쓰고 계신다면, --no-deployment-flag=self-execution 등을 확인하거나 UPX를 설치하지 않은 상태에서 빌드해 보세요.


요약하자면

  1. **메타데이터(--company-name 등)**를 최대한 상세히 넣으세요.

  2. 가능하면 --standalone 방식을 우선 테스트해 보세요.

  3. 배포 전까지는 디펜더 제외 폴더 설정을 활용하세요.

Similar Posts

답글 남기기