Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
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
oregami — Plugins e scripts do IDA para análise de frame de uso de registradores. | Kitploit
Ferramentas/GitHubGitHub/shemesh999/oregami
Análise EstáticaEngenharia ReversaDepuradoresAnálise de Binários
GitHubshemesh999/oregami

oregami

Plugins e scripts do IDA para análise de frame de uso de registradores.

Ver Repositório
1822215há 6 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

Oregami

"""
Para que serve este registo?
Hmm.. Vou apenas renomeá-lo para veryuniquename, fazer uma pesquisa textual e encontrar todas as referências!
Ok.. À espera que a pesquisa termine.. daqui a nada.. Feito!
Agora só preciso de perceber qual dos resultados da pesquisa é relevante para o quadro de uso atual do registo.
Não deve ser muito difícil, certo?
"""

Se isto lhe aconteceu (talvez mais de uma vez), está com sorte!
Basta Shift-X, e os seus problemas desaparecerão!

Você também pode renomear o registo no quadro de uso. Basta Shift-N e siga as instruções!
Além disso - em vez de alterar os tipos de todos os usos para um certo tipo, basta Shift-T uma vez.

E por último, mas não menos importante - se quiser definir um offset (como fazer Ctrl-R) para todos os usos deste registo, basta pressionar Shift-R.

Nota: Às vezes já existe outro plugin a usar Shift-T. Remova esse plugin - nunca o usou antes de qualquer maneira :-).

Instalação

Pré-requisitos

Este plugin usa sark para interagir com os scripts do IDA de uma forma confortável, e cachetools para armazenar em cache o scan do quadro, o que torna isto muito mais rápido.

Compatibilidade de versão do IDA

O Oregami suporta tanto IDA 7.x/8.x como IDA 9.0+.
Se estiver a usar IDA 9, certifique-se de que tem uma versão atualizada do sark que suporte IDA 9.

Nota: O IDA 9 introduziu a sua própria funcionalidade Shift-X. Se precisar de usar o Shift-X integrado do IDA em vez do do oregami, deve alterar o atalho do oregami no ficheiro do plugin.

Configuração do Python / sark

[Para python3]
pip3 install sark

[Para python2]
Se estiver a usar a variante python2 do IDA, deve em vez disso executar: pip2 install -U git+https://github.com/tmr232/[email protected]#egg=Sark

Note que o python2 não é ativamente suportado (já que o IDA migrou maioritariamente para python3, e eu também), por isso isto pode não funcionar.

Clonar o repositório

git clone https://github.com/shemesh999/oregami

Instalação do plugin

O código base do sark oferece muitos plugins. Um deles é: https://github.com/tmr232/Sark/blob/master/plugins/plugin_loader.py

Recomendamos copiá-lo para o seu diretório de plugins e depois executar o IDA uma vez com privilégios de administrador (para que ele possa criar os ficheiros plugins.list).
Depois de o fazer, pode adicionar novos plugins adicionando o caminho para eles a um dos ficheiros plugins.list criados (ex. um é criado na pasta cfg do IDA)

Agora, adicione a um dos ficheiros plugins.list:
FULLPATH\oregami\oregami_plugin.py
FULLPATH\oregami\regname_plugin.py
FULLPATH\oregami\typeregter_plugin.py
FULLPATH\oregami\offreg_plugin.py

Reinicie o IDA, e os plugins devem funcionar.

Alternativamente:
Copie todos os ficheiros (incluindo a pasta interna oregami, excluindo setup.py) para o diretório de plugins do IDA.

Uso como script

Além de ser usado como plugins, o oregami também pode ser usado para escrever os seus próprios scripts!

Para isso, deve primeiro instalar usando o ficheiro setup.py incluído. Ou seja, deve chamar:
'python setup.py develop', e a partir daí pode usar as classes e funções internas.
Note que recomendamos usar 'develop' e não 'install', para que se fizer pull de uma nova versão do oregami, funcione imediatamente.

Por exemplo:
-- script.py --

def find_func_usage(func_ea, reg='r0'):
    """
    Encontra e imprime todos os usos de um registo, incluindo a informação dos operandos específicos
    em que se encontra, e que operação realiza no operando.
    """
    import oregami
    rf = oregami.RegFrame(func_ea, reg)
    for insn in rf.get_instructions():
        print('Addr:{:x}'.format(insn.ea))
        for opnd in insn.operands:
            if opnd.uf_is_external:
                continue
            print('--opnd_idx:{} - {}'.format(opnd.n, oregami.UsageBits(opnd.op_flags)))

Scan do quadro de uso

Vamos assumir a seguinte sequência de opcodes:

ROM:01000010                    e_lis     r10, 0x4004 # 0x40040000              # Load Immediate Shifted
ROM:01000014                    e_add16i  r10, r10, 0x1337 # 0x40041337         # Add Immediate
ROM:01000020                    se_mr     r30, r31                              # Move Register
ROM:01000022                    cmplw     r11, r10                              # Compare Logical Word
ROM:01000026                    se_bge    loc_1000036                           # Branch if greater than or equal
ROM:01000028
ROM:01000028    loc_1000028:                                                    # CODE XREF: sub_0100000+144↓j
ROM:01000028                    e_stmw    r30, 0(r11)                           # Store Multiple Word
ROM:0100002C                    e_add16i  r11, r11, 8                           # Add Immediate
ROM:01000030                    cmplw     r11, r10                              # Compare Logical Word
ROM:01000034                    se_blt    loc_1000028                           # Branch if less than
ROM:01000036
ROM:01000036    loc_1000036:                                                    # CODE XREF: sub_0100000+136↑j
ROM:01000036                    e_add16i r10, r10, 8                            # Add Immediate
ROM:0100003A                    e_li      r11, 0                                # Load Immediate

Se fizermos scan do quadro de uso do registo r10, a partir do endereço 01000022, encontraremos três tipos de usos incluídos no quadro de uso.

1. Init

Isto incluirá as instruções que inicializam o valor do registo.
Podemos querer incluir apenas a última instrução que alterou o valor do registo (endereço 01000014 no exemplo), ou uma sequência de operações usadas para definir o valor inicial do registo (endereços 01000010 e 01000014 no exemplo).
A sequência de operações usada na inicialização do registo pode ser chamada de "init stage".
Pode escolher suportar um init stage, ou não, dependendo do parâmetro init_stage_bool na inicialização do RegFrame.

2. Pure

Isto incluirá as instruções que usam o valor do registo e não o alteram de forma alguma. Estas correspondem às linhas 01000022 e 01000030 no exemplo.

3. Break

Isto incluirá as instruções que usam o valor do registo, mas depois alteram o seu valor. Estas instruções podem ser vistas como incluídas em dois quadros de uso distintos - o que leva a elas, e o que se origina delas.
Isto corresponde à linha 01000036.

4. Out Break

Ao fazer o scan do registo de uso, chegar a uma operação init ou a uma operação break fará com que paremos o scan numa determinada direção.
Mas, também podemos parar o scan por causa de instruções fora do quadro de uso. Por exemplo, fazer o scan do quadro de uso do registo r11 a partir do endereço 01000030 irá parar na linha 0100003A.

Baixar ferramenta