
FileInsight-plugins: McAfee FileInsight 16진수 편집기의 디코딩 도구 상자 – 악성코드 분석용
FileInsight-plugins는 McAfee FileInsight 16진수 편집기를 위한 대규모 플러그인 모음입니다.
복호화, 압축 해제, XOR 처리된 텍스트 문자열 검색, YARA 규칙 스캔, 코드 에뮬레이션, 디스어셈블리 등 다양한 기능을 추가합니다.
악성코드 분석에서 다양한 디코딩 작업(예: 악성 문서 파일에서 악성 실행 파일 및 미끼 문서 추출)에 유용합니다.
FileInsight 설치 프로그램을 찾고 계신다면 다음에서 다운로드할 수 있습니다. https://downloadcenter.trellix.com/products/mcafee-avert/fileinsight.msi.
스크린샷
"AES 복호화" 플러그인의 대화상자

"YARA 스캔" 플러그인의 스캔 결과

"파일 구조 분석" 플러그인으로 분석한 ELF 실행 파일의 데이터 구조

"코드 에뮬레이션" 플러그인으로 에뮬레이션한 ARM64 Linux 셸코드의 추적 결과

"디스어셈블" 플러그인으로 디스어셈블한 x86 Linux 셸코드의 출력

"비트맵 보기" 플러그인으로 시각화한 Windows 실행 파일의 비트맵 표현

"바이트 히스토그램" 플러그인이 표시한 Excel 파일의 바이트 히스토그램

"엔트로피 그래프" 플러그인이 표시한 Windows 실행 파일의 엔트로피 그래프

발표 자료
Black Hat USA 2021 Arsenal
CODE BLUE 2019 Bluebox
사용 사례
설치 방법
다음 명령을 실행하십시오. FileInsight-plugins의 최신 릴리스 버전과 FileInsight 및 Python 3.12.x (x64)를 포함한 필수 구성 요소가 설치됩니다.
powershell -exec bypass -command "IEX((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))"
프록시 서버를 사용하는 경우(예: IP 주소: 10.0.0.1, 포트: 8080), 다음 명령을 실행하십시오.
curl -x http://10.0.0.1:8080 -Lo install.ps1 https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1
powershell -exec bypass .\install.ps1
수동 설치가 필요한 Python 모듈이 몇 가지 있습니다. 플러그인에 표시된 설치 지침을 따르십시오.
사용 방법
"Plugins" 탭에서 "Operations"를 클릭한 다음 플러그인을 선택하십시오.
오른쪽 클릭 메뉴에서도 플러그인을 사용할 수 있습니다.

일부 플러그인은 사용 시점에 추가 설정 대화상자를 표시합니다.

업데이트 방법
FileInsight-plugins를 최신 릴리스 버전으로 업데이트하려면
플러그인 메뉴에서 "업데이트 확인"을 클릭하십시오. 새 버전이 있으면 설치
PowerShell 스크립트(https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1)
가 실행됩니다. 기존 파일은 덮어쓰여집니다.

다음 명령으로도 업데이트할 수 있습니다("업데이트 확인" 기능이
이 명령을 실행합니다).
powershell -exec bypass -command "& ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))) -update"
프록시 서버를 사용하는 경우(예: IP 주소: 10.0.0.1, 포트: 8080), 다음 명령을 실행하십시오.
curl -x http://10.0.0.1:8080 -Lo install.ps1 https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1
powershell -exec bypass .\install.ps1 -update
FileInsight-plugins를 최신 스냅샷으로 업데이트하려면
"-snapshot" 옵션을 추가하십시오.
powershell -exec bypass -command "& ([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/nmantani/FileInsight-plugins/master/install.ps1'))) -update -snapshot"
사용자 지정
"Send to (CLI)" 플러그인 및 "Send to (GUI)" 플러그인의 경우 즐겨 사용하는 프로그램으로 파일을 열 수 있습니다.
플러그인 메뉴에서 "Customize menu"를 클릭하십시오.

기본 텍스트 편집기에서 "plugins\Operations\Misc\send_to_cli.json"("Send to (CLI)" 플러그인용) 또는 "plugins\Operations\Misc\send_to.json"("Send to (GUI)" 플러그인용)이 열립니다. 편집하고 저장하십시오.

사용자 지정 내용이 메뉴 항목에 반영됩니다.

플러그인 목록 (155개 플러그인)
기본 작업
- 새 파일에 복사
선택한 영역(선택하지 않으면 전체 파일)을 새 파일에 복사
- 파일 탭 전환
목록 상자로 파일 탭 전환
- 책갈피
선택한 영역에 지정된 주석과 색상으로 책갈피 설정
- 클립보드로 16진수 잘라내기
선택한 영역의 2진 데이터를 16진수 텍스트로 클립보드에 잘라내기
- 클립보드로 2진 복사
선택한 영역의 2진 데이터를 16진수 텍스트로 클립보드에 복사
- 클립보드에서 2진 붙여넣기
클립보드에서 2진 데이터(16진수 텍스트에서 변환)를 붙여넣기
- 앞부분 삭제
현재 커서 위치 앞의 모든 영역 삭제
- 뒷부분 삭제
현재 커서 위치 뒤의 모든 영역 삭제
- 채우기
선택한 영역을 지정된 16진수 패턴으로 채우기
- 비트 반전
선택한 영역의 비트를 반전
- 순서 반전
선택한 영역의 순서를 반전
- 엔디언 변경
선택한 영역의 엔디언 변경
- 니블 교환
선택한 영역의 각 니블 쌍을 교환
- 2바이트 교환
선택한 영역의 각 바이트 쌍을 교환
- 대문자로 변환
선택한 영역의 텍스트를 대문자로 변환
- 소문자로 변환
선택한 영역의 텍스트를 소문자로 변환
- 대소문자 교환
선택한 영역의 대소문자 교환
압축 작업
압축
- aPLib
aPLib 압축 라이브러리로 선택한 영역 압축
- Brotli
Brotli 알고리즘으로 선택한 영역 압축
- Bzip2
bzip2 알고리즘으로 선택한 영역 압축
- Gzip
gzip 형식으로 선택한 영역 압축
- LZ4
LZ4 알고리즘으로 선택한 영역 압축
- LZF
LZF 알고리즘으로 선택한 영역 압축
- LZFSE
LZFSE 알고리즘으로 선택한 영역 압축
- lzip
lzip 형식으로 선택한 영역 압축
- LZJB
LZJB 알고리즘으로 선택한 영역 압축
- LZMA
LZMA 알고리즘으로 선택한 영역 압축
- LZNT1
LZNT1 알고리즘으로 선택한 영역 압축
- LZO
LZO 알고리즘으로 선택한 영역 압축
- LZRW1/KH
LZRW1/KH 알고리즘으로 선택한 영역 압축
- PPMd
PPMd 알고리즘으로 선택한 영역 압축
- QuickLZ
QuickLZ 압축 라이브러리로 선택한 영역 압축
- Raw deflate
Deflate 알고리즘에서 헤더와 체크섬 없이 선택한 영역 압축(PHP 언어의 gzdeflate()와 동등)
- Snappy
Snappy 압축 라이브러리로 선택한 영역 압축
- XZ
XZ 형식으로 선택한 영역 압축
- zlib (deflate)
zlib(Deflate 알고리즘)로 선택한 영역 압축
- Zstandard
Zstandard 알고리즘으로 선택한 영역 압축
압축 해제
- aPLib
aPLib 압축 라이브러리로 선택한 영역 압축 해제
- Brotli
Brotli 알고리즘으로 선택한 영역 압축 해제
- Bzip2
bzip2 알고리즘으로 선택한 영역 압축 해제
- Gzip
gzip 압축된 영역 압축 해제
- LZ4
LZ4 알고리즘으로 선택한 영역 압축 해제
- LZF
LZF 알고리즘으로 선택한 영역 압축 해제
- LZFSE
LZFSE 알고리즘으로 선택한 영역 압축 해제
- lzip
lzip 압축된 영역 압축 해제
- LZJB
LZJB 알고리즘으로 선택한 영역 압축 해제
- LZMA
LZMA 알고리즘으로 선택한 영역 압축 해제
- LZNT1
LZNT1 알고리즘으로 선택한 영역 압축 해제
- LZO
LZO 알고리즘으로 선택한 영역 압축 해제
- LZRW1/KH
LZRW1/KH 알고리즘으로 선택한 영역 압축 해제
- PPMd
PPMd 알고리즘으로 선택한 영역 압축 해제
- QuickLZ
QuickLZ 압축 라이브러리로 선택한 영역 압축 해제
- Raw inflate
헤더와 체크섬이 없는 Deflate 압축 영역 압축 해제(PHP 언어의 gzinflate()와 동등)
- Snappy
Snappy 압축 라이브러리로 선택한 영역 압축 해제
- XZ
XZ 압축된 영역 압축 해제
- zlib (inflate)
zlib(Deflate 알고리즘)로 선택한 영역 압축 해제
- Zstandard
Zstandard 알고리즘으로 선택한 영역 압축 해제
암호화 작업
복호화
- AES
AES로 선택한 영역 복호화
- Blowfish
Blowfish로 선택한 영역 복호화
- CAST-128
CAST-128로 선택한 영역 복호화
- Camellia
Camellia로 선택한 영역 복호화
- ChaCha20
ChaCha20으로 선택한 영역 복호화
- DES
DES로 선택한 영역 복호화
- RC2
RC2로 선택한 영역 복호화
- RC4
RC4로 선택한 영역 복호화
- RC5
RC5로 선택한 영역 복호화
- RC6
RC6으로 선택한 영역 복호화
- Salsa20
Salsa20으로 선택한 영역 복호화
- TEA
TEA(아주 작은 암호화 알고리즘)로 선택한 영역 복호화
- Triple DES
Triple DES로 선택한 영역 복호화
- XTEA
XTEA(확장된 아주 작은 암호화 알고리즘)로 선택한 영역 복호화
- XXTEA
XXTEA(수정된 블록 아주 작은 암호화 알고리즘)로 선택한 영역 복호화
암호화
- AES
AES로 선택한 영역 암호화
- Blowfish
Blowfish로 선택한 영역 암호화
- CAST-128
CAST-128로 선택한 영역 암호화
- Camellia
Camellia로 선택한 영역 암호화
- ChaCha20
ChaCha20으로 선택한 영역 암호화
- DES
DES로 선택한 영역 암호화
- RC2
RC2로 선택한 영역 암호화
- RC4
RC4로 선택한 영역 암호화
- RC5
RC5로 선택한 영역 암호화
- RC6
RC6으로 선택한 영역 암호화
- Salsa20
Salsa20으로 선택한 영역 암호화
- TEA
TEA(아주 작은 암호화 알고리즘)로 선택한 영역 암호화
- Triple DES
Triple DES로 선택한 영역 암호화
- XTEA
XTEA(확장된 아주 작은 암호화 알고리즘)로 선택한 영역 암호화
- XXTEA
XXTEA(수정된 블록 아주 작은 암호화 알고리즘)로 선택한 영역 복호화
인코딩 작업
디코딩
- 16진수 텍스트를 2진 데이터로
선택한 영역의 16진수 텍스트를 2진 데이터로 변환
- 10진수 텍스트를 2진 데이터로
선택한 영역의 10진수 텍스트를 2진 데이터로 변환
- 8진수 텍스트를 2진 데이터로
선택한 영역의 8진수 텍스트를 2진 데이터로 변환
- 2진수 텍스트를 2진 데이터로
선택한 영역의 2진수 텍스트를 2진 데이터로 변환
- 사용자 정의 base16 디코딩
사용자 정의 base16 테이블로 선택한 영역 디코딩
- 사용자 정의 base32 디코딩
사용자 정의 base32 테이블로 선택한 영역 디코딩
- 사용자 정의 base58 디코딩
사용자 정의 base58 테이블로 선택한 영역 디코딩
- 사용자 정의 base62 디코딩
사용자 정의 base62 테이블로 선택한 영역 디코딩
- 사용자 정의 base64 디코딩
사용자 정의 base64 테이블로 선택한 영역 디코딩
- 사용자 정의 base85 디코딩
사용자 정의 base85 테이블로 선택한 영역 디코딩
- 사용자 정의 base91 디코딩
사용자 정의 base91 테이블로 선택한 영역 디코딩
- 사용자 정의 base92 디코딩
사용자 정의 base92 테이블로 선택한 영역 디코딩
- gob 디코딩
선택한 영역을 gob(golang 직렬화 형식) 직렬화 데이터로 디코딩하여 Python 표기법으로 표시
- MessagePack 디코딩
선택한 영역을 MessagePack 직렬화 데이터로 디코딩하여 JSON으로 표시
- Protobuf 디코딩
선택한 영역을 .proto 파일 없이 Protocol Buffers 직렬화 데이터로 디코딩하여 JSON으로 표시
- 따옴표 인쇄 가능에서 변환
선택한 영역을 따옴표 인쇄 가능 텍스트로 디코딩
- 유니코드 이스케이프 해제
선택한 영역의 유니코드 이스케이프 시퀀스 해제
- URL 디코딩
선택한 영역을 URL에서 사용하는 퍼센트 인코딩 텍스트로 디코딩
인코딩
- 2진 데이터를 16진수 텍스트로
선택한 영역의 2진 데이터를 16진수 텍스트로 변환
- 2진 데이터를 10진수 텍스트로
선택한 영역의 2진 데이터를 10진수 텍스트로 변환
- 2진 데이터를 8진수 텍스트로
선택한 영역의 2진 데이터를 8진수 텍스트로 변환
- 2진 데이터를 2진수 텍스트로
선택한 영역의 2진 데이터를 2진수 텍스트로 변환
- 사용자 정의 base16 인코딩
사용자 정의 base16 테이블로 선택한 영역 인코딩
- 사용자 정의 base32 인코딩
사용자 정의 base32 테이블로 선택한 영역 인코딩
- 사용자 정의 base58 인코딩
사용자 정의 base58 테이블로 선택한 영역 인코딩
- 사용자 정의 base62 인코딩
사용자 정의 base62 테이블로 선택한 영역 인코딩
- 사용자 정의 base64 인코딩
사용자 정의 base64 테이블로 선택한 영역 인코딩
- 사용자 정의 base85 인코딩
사용자 정의 base85 테이블로 선택한 영역 인코딩
- 사용자 정의 base91 인코딩
사용자 정의 base91 테이블로 선택한 영역 인코딩
- 사용자 정의 base92 인코딩
사용자 정의 base92 테이블로 선택한 영역 인코딩
- MessagePack 인코딩
선택한 영역의 JSON을 MessagePack 직렬화 데이터로 인코딩
- ROT13
선택한 영역의 알파벳 문자를 지정된 양만큼 회전(기본값: 13)
- 따옴표 인쇄 가능으로 변환
선택한 영역을 따옴표 인쇄 가능 텍스트로 인코딩
- 유니코드 이스케이프
선택한 영역의 유니코드 문자 이스케이프
- URL 인코딩
선택한 영역을 URL에서 사용하는 퍼센트 인코딩 텍스트로 인코딩
기타 작업
- 코드 에뮬레이션
선택한 영역을 실행 파일 또는 셸코드로 에뮬레이션(선택하지 않으면 전체 파일)
- 파일 비교
두 파일의 내용 비교
- 해시 값
선택한 영역(선택하지 않으면 전체 파일)의 CRC32, MD5, SHA1, SHA256, ssdeep, TLSH, imphash, impfuzzy, exphash, Rich PE 헤더 해시, authentihash, 아이콘 MD5, 아이콘 dhash, gimphash, telfhash 값 계산
- Send to (CLI)
선택한 영역(선택하지 않으면 전체 파일)을 다른 CLI 프로그램으로 보내고 출력 가져오기
- Send to (GUI)
선택한 영역(선택하지 않으면 전체 파일)을 다른 GUI 프로그램으로 보내기
구문 분석 작업
- Binwalk 스캔
선택한 영역(선택하지 않으면 전체 파일)을 스캔하여 포함된 파일 찾기
- 디스어셈블
선택한 영역(선택하지 않으면 전체 파일) 디스어셈블
- VBA 매크로 추출
선택한 영역(선택하지 않으면 전체 파일)에서 Microsoft Office VBA 매크로 추출
- 파일 유형
선택한 영역(선택하지 않으면 전체 파일)의 파일 유형 식별
- PE 파일 찾기
PE 헤더 정보를 기반으로 선택한 영역(선택하지 않으면 전체 파일)에서 PE 파일 찾기
- 파일 구조 분석
Kaitai Struct로 선택한 영역(선택하지 않으면 전체 파일)의 파일 구조 분석
지원되는 파일 형식: Gzip, RAR, ZIP, ELF, Mach-O, PE, MBR 파티션 테이블, BMP, GIF, JPEG, PNG, Windows 바로 가기
- 메타데이터 표시
ExifTool로 선택한 영역(선택하지 않으면 전체 파일)의 메타데이터 표시
- 문자열
선택한 영역(선택하지 않으면 전체 파일)에서 텍스트 문자열 추출
- 문자열 유형
lemmeknow를 사용하여 선택한 영역(선택하지 않으면 전체 파일)에서 API 키, 암호화폐 지갑 주소 등의 문자열 유형 식별
검색 작업
- 정규식 추출
선택한 영역(선택하지 않으면 전체 파일)에서 정규식으로 검색하고 일치하는 영역을 단일 연결된 영역으로 추출
- 정규식 검색
선택한 영역(선택하지 않으면 전체 파일)에서 정규식으로 검색하고 일치하는 영역에 책갈피 설정
- 바꾸기
선택한 영역(선택하지 않으면 전체 파일)에서 정규식으로 검색하고 일치하는 영역을 지정된 데이터로 바꾸기
- XOR 16진수 검색
선택한 영역(선택하지 않으면 전체 파일)에서 XOR 처리/회전 이동된 데이터 검색
- XOR 텍스트 검색
선택한 영역(선택하지 않으면 전체 파일)에서 XOR 처리/회전 이동된 문자열 검색
- YARA 스캔
YARA로 선택한 영역(선택하지 않으면 전체 파일) 스캔
시각화 작업
- 비트맵 보기
전체 파일을 비트맵 표현으로 시각화
- 바이트 히스토그램
선택한 영역(선택하지 않으면 전체 파일)의 바이트 히스토그램 표시
- 엔트로피 그래프
선택한 영역(선택하지 않으면 전체 파일)의 엔트로피 그래프 표시
XOR 작업
- 단순 XOR
지정된 XOR 키로 선택한 영역 XOR
- 감소 XOR
XOR 키를 감소시키면서 선택한 영역 XOR
- 증가 XOR
XOR 키를 증가시키면서 선택한 영역 XOR
- 널 유지 XOR
널 바이트와 XOR 키 자체를 건너뛰면서 선택한 영역 XOR
- 다른 파일과 XOR
다른 파일의 내용을 XOR 키로 사용하여 선택한 영역 XOR
- 다음 바이트와 XOR
다음 바이트를 XOR 키로 사용하여 선택한 영역 XOR
- 다음 바이트와 XOR (역)
"다음 바이트와 XOR" 플러그인의 역연산
- 멀티바이트 XOR 키 추측
0x00과 XOR된 공개된 키를 기반으로 선택한 영역(선택하지 않으면 전체 파일)에서 멀티바이트 XOR 키 추측
- 시각적 암호화
Zeus 트로이 목마가 사용하는 시각적 암호화 알고리즘으로 선택한 영역 인코딩
- 시각적 복호화
Zeus 트로이 목마가 사용하는 시각적 복호화 알고리즘으로 선택한 영역 디코딩
작성자
Nobutaka Mantani (X: @nmantani)
라이선스
BSD 2-Clause License (http://opensource.org/licenses/bsd-license.php)