
Saudações
Eu acho que chegou a hora. Tufado / fervendo / tem uma opinião. Com o lançamento do Hydra, a situação com ferramentas para engenheiros reversos mudou bastante. Se não houvesse muita escolha antes do que usar ( Ninja Binário , Hopper , JEB ou Radare2 não será mencionado aqui , porque nas empresas e comunidades de segurança da informação eu sei que elas usam um número muito pequeno de pessoas ou o limiar para inserir algumas (olá, Radar) muito alta ou a cobertura das arquiteturas é limitada apenas a x86 / x64 / ARM / ARM64 / MIPS ), agora temos um concorrente muito poderoso Hex-Rays
representado pela NSA com sua GHIDRA
.
Mas Hydra é tão boa? A IDA
é ruim (ou vice-versa)? Vamos acertar. Neste "artigo", tentei reduzir todos os prós e contras de ambas as ferramentas. Eu não tinha o objetivo de dizer que essa ou aquela ferramenta é melhor - tire suas próprias conclusões. Além disso, um e o segundo instrumento estão sendo desenvolvidos. E o artigo conterá apenas os resultados da comparação no momento da redação. A comparação será feita nas seguintes categorias:
- Arquiteturas Suportadas
Se você é um engenheiro reverso que trabalha apenas com plataformas Intel (x86 / x64), a presença de todas as outras não é realmente importante para você. Mas, se você tiver que trabalhar com muitos diferentes hospedagem de arquivos arquiteturas, quanto mais houver entrega padrão, melhor.
- Formatos suportados
O mesmo que no parágrafo anterior, apenas no que diz respeito aos formatos de dados.
- Qualidade de descompilação
Quase o componente mais necessário e importante é o descompilador. Não há muito sentido apenas com o desmontador, então aqui está uma visão geral do que a Ghidra
/ IDA
pode / produz.
- Extensibilidade, SDK / API
É importante que os engenheiros reversos trabalhem com várias arquiteturas, formatos e executem muitas tarefas semelhantes regularmente para poder escrever de forma rápida e conveniente módulos / carregadores / scripts adicionais. Também seria bom poder
depure-os. Vamos ver como está o desempenho de cada produto.
- A documentação
Parece, por que é necessário? Todos nós estamos acostumados a teclas de atalho, encontramos mana para escrever plugins, etc., também descobrimos a interface. Mas quanto tempo levou? Com a documentação, especialmente de alta qualidade, isso será mais rápido e mais calmo.
- Depurador (para arquivos investigados)
Um componente importante e necessário para um ambiente de engenharia reversa. Na estatística também é possível, mas na dinâmica é mais fácil.
- Velocidade de análise de arquivo
Se se tratar de arquivos muito grandes (de 10 MB ou mais), é importante que o ambiente de engenharia reversa não o force a sair para tomar um chá, deite-se enquanto o arquivo estiver sendo analisado.
- Conveniência de trabalho (interface, teclas de atalho, foco na entrada do teclado)
Apesar de o principal ser a funcionalidade, a forma como é apresentada ao usuário, como ele se parece, desempenha um papel importante. Se a interface permitir não usar o mouse para formulários e comandos usados com frequência, isso é uma vantagem. Se você precisar passar por várias janelas para adicionar um argumento de entrada a uma função, isso já é um sinal de menos. Compare.
- Lançamento da nova versão
A rapidez com que os bugs são corrigidos, os novos recursos são adicionados e, consequentemente, as novas versões são lançadas, é um indicador de uma boa equipe de desenvolvimento e de uma abordagem séria.
- A dificuldade de obter um kit de distribuição
Compre, faça o download, construa a distribuição - é isso aqui.
- Suporte
Deseja denunciar um erro aos autores, sugerir um novo recurso ou apenas perguntar algo - tudo isso é sobre suporte. Vamos descobrir quem é melhor - um produto pago ou gratuito.
- Comunidade
A presença da comunidade e a oportunidade de se comunicar com ela, discutem problemas de desenvolvimento, perguntas sobre funcionalidade ou apenas recebem bons conselhos de pessoas conhecedoras (não de desenvolvedores) - essa é a comunidade.
- Colaboração no Projeto
O trabalho de várias pessoas em um projeto é um ponto importante o suficiente para ignorá-lo.
Comparação
1. Arquiteturas suportadas (IDA)
IDA Pro
, o IDA Pro
suporta um número muito grande de processadores e suas modificações. A lista é respeitável: https://hex-rays.com/products/ida/processors.shtml
A lista de processadores é diferente para o Starter
e Professional Edition
, 64 bits é suportado apenas na versão Pro (assim como na versão demo , graças ao slinkinone ). Plataformas no último são bastante raras, mas mesmo assim.
Se o trabalho não estiver focado na IoT, o Starter
suficiente; caso contrário, você terá que comprar uma versão Pro
.
A descompilação está disponível apenas para x86
/ x64
/ arm
/ arm64
/ PowerPC
, no primeiro semestre do próximo ano eles prometem lançar o descompilador MIPS
.
1. Arquiteturas suportadas (GHIDRA)
Não existe uma versão online da lista, então trago-a aqui:

Aqui, a lista é apresentada na forma de processadores principais (sem modificações), mas isso não significa que eles não são suportados. Descompiladores estão disponíveis para cada um dos módulos do processador.
A lista de formatos aqui: https://hex-rays.com/products/ida/file_formats.shtml
A lista é bastante grande. Além disso, existem plugins da comunidade que nunca serão adicionados à caixa, pois Para fazer isso, você precisará discutir o momento com Ilfak Gilfanov (o desenvolvedor principal).
Lista de formatos 1- andróide
- apk
- bootimg
- dex
- núcleo
- odex
- xml
- bplist
- coff
- complzss
- cpio
- ext4
- gzip
- ios
- apple8900
- btree
- decmpfs
- dmg
- dyldcache
- genérico
- ibootim
- img2
- img3
- img4
- ipsw
- png
- pré-ligação
- xattr
- iso9660
- java
- lzss
- omf
- sevenzip
- imagem esparsa
- alcatrão
- ubi
- xar
- yaffs2
- zip
- zlib
Lista de formatos 2- coff
- anão
- dwarf4
- elfo
- lx
- macho
- macos
- mz
- ne
- objc2
- objetivoC
- omf
- pdb
- pe
- pef
- ubi
- xcoff
A lista acima é apenas uma lista de diretórios em https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats
Outra lista de arquivos aqui: https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format
3. Descompilação da qualidade (IDA)
O descompilador de Ida funciona maravilhosamente com o código x86
/ x64
/ arm
/ arm64
(não posso dizer nada sobre o PowerPC
, porque ainda não o vi), que foi gerado por algum compilador padrão, a maioria dos quais produz uma listagem C pura.
Os desenvolvedores focaram inicialmente no código do MS-DOS, para levar em consideração artefatos de compiladores bastante antigos (daqui em diante, na interface em muitas janelas, existem
,
, es
/ ds
/ ss
/ fs
/ gs
( ds
- mesmo no MIPS!)), Até muito novo. É verdade que as otimizações do compilador da IDA
ativadas não estão indo tão bem e a exaustão se transforma em um inferno.
Com o código escrito em um compilador desconhecido para Ida (ou no assembler), os resultados se tornam muito ruins: o uso de uma calling convention
não padrão transforma uma lista descompilada em um conjunto de linhas quase ilegível.
A necessidade de definir manualmente os registros necessários na linha de entrada do protótipo da função através de __usercall
com seus @
e <>
, por um lado, é um grande __usercall
menos, especialmente quando há muitos registros, e por outro lado, o Hydra não possui isso, e existe apenas através da GUI, que não é É sempre conveniente se o número de registros usados for pequeno.
3. Qualidade da descompilação (GHIDRA)
Não conheço pessoas que dirão que o descompilador Hydra é legal. Aqui, para alegria, é mais provável que exista geralmente, e existe para cada processador suportado!
O descompilador Hydra tem muito lixo no código emitido, o que é incomum para o usuário do Ida, que muitas vezes distrai a compreensão da essência do que está acontecendo nele.
Mas o descompilador Hydra tem um ótimo recurso - ele possui um emulador de instruções, que permite jogar fora o lixo que não é usado e nunca será chamado, simplificando alguns pontos.
Além disso, o descompilador Hydra não se importa em quais registros os argumentos vêm - se eles forem acessados, eles serão usados.
Aqui eu gostaria de observar por que Hydra ou Ida têm seus próprios problemas particulares com a descompilação. O ponto é a orientação de cada produto. IDA
, como observei acima, foi criada com uma orientação no MS-DOS e, em geral, no x86, cobrindo gradualmente x64 e ARM. Portanto, apenas uma qualidade de escape maravilhosa para essas plataformas, mas absolutamente nenhuma cobertura para outras.
Para o Hydra, pelo contrário, ele foi criado com o objetivo de fazer engenharia reversa de dispositivos IoT. Daí o grande número de processadores suportados, uma descrição clara de cada um deles e a simples capacidade de criar novos. Mas, devido ao fato de os desenvolvedores terem tentado cobrir muitas arquiteturas, melhorar a exaustão do descompilador não se tornou uma prioridade.
4. Extensibilidade da funcionalidade (IDA)
O Ida permite escrever carregadores, plugins, depuradores e módulos de processador, bem como scripts diretamente na interface. Alguns podem ser escritos em python, o que é um pouco mais conveniente (por meio do plugin IDAPython , não escrito por desenvolvedores da IDA
, por Elias Bachaalany
).
O processo de desenvolvimento de plug-ins durante a versão 6.x
foi bastante complicado, pois documentação em falta estava ausente. Agora os tempos mudaram, escrever sua própria peça ficou mais fácil. Há um concurso realizado todos os anos, em que os desenvolvedores escolhem o melhor plugin em sua opinião (e a visão é bastante controversa). Por exemplo, no último concurso ganho, nunca adivinhe qual empreiteiro expansor funcional ... Acabou sendo um plugin que o KILLS Undo
suporta no IDA
! Simplesmente não há palavras. Os desenvolvedores pedem esse recurso há tanto tempo, mas até o GHIDRA
, ninguém queria mexer um dedo. E agora - por favor, remova o recurso interessante com o plugin - você ganhou, parabéns!
A depuração de plug-ins é fácil, especialmente se ele foi escrito em C ++. A depuração de scripts python ou IDC
é mais difícil e não existe uma maneira oficial.
Uma dor muito intensa no ânus começou quando a API foi completamente reescrita na versão 7.0
, tornando-a incompatível com versões mais antigas. Por um lado, os nomes das funções são esclarecidos, os argumentos extras são removidos e o desenvolvimento fica mais fácil. Mas, se você, como eu, desenvolveu plugins para as versões 6.x
e precisou transferir sua ideia para um novo SDK, ficou com dor de cabeça.
E então, na versão 7.1
, as mudanças ocorreram novamente e tudo teve que ser reparado de uma nova maneira.
4. Extensibilidade da funcionalidade (GHIDRA)
Ghidra
escrito em Java
(com um descompilador em C++
), com suporte para scripts Python
(via Jython
). GhidraDev
in GhidraDev
para Eclipse
está incluído no pacote padrão, permitindo criar modelos de projeto (que podem ser importados posteriormente para o IntelliJ IDEA
). O preenchimento automático no IDE e a documentação funcionam bem e leva meia hora para descobrir como escrever seu primeiro plug-in.
Além disso, na entrega básica, existem muitos scripts que foram escritos para quase todos os aplicativos possíveis. Eles também podem ser corrigidos, se necessário.
O uso do Eclipse
conveniente para depurar seus projetos durante o desenvolvimento.
5. Documentação (IDA)
IDA
documentação da IDA
é seu ponto fraco, e assim tem sido. Como na maioria dos desenvolvedores, o viés entra na funcionalidade e não na documentação. Daí o escasso arquivo HLP
que chega na entrega.
O livro " IDA Pro Book " não foi escrito por desenvolvedores e foi lançado apenas para a 6ª versão. Desde então, nenhum livro novo foi lançado, não há manuais para o desenvolvimento de plugins dos desenvolvedores.
Em algum lugar da versão 7.0
documentação começou a se transformar em uma versão da Web e uma descrição inadequada das funções da API do SDK.


5. Documentação (GHIDRA)
A documentação para Hydra, ao contrário de Ida, foi escrita simultaneamente com o desenvolvimento. A partir daqui, temos comentários sobre quase todas as funções da API chamadas, elementos de enumeração e classes. O arquivo de ajuda que acompanha a entrega e descreve a interface e as configurações do Hydra também é elaborado com capturas de tela e exemplos para, de fato, cada botão ou item de menu.


6. Depurador (IDA)
SIM ele é. E isso funciona. Windows, Linux, MacOS, além da capacidade de conectar via gdb
. Em relação ao último: para a maioria das plataformas não padrão, tive que escrever meu próprio módulo de depurador, agora existe a oportunidade de depurar via gdb para plataformas como: x86
/ x64
, ARM
/ AArch64
, PowerPC
, MIPS
, Motorola 68k
, Infineon TriCore
, Renesas RH850
. Lista completa aqui: https://hex-rays.com/products/ida/debugger/index.shtml#details
6. Depurador (GHIDRA)
Infelizmente, ainda não há depurador no domínio público. As docas do WikiLeaks
mencionaram alguns módulos de depuração. No entanto, sabe-se que a NSA está trabalhando nisso, e haverá um depurador!
Enquanto isso, por meio de plugins que expandem os recursos da interface, é possível escrever seu próprio depurador. Mas, aparentemente, ninguém faz isso.
7. Velocidade do trabalho (IDA)
Em arquivos grandes, Ida sopra muito menos Hydra, mas nem sempre. O analisador Ida é executado no modo de thread único e, em arquivos grandes, um núcleo é totalmente carregado enquanto o restante está ocioso. Num futuro próximo, os autores não vão mudar isso (das palavras dos desenvolvedores).
7. Velocidade do trabalho (GHIDRA)
Quando a conversa entre os dois reversores chega para discutir a velocidade desses sistemas Ida e Hydra, todos chegam à conclusão de que o Hydra leva muito tempo para processar arquivos grandes. Embora esteja escrito levando em consideração multithreading. E Java
culpado: mais pela plataforma cruzada, menos pela velocidade. No entanto, se você configurar a quantidade de memória, pilha e heap para a JVM
, bem como o número de encadeamentos, o trabalho será ligeiramente acelerado.
8. Usabilidade (IDA)
Sem dúvida, muitas pessoas conhecem as teclas de atalho de Ida de cor. Eles são simples e diretos, geralmente intuitivos. Muitos dos itens de menu e recursos do Ida podem ser chamados pelo teclado, o que é bastante conveniente.
Em relação à aparência, até a versão 6.x
foi utilizada uma interface gráfica auto-escrita. Além disso, os desenvolvedores mudaram completamente para o Qt
. A interface tornou-se definitivamente melhor. A localização das guias, botões e elementos da interface não mudou por muito tempo.
A partir daqui, os prós e os contras seguem. Prós - a interface é familiar, você não precisa procurar onde está e combater hábitos. Contras - alguns elementos permanecem rudimentares (o editor de estrutura parece um legado das versões antigas do Ida) ou não são usados 90% do tempo.

8. Conveniência do trabalho (GHIDRA)
Tudo é exatamente o oposto. Um novo produto no mercado, a diferença de teclas de atalho em comparação com Ida, está fazendo seu trabalho. A velocidade do trabalho, que por muito tempo trabalhando com Ida atingiu uma velocidade tremenda, começou a ceder em Hydra. Mas, é claro, com o trabalho prolongado nos últimos hábitos também aparecem, e isso não se torna tão difícil.
O Hydra possui muitos menus, o número de elementos em que às vezes é bastante grande e nem todos os itens possuem teclas de atalho. Mas, ao mesmo tempo, o configurador de configurações de teclas de atalho permite pendurar sua própria tecla de atalho em quase todos os comandos.
Porque Ghidra
escrito em Java
, os desenvolvedores usaram a funcionalidade básica do JDK
, a saber, o Swing
. Por isso, temos o que temos. Mas isso não pode ser chamado de menos de Hydra.
9. Lançamento de novas versões (IDA)
Você já reparou que, com o lançamento do Hydra, novas versões do Ida começaram a sair com mais frequência? Mas eu olhei atentamente. Você sabe o porquê? Claro, o ponto é a competição. Finalmente ela apareceu!
Anteriormente, novas versões do Ida raramente eram lançadas; Ida reluta em adquirir novas funcionalidades. Após relatar um bug, você não deve esperar que a correção que os desenvolvedores lhe enviaram apareça muito em breve em seus colegas. Não há patches do sistema, pois desenvolvedores corrigem os arquivos principais de cada cliente (marca d'água).
Parece que a velocidade de lançamento de novas versões do Ida aumentará devido à concorrência do produto.
9. Lançamento de novas versões (GHIDRA)
A regularidade do lançamento de novas versões do Hydra é bastante grande: cerca de seis versões foram lançadas desde que a fonte foi publicada.
Se você esperar muito tempo por uma nova versão de distribuição, poderá criar uma ramificação principal com o github . A primeira vez vai demorar mais de uma hora, mas vale a pena.
10. A dificuldade de obter um kit de distribuição (IDA)
Todo mundo conhece essa história: " Ilfak Gilfanov - lute contra a pirataria! ". Por esse motivo, o acesso às versões Pro
e Starter
dos kits de distribuição para compra se tornou muito difícil e sombrio. Para meros mortais que não têm acesso a dinheiro louco caixas de correio que não mail.ru
servidores de correio públicos, como gmail
, mail.ru
etc., não são possíveis distribuições. E, mesmo se você tiver seu próprio IP, seu site, precisará passar por muitas verificações, enviar varreduras, confirmações etc. E tudo para que a distribuição não seja publicada na Internet. Isso nem sempre ajuda.
Versões exageradas aparecem, mas raramente. Portanto, a maioria dos entusiastas de engenharia reversa está ocupada com distribuições antigas, uma vez mescladas, da ESET
e do antivírus chinês.
Há pouco tempo, versões oficiais, mas truncadas, para estudantes começaram a aparecer, sem decompiladores e muitas outras restrições (mais detalhes aqui ).
10. Dificuldade em obter uma distribuição (GHIDRA)
Parece que não há nada para escrever, mas. De fato, o acesso ao site principal da Hydra é proibido da Rússia, Israel e China. Precisa de uma VPN
ou Tor
(velocidade de download apropriada). Não há versões no github
, apenas códigos-fonte.
11. Suporte (IDA)
Quanto eu tive que me comunicar com o suporte da Hex-Rays
, sempre houve uma experiência diferente: algumas pessoas que trabalham no suporte são muito educadas e estão sempre prontas para ajudar. Parte: o desenvolvedor principal e a comunicação se tornaram rudes. Especialmente se a opinião não coincidir. Mas, provavelmente, essa é a natureza disso. O mesmo está em comunicação com os usuários na Internet.
Recentemente, descobriu-se que apenas eu me comunico com o apoio de meus amigos. Um bug muito antigo relacionado à perda de seleção durante a rolagem, que surgiu na versão 6.6, que todo mundo conhece, nunca foi degradado pelos desenvolvedores. Ele perguntou qual era o problema. E as respostas estão no estilo de: "Eu não quero me comunicar com uma pessoa que trata os usuários dessa maneira ". Infelizmente, a reputação funciona dessa maneira.
No entanto, os bugs e sugestões que relatei aos desenvolvedores foram corrigidos e levados em conta (não todos).
11. Suporte (GHIDRA)
Hydra tem um repositório no github
. Existem issues
e é aqui que você precisa relatar erros. A velocidade de resposta para alguns pode ser muito longa ou bastante rápida. Mas, os bugs não fecham exatamente assim, eles dizem, não queremos implementar isso. Tudo é considerado, levado em consideração. .
PR . .
12. (IDA)
, . , -, . , , , .
12. (GHIDRA)
: ghidra.re , -, @GHIDRA , github. , .
13. (IDA)
. , , , -, .
13. (GHIDRA)
. -, .
Conclusões
. , - . , Linux — // , , .
/ IDA
. , . .
, , Ghidra
. IDA
— .
— . . , Ghidra
, IDA
— . , , IoT — . .
, , . Obrigada
PS .
PPS 2 - .
PPPS . . netch80 .