
PowerShell 및 JavaScript 스크립트를 tree-sitter 기반 파싱으로 난독화하며, 은닉성, 크기, 리버싱 난이도를 위한 여러 구성 가능한 임포스터 프로필을 제공합니다.
Ditto는 tree-sitter-powershell 과 tree-sitter-javascript을 기반으로 하는 PowerShell 및 JavaScript 난독화 도구입니다.
ditto-cli [옵션]
| 짧은 옵션 | 긴 옵션 | 설명 |
|---|---|---|
| -h | --help | 도움말 정보를 표시하고 종료합니다. |
| -v | --version | 버전 정보를 표시하고 종료합니다. |
| -p | --path | 처리할 스크립트 파일의 경로입니다. |
| -i | --impostor | 난독화에 사용할 임포스터 프로필입니다 (대소문자 구분 없음). |
| -L | --list | 사용 가능한 모든 임포스터 프로필을 나열합니다. |
| -t | --time | 난독화 과정에 걸린 계산 시간을 표시합니다. |
| -d | --debug-level | 디버그 수준입니다. 옵션: off, error, warn, info, debug, trace (기본값: info). |
| -q | --quiet | 최종 난독화된 스크립트만 출력하고 다른 모든 로그를 억제합니다. |
각 언어에는 독특한 포켓몬 테마의 임포스터가 함께 제공됩니다. 임포스터는 여러 난독화 패스를 연결하는 명명된 레시피입니다. 각각은 서로 다른 기법 조합을 선호하므로, 동일한 스크립트를 두 임포스터로 난독화한 결과는 전혀 다르게 보입니다. 자신의 필요(은밀성, 크기, 가독성, 리버싱 난이도)에 맞는 절충안을 가진 임포스터를 선택하세요.
| 임포스터 | 기능 |
|---|---|
| Pikachu | 올라운더 마스코트. 리터럴을 정적 문자열로 변환하고, cmdlet 및 형식 멤버를 문자열로 재작성하며, 문자열을 Base64로 인코딩하고, 인라인 모듈로/hexlify로 정수를 분할하며, 변수 이름을 무작위로 변경합니다. 균형 잡힌 기본값입니다. |
| Bulbasaur | 입문용 스타터. 문자열/cmdlet/멤버 재작성, Base64 인코딩, 무작위 변수 이름, 그리고 역방향 모듈로 트릭을 통한 정수 재구성. 가볍고 비교적 읽을 수 있습니다. |
| Ivysaur | Bulbasaur의 진화형. 동일한 기본 레시피이지만 변수 이름이 PowerShell 동사(${Set-...}, ${Add-...}, ${Remove-...})로 지정되어 정상적인 코드와 섞이며, 인라인 hexlify 및 모듈로 역방향 정수가 추가됩니다. |
| Charizard | 강력한 타입. 정적 문자열, Base64, 무작위 인라인 모듈로/hexlify, 멤버-문자열, 모듈로 역방향 정수, 그리고 무작위 변수 이름과 형식을 결합한 공격적인 난독화입니다. |
| Alakazam | 수학 두뇌. 모든 부울과 정수를 산술 표현식으로 사전 계산하고, 호출 표현식을 분해하며, cmdlet, 멤버 및 형식을 문자열로 변환합니다. 밀도 높고 표현식 중심의 출력을 생성합니다. |
| Onix | 배열 전문가. 토큰을 상수 배열에 저장하고, 섞은 다음, foreach를 통해 hexlify하고, 런타임에 평가되는 XOR/add 산술을 통해 모든 정수를 재구성합니다. |
| Eevee | 이름 변경 전문가. 모든 함수, 매개변수 및 변수를 무작위로 이름을 바꾸고, cmdlet/멤버를 문자열로 재작성하며, 와일드카드 마스킹과 함께 UUID 스타일 및 동사 스타일 이름을 할당합니다. 식별자 난독화에 중점을 둡니다. |
| Ditto | 모방자 — 메타 임포스터. 전체 파일을 변환하는 대신, 소스에서 # ditto(<engine>) 주석을 스캔하여 명명된 엔진을 주석 바로 다음에 오는 문장에만 적용합니다. 이를 통해 단일 스크립트 내에서 임포스터를 혼합할 수 있습니다. Ditto를 사용한 선택적 난독화를 참조하세요. |
| 임포스터 | 기능 |
|---|---|
| Tinkatuff | 균형 잡힌 기본값. 멤버 접근을 첨자로 재작성하고, 때때로 표현식을 switch/if-else로 변환하며, 숫자를 수학 표현식으로 바꾸고, 문자열과 식별자를 인코딩/분할/이스케이프합니다. 적용 범위와 크기의 좋은 균형을 제공합니다. |
| Unown | 기호 암호. JSFuck 스타일 트릭으로 숫자, 문자열, 부울, 특수 값 및 기본 객체를 인코딩하고 $와 _만 사용하여 식별자 이름을 변경합니다. 출력은 거의 읽을 수 없습니다. |
| Metagross | "잠깐, 전부 숫자야?" 문자열을 fromCharCode로 변환하고, 모든 숫자를 표현식으로 재작성하며, 모든 식별자를 숫자 같은 이름으로 변경합니다. 출력은 거의 전부 숫자입니다. |
| Wailord | 고래. 거대한 출력을 생성합니다 (평균 확장 비율 ~4643배). 작은 스크립트에만 사용하세요 — 버블 이름 식별자, 문자열 분할, JSFuck 숫자 및 배열 변환을 쌓아 올립니다. |
| Clefable | 도박사. 모든 사용 가능한 패스 중에서 무작위로 선택하여 비교적 "작은" 출력을 생성하면서도 모든 종류의 보호 기능을 포함합니다. 리버서는 모든 가능한 패스를 처리해야 합니다. 패스가 무작위로 선택되고 서로 간섭할 수 있으므로 여러 번 실행해야 할 수도 있습니다. |
| Cofagrigus | 무덤. 이집트 상형 문자 이름으로 식별자 이름을 변경하고, 문자열을 인코딩하며, 숫자를 표현식으로 재작성하고, 문자열/숫자 "저주" 변환을 적용합니다. 으스스하고 밀도 높으며 읽기 어렵습니다. |
셸에서 직접 사용 가능한 모든 임포스터를 나열하세요:
ditto-cli --list
자신만의 임포스터를 추가하는 것을 망설이지 마세요! 그런 다음 원하는 것을 호출할 수 있습니다.
원본 PowerShell 스크립트:
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed', 'NonPublic,Static').SetValue($null, $true)
난독화 명령:
ditto-cli --path test.ps1 --impostor ivysaur
난독화된 출력: