[Python] pyinstaller 로 만든 exe파일 Anti-Virus 오탐 문제 해결 Develop Tip

파이썬으로 만든 코드를 EXE 로 만드는데 pyinstaller 를 애용합니다.
(물론 동일한 것을 py2exe로 변환하면 다른 결과가 나오기도 합니다)

처음에는 코드 사이닝 문제인가 싶기도 했지만, 그것은 아니었고
virustotal.com 에 exe 파일을 올려 검사를 해 보았습니다.

그 결과 다음의 바이러스토탈 사이트에서,

총 68개의 바이러스 검출 엔진 중 10개에서 바이러스로 탐지를 했다는 결과입니다.

이것을 어떻게 줄일까 찾아보았는데, 
위의 사이트에 잘 설명된 해결책이 있었습니다.
제가 위의 사이트를 참고하되 나름 시행착오를 공유해 봅니다.


1) C++ 컴파일러 설치

다음 사이트에서 Community 2019 무료 버전의 C/C++ 개발 환경을 다운받아 설치합니다.


2) 새로운 VirtualEnv 구축

처음에는 Python 3.6 에서 테스트 했으나 pyinstaller 를 재구축할 때 setuptools 모듈이 너무 오래되어 오류가 발생했습니다.
3.7 이후 버전을 이용해야 합니다.

파이썬 3.7 버전으로 다음과 같이 pyinst 라는 가상환경을 만들었습니다.

C:work> C:\Python37-32\python -m venv pyinst
C:work> pyinst\Scripts\Activate
(pyinst) C:work>

그 이후에는 이 가상환경에서 계속 작업합니다.


3) pyinstaller 재 구축

다음 사이트에서 최신의 pyinstaller 소스를 다운받아 C:\work 에 풀었습니다.


그 다음 해당 소스의 bootloader 라는 폴더로 이동하여,

python ./waf all --target-arch=64bit

명령을 CMD 에서 실행했습니다.

위와 같이 종료되면 잘 된 겁니다.
미리 검파일된 bootloader를 이용하면 아마도 많은 바이러스 탐지 엔진에서 무조건 악성이라고 
판단하는 것 같습니다.

이제는 해당 부트로더를 이용한 pyinstaller 모듈을 설치합니다. 
실제 실행해 보니 wheel 모듈을 필요로 하므로 

pip install wheel 
명령을 내린 다음,

pyinstaller 해제한 폴더에서
python setup.py install
명령으로 pyinstaller를 설치합니다.

설치가 잘 되었는지,

pip list
로 확인해 보면, 위와 같이 pyinstaller 가 잘 설치된 것을 확인할 수 있었습니다.


4) EXE 빌드


이제는 원래 build 하듯이 필요 모듈을 설치하고,
pyinstaller 로 exe를 만들면 됩니다.


마지막으로 다시 virustotal 로 확인을 해 보았더니,

이제는 66개 중 3개만 탐지가 되었습니다. 혹시라도 이 EXE가 실행되는 환경에서
해당 ANTI 바이러스를 실행시키는 고객이 있다면 이 EXE를 보내 탐지하지 말아달라고
부탁을 해야 되겠네요.


어느 분께는 도움이 되셨기를 ..

덧글

댓글 입력 영역

구글애드텍스트