문제 현상

PyInstaller로 패키징 시 일부 빌드 파일이 백신에 의해 삭제되어 오류 발생.

28195 WARNING: Execution of 'write_manifest_to_executable' failed on attempt #1 / 20: error(5, 'LoadLibraryExW', '액세스가 거부되었습니다.'). Retrying in 0.05 second(s)...
28611 WARNING: Execution of 'write_manifest_to_executable' failed on attempt #2 / 20: error(5, 'LoadLibraryExW', '액세스가 거부되었습니다.'). Retrying in 0.06 second(s)...
Traceback (most recent call last):
...
OSError: [WinError 2] 지정된 파일을 찾을 수 없습니다.
...

백신 탐지 내역

  • 탐지명: Trojan/Win.Pyinstaller.R697276
  • 설명: PyInstaller로 제작된 일부 악성코드 사례가 신고되어 해당 방식으로 빌드된 파일을 백신이 자동 삭제함.

원인

  • PyInstaller의 bootloader가 외부에서 빌드되어 제공되므로, 보안 프로그램에서 악성코드로 오탐지 가능.
  • 백신이 빌드 중간 파일 또는 실행 파일을 삭제하면서 패키징 실패.

조치

PyInstaller를 직접 빌드하여 백신 탐지를 회피하고 패키징 성공.

1. Visual Studio Build Tools 설치

https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/

 

Microsoft C++ Build Tools - Visual Studio

 

visualstudio.microsoft.com

2. C++ Build Tools 구성요소 설치

필수 구성요소:

  • Windows SDK
  • MSVC v14.x 이상

3. pyinstaller 빌드 및 설치

py -m pip uninstall pyinstaller -y
git clone https://github.com/pyinstaller/pyinstaller.git
cd pyinstaller
cd bootloader
py waf all

cd ..
py -m pip install .

정리

외부에서 빌드된 PyInstaller 실행 파일은 보안 정책에 의해 차단될 수 있지만, 직접 빌드한 경우에는 동일한 내용이라도 차단되지 않는 특성을 활용하여 문제를 해결함.