Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
JOP_ROCKET — Este framework permite ao usuário descobrir gadgets JOP e pode automatizar a construção de uma cadeia JOP completa para bypass de DEP. JOP ROCKET é a solução definitiva para programação orientada a salto no Windows. JOP ROCKET também encontra o novo dispatcher de dois gadgets, o que expande muito o que é possível com JOP. | Kitploit
Ferramentas/GitHubGitHub/bw3ll/jop_rocket
ExploraçãoEngenharia ReversaPapers e PesquisaAprendizado e EducaçãoDesenvolvimento de PayloadsExploração de BináriosLabs e Prática
GitHubbw3ll/jop_rocket

JOP_ROCKET

Ver Repositório
1162010há 2 anosRevisado 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 →

Sobre

Este framework permite ao usuário descobrir gadgets JOP e pode automatizar a construção de uma cadeia JOP completa para bypass de DEP. JOP ROCKET é a solução definitiva para programação orientada a salto no Windows. JOP ROCKET também encontra o novo dispatcher de dois gadgets, o que expande muito o que é possível com JOP.

Compartilhar
![alt text](https://raw.githubusercontent.com/Bw3ll/JOP_ROCKET/master/jopRocket3.jpg)
# JOP ROCKET

**NOTA: Com a versão 2.15, apresentamos o despachante de dois gadgets—isto expande significativamente as possibilidades com gadgets despachantes. Muitas otimizações e novos recursos adicionais foram adicionados com a versão 2.15 em 26 de maio de 2021.**

**Atualização: 29 de novembro de 2021: Enviei os slides do @Hack em Riade e também um white paper sobre JOP sem shellcode. Os vídeos de demonstração silenciosa usados na palestra podem ser encontrados aqui: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV**

**Atualização: 1 de dezembro de 2022: Adicionei uma seção de Perguntas e Respostas no final deste GitHub, que inclui links para recursos (palestras e artigos).**

Versão atual: 2.15

A Ferramenta Especialista em Conhecimento Cibernético Aberto para Reversão de Programação Orientada a Saltos, ou JOP ROCKET, é uma ferramenta projetada para facilitar a descoberta de gadgets JOP em um ambiente Windows x86. Esta ferramenta foi lançada na DEF CON 27, onde foi tema de uma palestra do Dr. Bramwell Brizendine e do Dr. Josh Stroschein. Uma grande atualização que estava em desenvolvimento foi lançada em setembro de 2020, com atualizações menores planejadas para o futuro próximo.

Por favor, navegue até [https://github.com/Bw3ll/JOP_ROCKET](https://github.com/Bw3ll/JOP_ROCKET/) para baixar esta ferramenta.

Várias atualizações importantes ocorreram. Recomenda-se que qualquer versão anterior à 2.15 seja atualizada para aproveitar as muitas atualizações. Elas incluem geração automática de cadeias JOP, descoberta de novos tipos de gadgets, novos tipos de gadgets despachantes e os despachantes de dois gadgets. O JOP ROCKET também passou por muitas outras mudanças importantes para melhorar e otimizar seu desempenho e velocidade.

O JOP ROCKET é um programa em Python que utiliza o mecanismo de desmontagem Capstone, bem como outras dependências. Esta ferramenta de exploração de software é um artefato completo projetado para facilitar a Programação Orientada a Saltos. Ela foi desenvolvida para ser executada no Windows.

As informações de uso não estão disponíveis no momento além do que está no menu de ajuda. Construir exploits JOP não é simples e é cheio de nuances, com alguns paralelos, mas muitas diferenças em relação ao ROP. Consulte a palestra da DEF CON para ver uma breve demonstração. https://www.youtube.com/watch?v=PMihX693mPE

Esta ferramenta foi ensinada na Dakota State University no programa de doutorado, como parte do CSC 848: Advanced Software Exploitation, o curso mais desafiador do programa. Os alunos concluíram exploits que incluíam bypass de DEP e ASLR.

Agradecemos a Austin Babcock por sua ajuda com vários problemas relacionados ao JOP ROCKET, incluindo suas instruções de instalação. Ele é um mestre em JOP.

Disponibilizamos um arquivo aqui, JOP ROCKET challenge - toy binaries.zip, para permitir que interessados testem e pratiquem JOP em alguns binários de exemplo, usando o JOP ROCKET. Você consegue fazer bypass da Prevenção de Execução de Dados (DEP)? Isso é bom se você quiser praticar JOP em um binário que você sabe que é garantidamente vulnerável e que possui os gadgets certos. Existe uma versão mais fácil e uma mais difícil do mesmo binário. Embora o JOP provavelmente seja mais difícil na primeira vez, até que alguém pegue o jeito. Depois de dominar o JOP com esses binários, você pode experimentá-lo em alguns gadgets do mundo real, assumindo que eles tenham gadgets suficientes. Se você estiver usando o paradigma de gadget despachante, lembre-se de que você precisa de um gadget despachante. O JOP também é possível misturado com ROP, usando um gadget JOP para apontar para um RET, de modo que JMP EDX poderia ter EDX apontando para RET. Isso é mais útil se você precisar de apenas um ou dois gadgets JOP para fazer o ROP funcionar. Os binários no arquivo devem permitir que você use o paradigma de gadget despachante de algumas maneiras diferentes, no entanto!

Com o paradigma de gadget despachante do JOP, você pode eliminar 100% o ROP, embora seja mais fácil começar com dois gadgets ROP, para carregar a tabela de despacho e o gadget despachante. A cadeia JOP pré-construída fará isso automaticamente, assumindo que eles estejam presentes. A partir daí, pode ser JOP puro, usando saltos indiretos e chamadas indiretas (JMP EBX, CALL EDX, etc.).

## Instruções básicas de instalação para o JOP ROCKET
### Passo 1:
Instale o Python 2.7. A maneira mais fácil de fazer isso será pelo site: https://www.python.org/download/releases/2.7/

Se você já tem o Python 3, ainda precisará do Python 2.7, pois a ferramenta não funcionará corretamente com o Python 3.

Se você tiver ambos, precisará adicionar o comentário especial:

**#!python2**

ao topo do rocket.py. Em seguida, execute com "py rocket.py" em vez de "python rocket.py". Isso garantirá que o programa seja executado usando o Python 2.7. Alternativamente, você pode simplesmente fazer py -2 rocket.py

![alt text](https://raw.githubusercontent.com/Bw3ll/JOP_ROCKET/master/python.jpg)

### Passo 2:
Instale o pip, caso ele já não esteja incluído com o Python.

-	https://pip.pypa.io/en/stable/installing/

Você precisará salvar o script fornecido e executá-lo, conforme as instruções no link. Se você encontrar um erro, tente usar o script "alternativo".

Se o pip ainda não funcionar, tente adicionar "C:\python27\Scripts" (ou o diretório correspondente) à sua variável de sistema Path:

-	Iniciar
-	Clique com o botão direito em Computador
-	Propriedades
-	Configurações Avançadas do Sistema
-	Guia Avançado
-	Variáveis de Ambiente

![alt text](https://raw.githubusercontent.com/Bw3ll/JOP_ROCKET/master/environ.jpg)

### Passo 3:
Comece a instalar as dependências com o pip!

_Nota: As instalações com pip devem funcionar usando o terminal do Windows, mas podem não funcionar em um ambiente Cygwin. Se estiver usando Cygwin, talvez seja necessário instalar a partir do código-fonte. Isso pode ser uma tarefa mais demorada, e você é orientado a consultar a documentação mais recente dos diferentes fabricantes das dependências._
-	**pip install capstone**
- **pip install pefile2**

   - Você provavelmente já terá o pefile instalado com o Python 2.7, mas essa versão é antiga.
   - O Pefile2 é o que você precisa.

   - Você pode precisar executar **pip uninstall pefile** para fazer o programa usar o pefile2.
-	Etc... Uma lista de dependências pode ser encontrada no final deste documento. Cada uma deve ser instalada, caso ainda não esteja.
-	Os dois acima provavelmente são os únicos que você precisará instalar manualmente.

Muitas das dependências já vêm com o Python. Para listar os módulos disponíveis, abra um prompt:

![alt text](https://raw.githubusercontent.com/Bw3ll/JOP_ROCKET/master/modules.jpg)

Examine a lista e veja se você tem todas as dependências. Para aquelas que você não tiver, instale com o pip ou via código-fonte.

### Dependências:
-	Capstone
-	pywin32
-	Pefile2
-	Ctypes

Nota: pywin32 é usado para Win32file e Win32api

### Arquivos necessários:
Você deve ter em um diretório todos os cinco arquivos, rocket.py, lists,py, checkIt.py, ui.py e stackpivot.py. Para começar a usar a ferramenta, execute na linha de comando, python rocket.py filename.exe -- sendo filename.exe o programa para o qual você deseja obter gadgets JOP ou cadeias JOP.

### Erros:
Se você estiver recebendo erros como "SyntaxError: Missing parentheses in call to 'print'", provavelmente está executando com o Python 3. Tente fazer a correção descrita no Passo 1 para fazer o programa usar o Python 2.

Erros relacionados a "lists" ou "ui" provavelmente são causados pela localização dos arquivos **lists.py** e **ui.py**. Certifique-se de que esses arquivos estejam no mesmo diretório do **rocket.py**.

## Etapas de instalação mais avançadas

Para utilizar isso em um ambiente Cygwin, você provavelmente precisará instalar o Capstone a partir do código-fonte. Existem várias maneiras de fazer isso, e a documentação do Capstone fornece assistência. O Cygwin foi usado originalmente durante o desenvolvimento da ferramenta, embora isso não seja mais o caso. O JOP ROCKET v2.0 não foi testado no Cygwin, e o prompt de comando é o uso recomendado do JOP ROCKET. Nota: o uso do Cygwin não é mais suportado explicitamente, e não é mais recomendado o uso com este programa.

## Uso Básico

Informações de uso mais detalhadas virão em breve. Consulte a palestra da DEF CON 27 e o submenu de ajuda para obter assistência.

Para começar, no entanto, você deve ter os cinco arquivos Python no mesmo diretório: rocket.py, ui.py, stackpivot.py, checkIt.py e lists.py. Em seguida, execute pela linha de comando. Você pode fornecer um arquivo local no diretório de instalação, mas ele não conseguirá encontrar módulos/DLLs. Para encontrá-los, o programa deve estar instalado, e o caminho absoluto para o aplicativo pode ser fornecido como entrada dentro de um arquivo de texto que pode ser passado como argumento na linha de comando, por exemplo,

   python rocket.py input.txt

Dentro de input.txt, teríamos o caminho absoluto, por exemplo, C:\rocket2\sample_binary.exe. Ao fornecer o caminho absoluto, você também poderá extrair os módulos para digitalização, se desejado. Se você quiser usar o JOP ROCKET apenas com o programa no diretório local, ele só encontrará gadgets para o próprio executável da imagem, ou seja, nenhuma DLL. Para usá-lo dessa forma, use a seguinte sintaxe:

   python rocket.py sample_binary.exe

Se o executável estiver no mesmo diretório, você pode usar o JOP ROCKET da maneira descrita acima.

## Garantindo que você obtenha TODOS os módulos/DLLs de um binário

Ao carregar um executável ou DLL para análise, existem duas abordagens. A primeira é simplesmente colocar o executável no mesmo diretório e executar o programa, usando isso como argumento, por exemplo, python rocket.py binary.exe. Isso permitirá que o usuário identifique e extraia muitos dos módulos do sistema. No entanto, não encontrará alguns dos binários que não são do sistema. Para uma cobertura abrangente, o usuário deve fornecer o caminho absoluto para o aplicativo em um arquivo de texto e usá-lo como entrada para o ROCKET, por exemplo, python rocket.py input.txt. Isso permitirá que o ROCKET localize, extraia e pesquise DLLs não pertencentes ao sistema associadas ao aplicativo de destino. Portanto, é geralmente recomendado fornecer o binário como entrada por meio de um arquivo de texto, caso contrário, algumas DLLs podem ser excluídas. Por exemplo, python rocket.py binaryToScan.txt. O binaryToScan.txt deve conter o caminho para o binário, C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe

## Problemas de memória com binários muito grandes

O Python de 32 bits vai engasgar com binários muito grandes. Para conseguir trabalhar com eles, você deve usar o Python de 64 bits.

Aqui estão algumas instruções de Austin sobre como passar do Python de 32 bits para o de 64 bits: Para instalar a versão de 64 bits do python2.7, primeiro certifique-se de que a instalação antiga foi desinstalada. Depois de instalar a versão de 64 bits, você pode receber alguns erros ao importar bibliotecas, como "DLL load failed: %1 is not a valid Win32 application". Isso ocorre porque o Python está tentando carregar as versões de 32 bits instaladas anteriormente. Para corrigir esse problema, use o pip para desinstalar a biblioteca. Se tanto o Python 2 quanto o 3 estiverem instalados, certifique-se de que a versão correta do pip seja usada, executando-o como "py -2 -m pip <comando>".

Corrigir o problema do capstone é simples:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

Erros relacionados à importação do win32api estão relacionados ao pywin32. Desinstalar isso é mais difícil, pois o pip pode não automatizar o processo. Pode ser necessário desinstalá-lo manualmente, excluindo os arquivos do PyWin32 dentro de ...\Python27\Lib\site-packages.

Em seguida, execute:

py -2 -m pip install pywin32

Depois, finalize a instalação executando ...\Python27\Scripts\pywin32_postinstall.py -install

# Perguntas e Respostas

**P: O que há de tão especial no JOP ROCKET?**

**R:** O JOP ROCKET encontra todos os gadgets necessários, incluindo o gadget despachante. Não tenho conhecimento de nenhuma outra ferramenta que pesquise gadgets despachantes. Além disso, ele introduz novos tipos de gadgets e inovações ao JOP. O JOP ROCKET também pode gerar uma cadeia JOP completa para fazer bypass de DEP usando uma nova variação do paradigma de gadget despachante que envolve uma série de múltiplos stack pivots. Realisticamente, seria muito difícil fazer um exploit JOP usando a abordagem de gadget despachante sem usar o JOP ROCKET. Existem algumas outras ferramentas de ROP que podem fornecer gadgets JOP mais limitados, mas elas são, em sua maioria, espaços reservados para trabalhos futuros, e você não conseguiria completar um exploit JOP sem alguns dos gadgets encontrados com o JOP ROCKET.

**P: Acho que já vi o JOP ROCKET em uma palestra antes. Onde foi?**

**R:** Apresentamos em várias conferências: DEF CON 27 (2019), Wild West Hackin’ Fest (2020), Hack in the Box Amsterdam (2021), Black Hat Asia (2021) e @Hack (2021) (agora renomeada para Black Hat Middle East and Africa). Para cada uma delas, geralmente há um white paper e um vídeo (sem vídeo para o @Hack). Também houve conferências acadêmicas. Cada palestra e white paper é diferente, geralmente com pelo menos 60-70% de conteúdo novo. Eles abordam muitos tópicos diferentes sobre JOP. Não temos novas palestras planejadas e não faríamos outra a menos que tivéssemos algo novo para compartilhar, pois não gostamos de nos repetir.

Aqui está uma listagem limitada de alguns materiais sobre JOP. Não é a mesma palestra ou artigo, pois estamos constantemente evoluindo e adicionando novas inovações. Cada um tem contribuições inéditas.

Vídeo da DEF CON 27 2019: https://www.youtube.com/watch?v=PMihX693mPE

Vídeo do Wild West Hackin’ Fest 2020: https://www.youtube.com/watch?v=ZQuxSSBfeHM

Vídeo da Black Hat Asia: https://www.youtube.com/watch?v=NYgTw-h6GT8

Artigo da Black Hat Asia: https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Brizendine-Babcock-Prebuilt-Jop-Chains-With-The-Jop-Rocket-wp.pdf

Vídeo do Hack in the Box Amsterdam 2021: https://www.youtube.com/watch?v=MxIySXHvKyE

Artigo do Hack in the Box Amsterdam 2021: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-.pdf

Alta resolução: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

Artigo do @Hack 2021 (renomeado para Black Hat Middle East and Africa): https://blackhatmea.com/content-hub/advanced-code-reuse-attacks-jump-oriented-programming

Se você é um pesquisador acadêmico, cite alguns desses ou também nossos artigos acadêmicos. :-)

**P: Qual é um exemplo de um exploit JOP no mundo real?**

**R:** Austin publicou um na Exploit DB: https://www.exploit-db.com/exploits/49959

Você pode ver um vídeo dele e de Austin falando sobre isso na apresentação que fizemos na HITB 2021. Esse exploit JOP do mundo real apresentou alguns desafios especiais, então é bom examiná-lo e estudá-lo. Embora Austin o tenha escrito manualmente, na verdade a geração automática de cadeias JOP do JOP ROCKET teria feito a maior parte do trabalho. (Ainda haveria uma configuração especial adicional para compensar alguns dos desafios.) Este também é um exemplo da nossa nova variação da abordagem de gadget despachante, usando uma série de múltiplos stack pivots. Este exploit levou menos de um dia para ser concluído.

**P: O JOP é difícil de fazer?**

**R:** Não, não é, mas é muito diferente do ROP. Existem “regras” diferentes em alguns pontos que podem não ser imediatamente aparentes. Escrevemos extensivamente sobre elas em diferentes artigos ou falamos sobre elas em diferentes palestras que fizemos. O que às vezes pode ser desafiador, no entanto, é ter gadgets suficientes. Existem diferentes estilos de JOP, e se você está tentando fazer a abordagem de gadget despachante – que pode permitir que você faça um exploit JOP completo sem ROP – então você deve ter um gadget despachante.

**P: O JOP não é apenas ROP com outro nome?**

**R:** O JOP é muito fluido. Pode ser. Você poderia carregar um RET em um gadget JOP e, assim, sempre que você fizer JMP EBX, por exemplo, isso seria equivalente ao RET. Nesse sentido, você poderia usar o JOP apenas como uma forma de estender o ROP, e não precisaria de um gadget despachante. Pareceria tedioso ter que construir um exploit inteiro dessa forma, embora você pudesse, se realmente quisesse. Escrevemos sobre outros estilos de JOP também, embora a maior parte do nosso trabalho se concentre na abordagem de gadget despachante.

**P: O que é um gadget despachante? É fácil de encontrar? O que é um despachante de dois gadgets?**

**R:** Esse era um gadget relativamente raro e nem sempre fácil de encontrar; alguns binários não teriam gadgets despachantes viáveis. Note que o tempo passado está em jogo aqui. Apresentamos gadgets despachantes alternativos e, mais importante, um despachante de dois gadgets, sobre o qual escrevemos no artigo da HITB. Isso pega dois gadgets comuns e os encadeia, de modo que um gadget despachante não é mais raro. Um dos gadgets necessários é tão comum que geralmente há variações dele para quase todos os registradores; e o outro é muito comum, mas não tão comum. No entanto, pode haver outras limitações práticas, pois se você usar um despachante de dois gadgets, isso ocupará outro registrador. (É possível alternar os gadgets despachantes e os registradores usados durante um exploit, se for necessária flexibilidade adicional.)

**P: O paradigma de dois gadgets está integrado à geração automática de cadeias JOP do JOP ROCKET?**

**R:** Não, não está. A geração automática de cadeias JOP foi demorada para criar, e criei o conceito de despachante de dois gadgets depois de fazer isso. Posso tentar adicioná-lo em algum momento, mas não no futuro imediato. Mais provavelmente, só seria adicionado se eu fizesse uma reescrita completa do JOP ROCKET. Por padrão, o JOP ROCKET criará diferentes variações de cadeias JOP para todos os registradores disponíveis, mesmo que um gadget despachante tradicional não possa ser encontrado. Assim, não exigiria muito esforço para alguém adicionar seu próprio despachante de dois gadgets. Embora seja preciso prestar atenção aos registradores que precisam ser protegidos para o despachante de dois gadgets, pois a ferramenta não faria isso automaticamente.

**P: Quero tentar criar minha própria cadeia JOP. Posso fazer isso?**

**R:** Claro, para fins de tutorial, temos um binário disponível no GitHub – duas formas dele – com gadgets JOP criados artificialmente – tanto uma versão fácil quanto uma difícil. A versão difícil tem limitações de byte nulo. Você pode tentar fazer uma sem a geração automática de cadeias JOP, vendo se consegue encontrar seus próprios gadgets. Você também pode tentar com a geração automática de cadeias JOP. Com a geração automática de cadeias JOP, você precisa fazer trabalho adicional ao lidar com bytes nulos. Suponho que essa possa ser uma área para trabalho adicional no futuro – automatizar parte disso.

**P: Por que o JOP ROCKET usa um estilo mais antigo de Python? Você vai mudá-lo para Python moderno?**

**R:** Foi criado primeiro há vários anos, e eu não tinha intenção na época de compartilhá-lo. Inicialmente, só o enviei para a DEFCON por acaso. Infelizmente, as diferenças entre o Python moderno e o antigo são tais que seria muito não trivial mudar o JOP ROCKET, e há muitas funções complexas onde as diferenças entrariam em jogo. O JOP ROCKET também é muito grande, e eu não me lembro necessariamente de cor de todos os lugares onde mudanças seriam necessárias. Mais provavelmente, eu faria uma reescrita completa do JOP ROCKET, tornando também partes dele muito mais modulares e compactas do que é atualmente. Existem vários novos recursos que eu gostaria de adicionar se fizesse isso, e eu poderia fazer algumas coisas muito legais se fizesse. Não tenho planos no futuro imediato, mas poderia ser nos próximos um a três anos. Nunca diga nunca, porém, pois às vezes posso reescrever código muito rapidamente. Posso fazer outras atualizações no JOP ROCKET atual durante esse período, pois atualizações menores são mais fáceis do que uma reescrita completa.

**P: Quem é “nós”?**

**R:** O criador do JOP ROCKET é o Dr. Bramwell Brizendine. Isso foi originalmente o tema de sua tese de doutorado, mas cresceu e mudou muito desde então. Um de seus alunos, Austin Babcock, envolveu-se na pesquisa de JOP como estudante de graduação e continuou durante seu mestrado em Ciência da Computação. Durante esse período, Austin foi coautor de vários artigos e copalestrante em vários eventos. Austin fez contribuições importantes para a mecânica de como o JOP funciona. Ele mais tarde se juntou como colaborador do JOP ROCKET, introduzindo principalmente otimizações e melhorias de código. Austin fez vários exploits JOP. Um deles está no ExploitDB.

**P: Quais são as coisas mais “novas” em JOP que vocês fizeram?****A:** Bem, existe o dispatcher de dois gadgets, o que torna o JOP possível com inúmeros binários, já que o gadget dispatcher não é mais obscuro. Isso é enorme – porque em muitos casos a falta de um gadget dispatcher válido seria limitante – simplesmente não é mais o caso. Também introduzimos alguns dispatchers alternativos de gadget único, embora a maioria não pareça comum (Andrew Kramer pode ser creditado por alguns deles). Também introduzimos o "JOP sem shellcode", que evita a necessidade de contornar o DEP e incorpora a funcionalidade de um shellcode diretamente em um JOP. Fizemos um pouco disso no HITB e mais no @Hack 2021 (Black Hat MEA). O @Hack não foi filmado, embora exista um artigo muito detalhado sobre ele. Um clipe dele em ação pode ser visto em alguns dos vídeos de demonstração sem som do @Hack 2021: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV . Tive alguns alunos que aceitaram o desafio do JOP sem shellcode – isso é algo que pode exigir maior habilidade e domínio de ataques de reutilização de código.

**P: O JOP ROCKET funciona com binários Linux?**

**R:** Não, infelizmente não funciona.

**P: O JOP ROCKET funciona com binários de 64 bits?**

**R:** Não, não por enquanto.

**P: Qual é a abordagem geral do JOP?**

**R:** Leia nossos artigos ou assista às nossas palestras. Fizemos uma quantidade enorme de trabalho para expandir o que pode ser feito com o JOP. Praticamente não havia documentação sobre JOP antes da nossa pesquisa, e criamos muitas novas técnicas práticas para o JOP.

**P: Sou pesquisador acadêmico e quero fazer algo com JOP, como um artigo ou apresentação. Posso entrar em contato com vocês?**

**R:** Claro, você pode entrar em contato conosco se estiver planejando fazer um artigo ou algum novo projeto. Você pode me alcançar em bramwell.brizendine  AT gmail . Posso repassar para Austin se ele estiver interessado. Potencialmente, podemos até estar interessados em colaborar. Por favor, cite-nos se você usar nossa pesquisa de alguma forma para o JOP. Provavelmente, a abordagem mais prática para pesquisas envolvendo JOP seria introduzir algumas defesas contra o JOP ou mitigações para ele. Já fomos contatados antes.

**P: Outras pessoas já fizeram JOP?**

**R:** Não é comum e, antes da nossa primeira palestra na DEFCON, era extremamente raro. Certamente aumentamos muito a conscientização sobre isso. Anteriormente, ensinei isso em um curso de doutorado em Exploração Avançada de Software por três anos, então dezenas de alunos criaram exploits de JOP. Não sei quantas pessoas fazem isso no mundo real—certamente as pessoas podem fazer agora com o JOP ROCKET. Também tive diferentes alunos de graduação fazendo exploits de JOP. Não há razão especial para que tenha que ser um estudante de doutorado - qualquer pessoa com forte competência em exploração e ataques de reutilização de código. Com o número de palestras que fizemos e artigos que escrevemos – juntamente com inovações como o dispatcher de dois gadgets – não há razão para que alguém habilidoso com ROP não pudesse aprender.

**P: Por que o JOP ROCKET foi necessário?**

**R:** Sem o JOP ROCKET, você descobriria apenas uma fração dos gadgets de JOP, e eles estariam desorganizados, então encontrar algo seria como procurar uma agulha em um palheiro. Muitos gadgets de JOP do mundo real são gadgets não intencionais que não ocorrem naturalmente, então, a menos que você fosse algum tipo de sábio muito dedicado e criasse suas próprias ferramentas ou scripts, você perderia muita coisa, se estivesse tentando fazer um exploit de JOP completo, livre de gadgets de ROP. Há também coisas como gadgets dispatcher, que você teria que, de alguma forma, encontrar magicamente por conta própria, mesmo em formas não intencionais. Há uma boa razão pela qual o JOP era muito raro e raramente mencionado antes do nosso trabalho. Isso não significa que seja comum agora. Antes do JOP ROCKET, você teria vários problemas significativos para superar a fim de escrever um exploit. Agora, com o JOP ROCKET, esses problemas são superados e você pode construir o seu próprio com gadgets de JOP ou talvez adaptar uma cadeia de JOP criada por meio da geração automática de cadeias de JOP.

**P: O JOP pode ser mais fácil que o ROP?**

**R:** Na verdade, ouvi de alguns alunos que o JOP é mais fácil que o ROP – e pode ser – com o gadget certo e usando nossa abordagem inovadora para o gadget dispatcher com múltiplos pivôs de pilha. Observe que a palavra-chave aqui é "pode ser". Isso é verdade apenas em circunstâncias especiais, como sem restrições de byte nulo e com muitos gadgets de pivô de pilha, e assumindo que exista um gadget dispatcher válido.

**P: Para quem é o JOP?**

**R:** Eu acho que principalmente para pessoas que são habilidosas em ataques de reutilização de código e querem se desafiar, tentando algo de vanguarda – embora nem todo JOP precise ser "difícil". Se você consegue fazer JOP, isso é uma medalha de honra para usar. Se você criar um exploit de JOP, publique-o no ExploitDB e coloque um link para o JOP ROCKET para ajudar a aumentar a conscientização. O JOP também pode ser para pessoas que simplesmente querem evitar o uso de ROP – pode haver uma mitigação em vigor para detectar gadgets de ROP. JOP não é ROP, e você pode fazer um exploit de JOP completo sem um único gadget de ROP.

**P: Eu fiz a geração automática de cadeias de JOP, e ela criou muitas cadeias diferentes para VirtualAlloc e VirtualAlloc. Por que há tantas?**

**R:** Eu abordo o JOP do ponto de vista de que certos registradores manterão um ponteiro para o gadget dispatcher e um ponteiro para a tabela de despacho, então esses registradores estão ocupados. Gadgets funcionais (mais semelhantes aos gadgets normais de ROP) chamarão o gadget dispatcher, que então avança a posição na tabela de despacho. O JOP ROCKET, portanto, cria diferentes cadeias usando diferentes combinações de registradores. Alguns registradores serão "reservados" para o gadget dispatcher e para a tabela de despacho, embora, se você quiser, possa alternar de um para o outro quantas vezes quiser. Alguns registradores terão cadeias de JOP mais desejáveis - no sentido de que talvez tenham gadgets "mais fáceis" de usar. Então gostamos de oferecer opções. Por padrão, o JOP ROCKET gerará cinco para cada, então, se houver um problema com um, talvez você tenha outros para examinar. Além disso, o JOP ROCKET os gerará mesmo que um gadget dispatcher desejável não seja encontrado, pois sempre pode haver alternativas ou dispatchers de dois gadgets. (O JOP ROCKET encontra dispatchers de dois gadgets, mas atualmente não os incorpora à geração de cadeias de JOP.) Assim, voltando à pergunta, o JOP ROCKET tentará fornecer muitas opções, e cabe ao usuário avaliá-las e determinar qual é a mais desejável ou mais fácil de trabalhar.

**P: O JOP ROCKET não está me dando bons resultados para a geração automática de cadeias de JOP. Por que isso?**

**R:** Em alguns casos, pode haver alguns bugs, mas também é importante lembrar que a geração automática de cadeias de JOP funciona com base no fato de que você está usando múltiplos pivôs de pilha (veja palestras, artigos). Você deve fornecer o valor de pivô desejado, pois ele só gerará resultados com base no padrão. Pode haver um pivô de pilha excelente que seja muito grande, e você pode perdê-lo, porque está fora do seu intervalo. Portanto, você absolutamente deve calcular o intervalo de pivôs de pilha aceitáveis, fornecendo o mínimo e o máximo. Você sempre pode ajustar as coisas depois com padding - não precisa ser preciso.

**P: Existem "vulnerabilidades" com o JOP em compiladores?**

**R:** Na verdade, sim, com o VisualStudio 2015,  tudo o que encontramos compilado com o Developer Prompt tinha alguns gadgets dispatcher altamente desejáveis que estavam sempre presentes! Eu ia incluir informações detalhadas sobre isso em uma palestra, mas foi cortado por falta de tempo. Talvez eu inclua isso separadamente mais tarde. A má notícia é que avaliamos todos os binários feitos por outras edições do Visual Studio de outros anos, até cerca de um ano atrás, e não vimos isso se repetir. Embora possa ser bom ter excelentes gadgets dispatcher, eles não são necessários, como descrito em outro lugar, com o novo dispatcher de dois gadgets que introduzimos. Além disso, isso não é realmente uma vulnerabilidade, mas apenas uma maneira de garantir que o JOP estivesse prontamente acessível, assumindo que houvesse alguma vulnerabilidade real.

**P: O JOP ROCKET é uma ferramenta independente? Ele funciona com um depurador?**

**R:** Sim, é uma ferramenta independente que é análise estática, e não, não pode ser integrada a um depurador como o Mona. Existe uma opção dentro do JOP ROCKET para procurar em DLLs que ele possa encontrar, e ele pode pesquisar nelas, embora obviamente a maioria das DLLs do sistema Windows não seja utilizável devido a mitigações.  Você pode fazer o JOP ROCKET excluir ou incluir com base em mitigações. Como é análise estática, embora possa, opcionalmente, pesquisar em DLLs, ele pode perder algumas que não são encontradas no IAT ou cujas localizações não podem ser facilmente determinadas pelo JOP ROCKET. Essa é uma limitação inerente à análise estática. Por padrão, o JOP ROCKET pesquisará apenas a própria imagem, ou seja, o .exe, não as DLLs, para economizar tempo. Se você está tentando analisar um binário e observar DLLs que não são do sistema, então esse aplicativo deve estar instalado, e você deve fornecer o caminho dele. Se você não está preocupado com DLLs, então não precisa instalar o binário.

**P: Você pode comentar a seguinte citação: "O JOP ROCKET é uma ferramenta publicada em 2019 por [Bri19], que afirma gerar cadeias JOP completas de forma totalmente automatizada. Após uma inspeção mais detalhada, podemos ver que qualquer caso de uso no mundo real de sua técnica é composto por uma cadeia mista de ROP e JOP, onde apenas uma pequena parte do resultado é composta por JMP Gadget puro, enquanto o restante é composto por Gadgets que terminam com instrução RET, necessários para a configuração da cadeia JOP."**

**R:** Infelizmente, o acima reflete uma compreensão pobre do JOP. O JOP usa o paradigma do gadget dispatcher, que requer uma tabela de despacho e um gadget dispatcher. O endereço do gadget dispatcher e da tabela de despacho deve ser carregado em seus respectivos registradores para configurar o JOP. Embora isso pudesse ser realizado via JOP, para fins de compatibilidade, isso foi feito por meio de dois gadgets de ROP usando pop. Assim, após essa inicialização, composta por apenas dois gadgets de ROP, nenhum gadget de ROP adicional é usado. O número de gadgets de JOP usados pode variar de um a dezenas, dependendo da entrada fornecida pelo usuário. O problema aqui não está na ferramenta, mas em um mal-entendido sobre a ferramenta e o JOP. O JOP ROCKET de fato fornece exploits adequados para aplicações do mundo real, se você fornecer a entrada apropriada. De fato, isso foi usado em um curso de Exploração Avançada de Software anteriormente ministrado pelo autor, exigindo que os alunos usassem o JOP ROCKET para criar diferentes exploits de JOP. É decepcionante que os comentários acima tenham sido feitos em pesquisa acadêmica, pois apenas um máximo de dois gadgets de ROP é usado para cada cadeia de JOP. O único exploit de JOP do mundo real de que temos conhecimento no Exploit_DB é de um de nós, Austin Babcock, e, como ele explicou no Hack in the Box Amsterdam 2021, seu exploit espelha de perto o que foi encontrado pelo JOP ROCKET. Na maioria dos casos práticos, não faz realmente diferença se você usa dois gadgets de ROP para a configuração. Às vezes pode não haver gadgets de JOP apropriados para um binário, de uma forma que esteja em conformidade com o paradigma do gadget dispatcher, para a configuração do JOP. Preferiríamos que o JOP fosse viável em todos os binários, potencialmente, do que limitá-lo por desejo de ter 100% de JOP puro. Uma das maiores limitações do JOP, afinal, são os gadgets de JOP insuficientes. Escrevendo em 2024, não há atualizações ativas sendo feitas no JOP ROCKET, e em qualquer possível nova versão, que seria muito mais avançada e padronizada com base no muito mais novo ROP ROCKET, provavelmente haveria uma opção para JOP puro.
Baixar ferramenta