Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
VMPacker — Sistema de Proteção de Máquina Virtual ARM64 ELF | Kitploit
Ferramentas/GitHubGitHub/leochen-coremind/vmpacker
Segurança de Sistemas EmbarcadosFrameworks de ExploraçãoSegurança IoTAnálise de VulnerabilidadesEngenharia ReversaFuzzingTestes de PenetraçãoSegurança MóvelSegurança de HardwareAnálise de BináriosAnti-Bot
477170há 4 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHub
leochen-coremind/vmpacker

VMPacker

Sistema de Proteção de Máquina Virtual ARM64 ELF

Ver Repositório

🛡️ VMPacker

Sistema de Proteção de Máquina Virtual ARM64 ELF

Traduza instruções nativas ARM64 para bytecode VM personalizado para proteção de código em nível de função

🇨🇳 中文文档 • Funcionalidades • Arquitetura • Início Rápido • Uso • Licença


Visão Geral

O VMPacker é um sistema de Proteção por Máquina Virtual (VMP) para binários ARM64 (AArch64) Linux ELF. Ele decodifica instruções ARM64 nativas da função alvo em uma representação intermediária, traduz-as em bytecode VM personalizado e injeta um interpretador VM embarcado no arquivo ELF. Em tempo de execução, as funções protegidas são executadas pelo interpretador VM em vez de nativamente.

Conceito Principal

root@kitploit:~
Código Nativo ARM64  →  Decodificar  →  Traduzir  →  Bytecode VM Personalizado
                                                      ↓
                    ELF Original  ←  Injetar  ←  Stub do Interpretador VM

Funcionalidades

🔄 Motor de Tradução de Instruções

  • 63 instruções VM — cobrindo ALU, memória, desvio, chamadas de sistema e mais
  • Decodificador orientado por tabela — correspondência de padrões baseada no Manual de Referência de Arquitetura ARM
  • 121 instruções ARM64 suportadas (cobertura de 100% da base A64), incluindo:
    • Aritmética/Lógica (ADD, SUB, MUL, AND, ORR, EOR, LSL, LSR, ASR, MVN, BIC, ORN, EON...)
    • Multiplicação-Extensão (MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH, UDIV, SDIV)
    • Movimento de Dados (MOV, MOVZ, MOVK, MOVN)
    • Acesso à Memória (LDR, STR, LDP, STP, LDPSW, LDADD, CAS, LDAR, STLR, LDAXR, STLXR — várias larguras e modos de endereçamento)
    • Controle de Desvio (B, BL, BR, BLR, RET, B.cond, CBZ/CBNZ, TBZ/TBNZ)
    • Seleção Condicional (CSEL, CSINC, CSINV, CSNEG, CCMP, CCMN)
    • Campos de Bits (UBFM, SBFM, BFM, EXTR)
    • Manipulação de Bits (CLZ, CLS, RBIT, REV, REV16, REV32)
    • Aritmética com Carry (ADC, ADCS, SBC, SBCS)
    • Carga/Descarga SIMD (LD1, ST1)
    • Sistema/Barreiras (SVC, MRS, MSR, ADRP/ADR, DMB, DSB, ISB, HLT, BRK, PRFM)

🔐 Proteção em Multi-Camadas

🖥️ Interface Gráfica (GUI)

  • Aplicativo de desktop multiplataforma construído com Wails v2 (Go + Vue 3)
  • Componentes de interface Element Plus
  • Seleção de funções por símbolo + entrada manual de função (proteger por intervalo de endereços)
  • Proteção com um clique e saída de logs em tempo real

Arquitetura

root@kitploit:~
vmp/
├── cmd/vmpacker/          # Ponto de entrada da CLI
│   ├── main.go            # Análise de argumentos da CLI + orquestração
│   └── vm_interp.bin      # Interpretador VM compilado (GCC, go:embed)
│
├── pkg/                   # Biblioteca central Go
│   ├── arch/arm64/        # Suporte à arquitetura ARM64
│   │   ├── decoder.go     # Decodificador orientado por tabela (implementa vm.Decoder)
│   │   ├── decode_*.go    # Tabelas de padrões de decodificação (DP-IMM/DP-REG/Branch/LdSt)
│   │   ├── translator.go  # Tradutor ARM64 → bytecode VM
│   │   ├── tr_alu.go      # Tradução de instruções ALU
│   │   ├── tr_branch.go   # Tradução de instruções de desvio
│   │   ├── tr_loadstore.go # Tradução de instruções de memória
│   │   ├── tr_bitfield.go # Tradução de instruções de campos de bits
│   │   └── tr_special.go  # Instruções especiais (ADRP/ADR)
│   ├── vm/                # Definições da ISA VM
│   │   ├── types.go       # Tipos compartilhados + interfaces (Decoder/Translator/Packer)
│   │   ├── opcodes.go     # Definições de 58+ opcodes VM (valores mapeados aleatoriamente)
│   │   └── disasm.go      # Desmontador de bytecode VM
│   └── binary/elf/        # Manipulação de binários ELF
│       ├── packer.go      # Injeção VMP em ELF (sequestro de PT_NOTE, geração de trampolim)
│       └── trampoline.go  # Geração de código de trampolim
│
├── stub/                  # Interpretador VM em C (compilado para binário PIC flat)
│   ├── vm_interp_clean.c  # Loop principal do interpretador + pontos de entrada
│   ├── vm_types.h         # Contexto de CPU VM (vm_ctx_t)
│   ├── vm_opcodes.h       # Definições de opcodes do lado C (sincronizadas com opcodes.go)
│   ├── vm_decode.h        # Utilitários de leitura de bytecode
│   ├── vm_token.h         # Codificação/decodificação de token + tabela descritora
│   ├── vm_dispatch.h      # Tabela de despacho indireto
│   ├── vm_crc.h           # Verificação de integridade CRC32
│   ├── vm_sections.h      # Macros de dispersão de seções de handlers
│   ├── vm_interp.lds      # Script do linker
│   └── vm_handlers/       # Handlers modulares de instruções
│       ├── h_alu.h        # Operações aritméticas/lógicas
│       ├── h_mem.h        # Acesso à memória
│       ├── h_branch.h     # Desvio/salto
│       ├── h_cmp.h        # Comparação/condicional
│       ├── h_mov.h        # Movimento de dados
│       ├── h_stack.h      # Pilha (PUSH/POP)
│       └── h_system.h     # Sistema (SVC/MRS/BLR/BR/RET)
│
├── vmp-gui/               # Frontend da GUI Wails
│   ├── frontend/          # Vue 3 + Element Plus
│   └── backend/           # Ligações do backend em Go
│
└── build/                 # Ferramentas pré-compiladas + artefatos de teste

Design Modular

O projeto usa uma arquitetura modular orientada por interfaces, facilitando a extensão para novas ISAs e formatos binários:

root@kitploit:~
// Interface do decodificador de arquitetura — extensível para x86, RISC-V
type Decoder interface {
    Decode(raw uint32, offset int) Instruction
    InstName(op int) string
}

// Interface do tradutor de bytecode
type Translator interface {
    Translate(instructions []Instruction) (*TranslateResult, error)
}

// Interface do injetor de formato binário — extensível para PE, Mach-O
type Packer interface {
    Process() error
}

Pipeline de Proteção

root@kitploit:~
graph LR
    A[ELF de Entrada] --> B[Localizar Função Alvo]
    B --> C[Extrair Instruções ARM64]
    C --> D[Decodificar ARM64]
    D --> E[Traduzir para Bytecode VM]
    E --> F[Criptografar Bytecode com XOR]
    F --> G[Injetar Interpretador VM]
    G --> H[Gerar Trampolim]
    H --> I[Substituir Entrada da Função]
    I --> J[ELF Protegido de Saída]

Início Rápido

Pré-requisitos

  • Go 1.21+
  • GCC (aarch64-linux-gnu-gcc) — para compilar o stub
  • Linux ARM64 ou ambiente de compilação cruzada

Instalação

root@kitploit:~
git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all

Uso

Proteger por Nome da Função

root@kitploit:~
# Proteger uma única função
./vmpacker -func check_license -v -o protected.elf original.elf

# Proteger múltiplas funções
./vmpacker -func "check_license,verify_token" -v -o protected.elf original.elf

Proteger por Intervalo de Endereços

root@kitploit:~
# Especificar intervalo de endereços
./vmpacker -addr "0x4006AC-0x400790:main" -v -o protected.elf original.elf

# Modo misto
./vmpacker -addr "0x4006AC-0x400790:main" -func verify -o protected.elf original.elf

Inspecionar Informações ELF

root@kitploit:~
./vmpacker -info input.elf

Opções da CLI

Compilação

Compilar o Stub do Interpretador VM

root@kitploit:~
# Compilação padrão (GCC)
aarch64-linux-gnu-gcc -Os -nostdlib -fPIC -ffreestanding \
  -o stub.elf stub/vm_interp_clean.c \
  -T stub/vm_interp.lds
aarch64-linux-gnu-objcopy -O binary stub.elf vm_interp.bin

Compilar a Ferramenta CLI

root@kitploit:~
go build -o vmpacker ./cmd/vmpacker/

Compilar a GUI

root@kitploit:~
cd vmpacker
make gui

Referência da ISA VM

O VMPacker define uma Arquitetura de Conjunto de Instruções (ISA) personalizada com valores de opcode mapeados aleatoriamente para aumentar a dificuldade de engenharia reversa.

📖 Para a tabela completa de opcodes com detalhes de codificação, veja a documentação em chinês.

Categorias de Instruções

Roteiro (Roadmap)

  • Integração Completa da GUI — Integração completa entre a GUI e o motor de proteção backend
  • Modo Híbrido — Execução nativa parcial + proteção VM parcial
  • Mapeamento Dinâmico de Opcodes — Gerar mapeamento ISA único por execução de proteção

Contribuição

Contribuições são bem-vindas! Por favor, siga estas diretrizes:

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade: git checkout -b feature/nova-arquitetura
  3. Faça commit das suas alterações: git commit -m 'feat: adicionar decodificador x86_64'
  4. Envie o branch: git push origin feature/nova-arquitetura
  5. Crie um Pull Request

Convenção de Commits

Seguimos Conventional Commits:

  • feat: Nova funcionalidade
  • fix: Correção de bug
  • refactor: Refatoração de código
  • docs: Documentação
  • test: Testes

Licença

Este projeto está licenciado sob a Licença AGPL-3.0.

Por que AGPL-3.0:

  • ✅ Copyleft Forte — Quaisquer modificações ou trabalhos derivados devem ser de código aberto sob a mesma licença
  • ✅ Cláusula de Uso em Rede — Fornecer a funcionalidade deste software como um serviço de rede também exige a divulgação do código-fonte
  • ✅ Protege a Tecnologia Central — Impede o uso comercial fechado do motor de proteção
  • ✅ Amigável à Comunidade — Livre para estudar, pesquisar e melhorar — as melhorias devem ser compartilhadas de volta
  • ✅ Licenciamento Comercial — Para uso comercial fechado, entre em contato com o autor para uma licença comercial

⚠️ Aviso Legal

ESTE SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO A, GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUMA HIPÓTESE OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO CONTRATUAL, EXTRA CONTRATUAL OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM, O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.

Este projeto foi projetado para fornecer proteção legítima de propriedade intelectual para desenvolvedores de software, ajudando a proteger algoritmos centrais e código crítico em software comercial contra engenharia reversa ou roubo não autorizado.

Aviso ao Usuário:

  1. Você deve cumprir todas as leis e regulamentos aplicáveis na sua jurisdição ao usar este software
  2. É estritamente proibido usar este software para qualquer finalidade ilegal, incluindo, mas não se limitando a: desenvolvimento de malware, contorno de auditorias de segurança, violação dos direitos de propriedade intelectual de terceiros ou comprometimento da segurança de sistemas de computador
  3. O(s) autor(es) não será(ão) responsabilizado(s) por quaisquer consequências diretas ou indiretas resultantes do uso deste software por qualquer pessoa
  4. Ao baixar, usar ou distribuir este software, você reconhece que leu e concordou com os termos acima

Autor

LeoChen — @LeoChen-CoreMind

Copyright © 2026 LeoChen. Todos os direitos reservados.

Baixar ferramenta
CamadaTécnicaDescrição
Proteção VMISA PersonalizadaOpcodes mapeados aleatoriamente — engenheiros reversos não podem identificar diretamente a semântica das instruções
Criptografia de OpcodeCriptografia de opcode por instruçãoenc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
Reversão de BytecodeInversão da ordem de execuçãoInstruções armazenadas em ordem inversa; interpretador percorre para trás
Entrada TokenizadaTrampolim de 3 instruçõesFunção original substituída por entrada tokenizada, ocultando a localização real do bytecode
Despacho IndiretoTabela de ponteiros de funçãoPreenchida em tempo de execução na pilha, quebrando referências cruzadas do IDA
Interface PrincipalAnálise de FunçõesOpções de Proteção
Lista de FunçõesAnálise e SeleçãoOpções de Proteção
Execução da ProteçãoProteção Concluída
Logs em Tempo RealProteção Concluída
OpçãoPadrãoDescrição
-func—Nome(s) da(s) função(ões) a proteger (separados por vírgula)
-addr—Proteger por endereço (0xINÍCIO-0xFIM[:nome])
-oinput.vmpCaminho do arquivo de saída
-vfalseSaída detalhada (mostrar desmontagem)
-striptrueRemover tabela de símbolos
-debugfalseGerar arquivo de mapeamento de depuração ARM64 → bytecode VM
-tokentrueModo de entrada por token
-infofalseApenas imprimir informações do ELF
CategoriaContagemDescrição
Movimento de Dados3MOV_IMM64, MOV_IMM32, MOV_REG
Aritmética/Lógica21ADD, SUB, MUL, XOR, AND, OR, SHL, SHR, ASR, NOT, ROR, UMULH + variantes _IMM
Acesso à Memória8LOAD/STORE 8/16/32/64
Desvio/Salto13JMP, JE, JNE, JL, JGE, JGT, JLE, JB, JAE, JBE, JA, TBZ, TBNZ
Comparação6CMP, CMP_IMM, CCMP_REG, CCMP_IMM, CCMN_REG, CCMN_IMM
Pilha2PUSH, POP
Sistema/Especial8NOP, HALT, RET, CALL_NATIVE, CALL_REG, BR_REG, SVC, MRS
SIMD2VLD16, VST16
Total63