All posts

IT/ETC

문제 현상

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 실행 파일은 보안 정책에 의해 차단될 수 있지만, 직접 빌드한 경우에는 동일한 내용이라도 차단되지 않는 특성을 활용하여 문제를 해결함.

문제

PyInstaller 패키징 시 특정 모듈을 찾을 수 없는 오류 발생

ModuleNotFoundError: No module named 'azure.devops.v7_0.core'

해결과정

로컬 환경 및 가상 환경 모두 해당 패키지는 설치되어 있었으며, 패키징을 하지 않을 경우에는 정상적으로 작동함.

해당 모듈을 직접 확인해본 결과 코드에서 사용하는 일부 모듈이 동적 임포트를 통해 로드되고 있었음.

PyInstaller는 정적으로 참조된 모듈만 포함하기 때문에 동적으로 로드되는 모듈은 패키징 과정에서 누락 되는 점 확인.

조치

필요한 동적 모듈을 확인하고 --hidden-import 옵션을 추가하여 오류를 해결.

pyinstaller --hidden-import=azure.devops.v7_0.core --hidden-import=azure.mgmt.resource ...

정리

  1. 패키징 과정에서 필요한 모듈은 명시적으로 표시.
  2. 동적으로 로드되는 모듈은 --hidden-import 옵션을 이용.
  3. --hidden-import 옵션을 사용할 경우, 불필요한 모듈이 포함되지 않도록 주의.
> py -m pip install [packages name]
> py -m pip install boto3

 

모든 메일 내용이 처음에만 잠깐 보이고 이후에는 안보이는 오류가 발생.

 

TNEF를 비활성화하여 해결.

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Preferences
Name: DisableTNEF
Type: DWORD
Value: 1

 

AWS 용어


EIP -> Static Public IP

 그냥 Public IP 사용할 경우 IP값이 변경 됨. 고정 IP가 필요한 경우 사용.

 EIP를 할당만 받고 사용하지 않을 경우 추가 요금 발생.

VPC -> Network

 기존 Switch, Router, FW 등의 네트워크 관련 서비스.

Security Group -> firewall, security

 보안그룹. 기존의 ACL, firewall-cmd 등.

IAM -> Permission

 권한 설정.

 

ROUTE53 -> DNS

 

ELB -> Load Balancer

 기존 L4, 부하 분산 장비.

Cloud Front -> CDN

 클라우드 앞단에서 서비스한다고 하여 Cloud Front라고 붙여짐.

Cloud Watch -> Monitoring

 기본 5분 간격으로 모니터링. 추가 요금 지불하여 1분 간격 모니터링 가능.

 

AMI -> OS Image

 기존 ISO 개념.

EC2 -> Server

 EC2의 각 인스턴스가 기존 하나의 서버.

EBS -> Disk

 기존 로컬 디스크 개념

S3 -> Storage

 기본으로 제공되는 용량 무제한 스토리지

 Glacier -> 장기 보관용 스토리지

RDS -> DB

 Paas 형태의 데이터베이스.

 

 

Global Services -> region에 영향 받지 않음.

 IAM, Route 53, CDN


EIP, Elastic IP addresses

VPC, Virtual Private Cloud

IAM, Identity and Access Management

ELB, Elastic Load Balancing

AMI, Amazon Machine Images

EC2, Elastic Compute Cloud

EBS, Elastic Block Store

S3, Simple Cloud Storage

RDS, Relational Database Service