Nuitka나 PyInstaller로 만든 실행 파일(.exe)이 윈도우 디펜더(Windows Defender)에서 바이러스로 오인
Nuitka나 PyInstaller로 만든 실행 파일(.exe)이 윈도우 디펜더(Windows Defender)에서 바이러스로 오인받는 것은 파이썬 개발자라면 누구나 한 번쯤 겪는 아주 흔한(그리고 짜증 나는) 일입니다. 😂
윈도우는 “서명되지 않은 + 처음 보는 + 압축된” 실행 파일을 잠재적 위협으로 간주하기 때문인데요. 이를 해결하기 위한 현실적인 방법들을 단계별로 정리해 드릴게요.
1. 가장 확실한 방법: 디지털 서명 (Code Signing)
윈도우가 파일을 신뢰하게 만드는 가장 정석적인 방법입니다.
-
원인: 서명(Signature)이 없는 파일은 출처를 알 수 없으므로 차단됩니다.
-
해결: 배포용이라면 유료 코드 사인 인증서를 구매해야 하지만, 개인용이나 내부용이라면 **
Self-signed certificate**를 만들어 서명하거나, Nuitka 옵션에서 파일 정보를 최대한 상세히 적는 것이 도움이 됩니다.
2. Nuitka 빌드 옵션 최적화
단순히 파일을 합치는 것보다, 파일의 “정체”를 명확히 밝혀주는 옵션을 추가하면 탐지율이 낮아집니다.
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. 개발 환경에서의 즉각적인 해결책 (제외 설정)
개발 중에는 매번 빌드할 때마다 파일이 삭제되면 작업이 불가능합니다. 이럴 땐 폴더 자체를 검사 예외로 설정하세요.
-
윈도우 설정 > 업데이트 및 보안 > Windows 보안 > 바이러스 및 위협 방지.
-
설정 관리 클릭.
-
하단의 제외 추가 또는 제거 클릭.
-
제외 사항 추가 버튼을 누르고 프로젝트 폴더(
G:\test5\naver_cafe_crawler)를 지정합니다.-
이제 해당 폴더 안에서 생성되는
.exe파일은 디펜더가 건드리지 않습니다.
-
5. UPX 압축 사용 자제
Nuitka는 용량을 줄이기 위해 UPX 압축을 사용하기도 하는데, 많은 백신 프로그램이 UPX로 압축된 실행 파일을 “악성코드의 특징”으로 인식합니다. 만약 UPX를 쓰고 계신다면, --no-deployment-flag=self-execution 등을 확인하거나 UPX를 설치하지 않은 상태에서 빌드해 보세요.
요약하자면
-
**메타데이터(
--company-name등)**를 최대한 상세히 넣으세요. -
가능하면
--standalone방식을 우선 테스트해 보세요. -
배포 전까지는 디펜더 제외 폴더 설정을 활용하세요.