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

  • LTX-2 전용 영상 생성 프롬프트 거실용 프롬프트

    첨부해주신 신축빌라 거실 사진을 바탕으로, LTX Video(LTX-2) 등 최신 영상 생성 AI에서 ‘장엄하고 프로페셔널한 드론 샷’을 구현할 수 있는 정교한 프롬프트를 작성해 드립니다. 거실 내부에서 시작해 창밖으로 빠져나가며 건물 전체와 주변 전경을 조망하는 ‘Push-through & Reveal’ 기법을 적용했습니다. 🎬 LTX-2 전용 영상 생성 프롬프트 [English Prompt] A cinematic drone shot starting from the center of…

  • 크로미움 기반의 오픈소스 git허브에 공개된 브라우저

    크로미움 기반의 오픈소스 git허브에 공개된 브라우저가 있나요? 네, GitHub에는 크로미움(Chromium)을 기반으로 한 다양한 오픈소스 브라우저 프로젝트가 활발하게 공개되어 있습니다. 단순히 크롬의 엔진만 사용하는 것이 아니라, 소스 코드 전체나 주요 인터페이스를 오픈소스로 제공하여 누구나 코드를 확인하고 기여할 수 있는 프로젝트들이 대표적입니다. 2026년 현재 기준으로 가장 인지도 높고 활발하게 관리되는 프로젝트들을 카테고리별로 정리해 드립니다. 1. 가장 대표적인…

  • 테니스화에 넣을 인솔 추천5가지

    테니스화는 급격한 방향 전환과 강한 제동(슬라이딩) 그리고 점프 후 착지 등 발에 하중이 가해지는 신발입니다. 따라서 일반 러닝용보다는 측면 지지력(Lateral Support)과 한 아치 서포트가 있는 을 선택하는 것이 중요합니다. 조코비치처럼 맞춤형은 아니지만 동호인들이 선호하고 성능이 검증된 5가지 인솔을 해 드립니다.   1. 큐렉스 에이스프로 (Currex AcePro) “테니스 전용으로 설계된 베스트셀러” 특징: 러닝용으로 유명한 큐렉스에서 라켓…

  • 서브도메인+우분투+Asus공유기+ssl연결 하는 방법

    서브도메인+우분투+Asus공유기+ssl연결 하는 방법 아수스(Asus) 공유기 환경에서 우분투 홈 서버를 운영 중이시군요. 외부에서 접속 가능한 **서브 도메인(예: blog.mydomain.com)**을 만들고 **SSL(HTTPS)**까지 적용하는 전체 과정을 6단계로 정리해 드립니다. 핵심 흐름은 [도메인 업체 설정] → [공유기 설정(DDNS/포트포워딩)] → [우분투 서버 설정] → [SSL 발급] 입니다. 1단계: Asus 공유기 DDNS 설정 (유동 IP 고정) 가정용 인터넷은 IP가 수시로 바뀝니다. 이를…

  • 우분투 서버 Fail2Ban 설치

    우분투 서버 Fail2Ban 설치 Fail2Ban 설치 (강력 추천) 로그를 실시간으로 감시하다가, 이상한 요청(404 반복 등)을 보내는 IP를 자동으로 일정 시간 동안 차단해주는 아주 고마운 도구입니다. Bash sudo apt update sudo apt install fail2ban -y 설치만 해두어도 기본적으로 SSH 무단 침입 시도를 매우 효과적으로 막아줍니다. ③ 아파치 Timeout 설정 최적화 봇들이 연결을 너무 오래 붙잡지 못하도록…

  • npm run dev 실행할때 port지정하는 방법

    npm run dev 실행할때 port지정하는 방법 npm run dev를 실행할 때 포트를 변경하는 방법은 사용 중인 **프레임워크(Vite, Next.js, React 등)**에 따라 조금씩 다릅니다. 상황에 맞는 가장 편한 방법을 선택해 보세요. 1. 명령어 뒤에 직접 입력하기 (일회성)가장 빠르고 간편한 방법입니다. 명령어 뒤에 –를 붙여서 옵션을 전달합니다. Vite (비트): Bashnpm run dev — –port 8080Next.js: Bashnpm run…

답글 남기기