Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PowerShell-Obfuscation-Bible — PowerShell 스크립트를 수동으로 난독화하여 AV 탐지를 우회하기 위한 기법, 예제 및 약간의 이론을 모아 놓은 컬렉션으로, 교육 목적으로 작성되었습니다. 이 저장소의 내용은 온라인 자료 읽기와 실험실 및 침투 테스트에서의 시행착오 시도를 포함한 개인 연구의 결과입니다. | Kitploit
도구/GitHubGitHub/t3l3machus/powershell-obfuscation-bible
IDS/IPS EvasionPenetration TestingLearning & EducationRed TeamingCurated ResourcesPayload Development
GitHubt3l3machus/powershell-obfuscation-bible

PowerShell-Obfuscation-Bible

PowerShell 스크립트를 수동으로 난독화하여 AV 탐지를 우회하기 위한 기법, 예제 및 약간의 이론을 모아 놓은 컬렉션으로, 교육 목적으로 작성되었습니다. 이 저장소의 내용은 온라인 자료 읽기와 실험실 및 침투 테스트에서의 시행착오 시도를 포함한 개인 연구의 결과입니다.

저장소 보기
1.2k139172년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PowerShell 난독화 바이블

Python License

서명 기반 탐지를 우회하기 위해 PowerShell 스크립트를 수동으로 난독화하는 기법, 예제, 그리고 약간의 이론을 모아 둔 자료로, 교육 목적으로 작성되었습니다. 이 저장소의 내용은 개인 연구의 결과물이며, 온라인 자료 읽기와 실험실 및 펜테스트에서의 시행착오 시도를 포함합니다. 모든 내용을 그대로 믿지는 마십시오.

YouTube 동영상 프레젠테이션: youtube.com/watch?v=tGFdmAh_lXE

⚠️ 고지 사항: 이 저장소에 설명된 기술과 개념을 테스트할 권한이 없는 시스템에 무단 접근하는 데 사용하는 것은 불법입니다. 귀하의 행동에 대한 책임은 귀하에게 있습니다. 악한 짓을 하지 마세요.

목차

  1. 엔트로피
  2. 탐지 트리거 식별
  3. 개체 이름 변경
  4. 부울 값 난독화
  5. Cmdlet 따옴표 중단
  6. Cmdlet 캐럿 중단
  7. Get-Command 기법
  8. 루프 대체
  9. 명령 대체
  10. 문자열 교란
  11. 쓸데없는 코드 추가
  12. 주석 추가 또는 제거
  13. 대소문자 무작위화
  14. 스크립트 구성 요소 재배치
  15. 스크립트를 한 줄씩 실행

엔트로피

과학 용어 entropy는 일반적으로 시스템의 무작위성 또는 무질서의 척도로 정의되며, AV 회피에서 중요합니다. 그 이유는 악성코드에는 분석을 어렵게 만들어 탐지를 피하기 위해 고도로 무작위화되고 암호화 및/또는 인코딩된(난독화된) 코드가 포함되는 경우가 많기 때문입니다. 다양한 방법 중 하나로, 안티바이러스 제품은 엔트로피 분석을 사용하여 잠재적으로 악성인 파일과 페이로드를 식별합니다.

코드를 난독화할 때 선택한 변경 사항이 만들어내는 엔트로피 변동을 염두에 두어야 하므로 이 개념을 이해하는 것이 중요합니다. 시그니처를 깨는 것은 쉽지만, 엔트로피 수준에 주의를 기울이지 않으면 정교한 AV/EDR이 이를 꿰뚫어 볼 것입니다.

명심해야 할 원칙: 엔트로피가 클수록 데이터가 난독화 또는 암호화되었을 가능성이 높고, 파일/페이로드가 악성일 확률도 높아집니다. 다행히도 엔트로피를 낮출 방법이 있습니다.

Claude E. Shannon은 1948년 논문 A Mathematical Theory of Communication에서 데이터 집합의 엔트로피를 측정하는 데 사용할 수 있는 공식을 소개했습니다. 다음은 개발하는 페이로드의 엔트로피를 측정하는 데 사용할 수 있는 Shannon Entropy의 간단한 Python 구현입니다:

#!/bin/python3
# Usage: python3 entropy.py <file>

import math, sys

def entropy(string):
    "Calculates the Shannon entropy of a UTF-8 encoded string"

    # decode the string as UTF-8
    unicode_string = string.decode('utf-8')

    # get probability of chars in string
    prob = [ float(unicode_string.count(c)) / len(unicode_string) for c in dict.fromkeys(list(unicode_string)) ]

    # calculate the entropy
    entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])

    return entropy


f = open(sys.argv[1], 'rb')
content = f.read()
f.close()

print(entropy(content))

또한 온라인 Shannon Entropy 계산기 또는 Microsoft의 Sigcheck.exe를 -a 옵션과 함께 사용할 수도 있습니다.

탐지 트리거 식별

탐지되지 않는 페이로드 변형을 만들기 위해 시행착오 난독화 테스트에 뛰어들기 전에, 스크립트에서 악성코드 탐지를 유발하는 부분을 식별하는 것이 성숙하고 세련된 방법입니다. 특히 C2 명령과 같은 짧은 스크립트에서는 사소한 변경만으로도 바로 탐지를 피할 수 있습니다.

이러한 트리거를 식별하는 훌륭한 도구는 AMSITrigger입니다. 다음은 악성 스크립트가 포함된 파일을 사용한 예입니다. 빨간색 영역은 난독화를 적용해야 하는 부분을 나타냅니다:

image

스크립트를 부분적으로 실행하여 트리거를 수동으로 식별할 수도 있습니다.

개체 이름 변경

스크립트를 난독화할 때 변수/클래스/함수 이름을 무작위 이름으로 바꾸는 것이 우선순위가 되어야 합니다. 그렇게 하면 다른 기법과 결합하여 탐지를 쉽게 우회할 수 있습니다. 그러나 개발하는 페이로드의 엔트로피를 염두에 두어야 합니다. 대부분의 AV(전부는 아니더라도)가 일반적으로 탐지하는 다음의 표준 리버스 셸 스크립트를 고려해 보십시오:

image

이제 다음 난독화된 버전을 고려해 보십시오:

image

이 버전에서는 모든 변수 이름이 32자 길이의 무작위 이름으로 대체되었습니다. 또한 (pwd).Path를 $(gl)로 교체했습니다. 이 페이로드의 Shannon entropy는 4.96입니다. 이 글을 작성하는 시점에 MS Defender와 다른 여러 제품에서 탐지되지 않습니다:

image

이제 다음 버전을 고려해 보십시오:

image

이 변형 역시 모든 변수 이름이 대체되었지만, 이번에는 x개의 'f' 문자로 구성된 이름을 사용하여 페이로드의 엔트로피가 크게 낮아졌습니다. 여기서도 (pwd).Path를 $(gl)로 교체했습니다. 다시 말하지만, 작성 시점에 MS Defender에서 탐지되지 않습니다. 이 페이로드의 Shannon entropy는 0.76입니다.

image

⚡ 두 변형 모두 일반적인 AV를 우회하지만, 두 번째 변형은 엔트로피가 더 낮아 EDR 및 기타 정교한 안티멀웨어 엔진에서 처리될 때 더 나은 기회를 가질 것입니다. ⚠️ 이 예시에서 두 번째 페이로드 변형의 더 나은 성능이 확실히 엔트로피 수준 때문이라고 말하는 것은 아닙니다(실제로 알 수 없습니다. 길이 때문이거나 둘 다일 수도 있고 누가 알겠습니까). 그러나 이것은 난독화를 할 때 염두에 두어야 할 중요한 측면이며, 이 예시는 그 개념을 강조하기 위한 것입니다.

아래 스크립트를 사용하여 PowerShell 스크립트의 변수 이름을 무작위화할 수 있습니다. ⚠️ 이 스크립트는 완벽하지 않습니다! 크고 복잡한 PowerShell 스크립트에 대해 실행하면 대체해서는 안 되는 항목을 대체하여 기능을 망가뜨릴 수 있습니다. 주의해서 사용하십시오.

#!/bin/python3
#
# This script is an example. It is not perfect and you should use it with caution.
# Source: https://github.com/t3l3machus/PowerShell-Obfuscation-Bible
# Usage: python3 randomize-variables.py <path/to/powershell/script>

import re
from sys import argv
from uuid import uuid4

def get_file_content(path):
	f = open(path, 'r')
	content = f.read()
	f.close()
	return content
	

def main():

	payload = get_file_content(argv[1])
	used_var_names = []

	# Identify variables definitions in script
	variable_definitions = re.findall('\$[a-zA-Z0-9_]*[\ ]{0,}=', payload)
	variable_definitions.sort(key=len)
	variable_definitions.reverse()

	# Replace variable names
	for var in variable_definitions:
		
		var = var.strip("\n \r\t=")

		while True:
			
			new_var_name = uuid4().hex
			
			if (new_var_name in used_var_names) or (re.search(new_var_name, payload)):
				continue
				
			else:
				used_var_names.append(new_var_name)
				break	
						
		payload = payload.replace(var, f'${new_var_name}')
	
	print(payload + '\n')

	
main()
도구 다운로드