Security
백신 배포본 만들기 (pyinstaller)
이무쿤
2021. 12. 22. 11:14
반응형
pip install pyinstaller
배포 파일이 있는 곳에서
- pyinstaller [파일명].py
실행 완료 후 dist 폴더에 존재.
build 배치 파일 생성
- build.bat
pyinstaller [파일명].py
위 명령어를 저장
anti_virus.exe 실행 시 exit 관련 오류 발생한다면 sys.exit(0)으로 모듈 참조를 정확히 쓰면 됨.
모듈을 분리해서 import를 한 경우, exe 파일을 만들면서 모두 불러와서 한 파일에 내장함으로 같은 위치에 없어도 정상 동작함.
exe 에 내장된 모듈 외에 외부 모듈을 사용하는 방법

import imp 필요
try:
m = 'scan_mod' # 로딩할 모듈 명
f, filename, desc = imp.find_module(m, ['']) # 현재 폴더에서 모듈 찾음
module = imp.load_module(m, f, filename, desc)
cmd = 'ret, vname = module.ScanVirus(vdb, vsize, sdb, fname)' # 진단 함수 호출
exec(cmd) # 명령어 실행
except ImportError:
fname = sys.argv[1]
ret, vname = scan_mod.ScanVirus(vdb, vsize, sdb, fname)
try에서 같은 폴더 내 외부 모듈 로딩 시도하고, 실패 시 내장 모듈 사용
- build 하여 exe 파일 만든 후에도 모듈 수정 가능.
- 외부 모듈 로딩 안하면 내장 모듈 수정 시 새로 빌드 계속 해야됨.
- .py 파일 컴파일 하여 .pyc 파일로 사용하여도 정상 로드됨
- .py는 소스차원이라 분석하여 수정 위험성 있으므로 컴파일 후 byte code로 배포
python -m compileall scan_mod.py
파일이 있는 경로 하위 __pyache__에 생성되는데, 동적 로드에서 pyc를 쓰려면 지정한 모듈명과 이름이 같아야 한다.
- scan_mod.pyc (O)
- scan_mod.python39.pyc (X)
반응형