15 KiB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.
Decompilador Wasm / Compilador Wat
Online:
- Use https://webassembly.github.io/wabt/demo/wasm2wat/index.html para descompilar de wasm
binário
para wattexto claro
- Use https://webassembly.github.io/wabt/demo/wat2wasm/ para compilar de wat para wasm
- você também pode tentar usar https://wwwg.github.io/web-wasmdec/ para descompilar
Software:
Decompilador .Net
https://github.com/icsharpcode/ILSpy
Plugin ILSpy para Visual Studio Code: Você pode tê-lo em qualquer sistema operacional você pode instalá-lo diretamente do VSCode, não é necessário baixar o git. Clique em **Extensões** e **pesquise ILSpy**
.
Se você precisa descompilar, modificar e recompilar novamente, você pode usar: https://github.com/0xd4d/dnSpy/releases **Clique com o botão direito -> Modificar Método** para mudar algo dentro de uma função
.
Você também pode tentar https://www.jetbrains.com/es-es/decompiler/
DNSpy Logging
Para fazer com que o DNSpy registre algumas informações em um arquivo, você pode usar essas linhas .Net:
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");
Depuração com DNSpy
Para depurar código usando o DNSpy, você precisa:
Primeiro, alterar os atributos da Assembleia relacionados à depuração:
De:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
Para:
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
E clique em compilar:
Em seguida, salve o novo arquivo em Arquivo >> Salvar módulo...:
Isso é necessário porque, se você não fizer isso, em tempo de execução, várias otimizações serão aplicadas ao código e pode ser possível que, ao depurar, um ponto de interrupção nunca seja atingido ou algumas variáveis não existam.
Então, se sua aplicação .Net está sendo executada pelo IIS, você pode reiniciá-la com:
iisreset /noforce
Então, para começar a depurar, você deve fechar todos os arquivos abertos e, dentro da Guia de Depuração, selecionar Anexar ao Processo...:
Em seguida, selecione w3wp.exe para anexar ao servidor IIS e clique em anexar:
Agora que estamos depurando o processo, é hora de pará-lo e carregar todos os módulos. Primeiro, clique em Debug >> Break All e depois clique em Debug >> Windows >> Modules:
Clique em qualquer módulo em Módulos e selecione Abrir Todos os Módulos:
Clique com o botão direito do mouse em qualquer módulo no Explorador de Assembléias e clique em Classificar Assembléias:
Decompilador Java
https://github.com/skylot/jadx
https://github.com/java-decompiler/jd-gui/releases
Depurando DLLs
Usando IDA
- Carregue rundll32
64 bits em C:\Windows\System32\rundll32.exe e 32 bits em C:\Windows\SysWOW64\rundll32.exe
- Selecione o depurador Windbg
- Selecione "Suspender na carga/descarga da biblioteca"
- Configure os parâmetros da execução colocando o caminho para a DLL e a função que você deseja chamar:
Então, quando você começa a depurar, a execução será interrompida quando cada DLL for carregada, então, quando o rundll32 carregar sua DLL, a execução será interrompida.
Mas como você pode chegar ao código da DLL que foi carregada? Usando este método, eu não sei como.
Usando x64dbg/x32dbg
- Carregue rundll32
64 bits em C:\Windows\System32\rundll32.exe e 32 bits em C:\Windows\SysWOW64\rundll32.exe
- Altere a Linha de Comando
_Arquivo --> Alterar Linha de Comando_
e defina o caminho da dll e a função que você deseja chamar, por exemplo: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\14.ridii_2.dll",DLLMain - Altere Opções --> Configurações e selecione "Entrada de DLL".
- Em seguida, inicie a execução, o depurador irá parar em cada dll principal, em algum momento você irá parar na Entrada da DLL da sua dll. A partir daí, basta procurar os pontos onde você deseja colocar um ponto de interrupção.
Observe que quando a execução é interrompida por qualquer motivo no win64dbg, você pode ver em qual código você está olhando na parte superior da janela do win64dbg:
Então, olhando para isso, você pode ver quando a execução foi interrompida na dll que você deseja depurar.
ARM & MIPS
{% embed url="https://github.com/nongiach/arm_now" %}
Shellcodes
Depurando um shellcode com blobrunner
Blobrunner irá alocar o shellcode dentro de um espaço de memória, irá indicar o endereço de memória onde o shellcode foi alocado e irá parar a execução.
Em seguida, você precisa anexar um depurador Ida ou x64dbg
ao processo e colocar um ponto de interrupção no endereço de memória indicado e continuar a execução. Dessa forma, você estará depurando o shellcode.
A página de lançamentos do github contém zips contendo os lançamentos compilados: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5
Você pode encontrar uma versão ligeiramente modificada do Blobrunner no seguinte link. Para compilá-lo, basta criar um projeto C/C++ no Visual Studio Code, copiar e colar o código e compilá-lo.
{% page-ref page="blobrunner.md" %}
Depurando um shellcode com jmp2it
jmp2it é muito semelhante ao blobrunner. Ele irá alocar o shellcode dentro de um espaço de memória e iniciar um loop eterno. Em seguida, você precisa anexar o depurador ao processo, iniciar a execução, esperar 2-5 segundos e pressionar parar e você se encontrará dentro do loop eterno. Pule para a próxima instrução do loop eterno, pois será uma chamada ao shellcode, e finalmente você se encontrará executando o shellcode.
Você pode baixar uma versão compilada do jmp2it dentro da página de lançamentos.
Depurando shellcode usando Cutter
Cutter é a GUI do radare. Usando o cutter, você pode emular o shellcode e inspecioná-lo dinamicamente.
Observe que o Cutter permite "Abrir Arquivo" e "Abrir Shellcode". No meu caso, quando abri o shellcode como arquivo, ele o descompilou corretamente, mas quando o abri como shellcode, não o fez:
Para iniciar a emulação no local desejado, defina um bp lá e aparentemente o cutter iniciará automaticamente a emulação a partir daí:
Você pode ver a pilha, por exemplo, dentro de um despejo hexadecimal:
Desofuscando shellcode e obtendo funções executadas
Você deve tentar o scdbg.
Ele irá informar coisas como quais funções o shellcode está usando e se o shellcode está decodificando a si mesmo na memória.
scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
O scDbg também conta com um lançador gráfico onde você pode selecionar as opções desejadas e executar o shellcode.
A opção Create Dump fará o dump do shellcode final se alguma alteração for feita no shellcode dinamicamente na memória útil para baixar o shellcode decodificado
. O start offset pode ser útil para iniciar o shellcode em um offset específico. A opção Debug Shell é útil para depurar o shellcode usando o terminal scDbg no entanto, acho que qualquer uma das opções explicadas anteriormente é melhor para esse assunto, pois você poderá usar o Ida ou o x64dbg
.
Desmontando usando o CyberChef
Carregue o arquivo do seu shellcode como entrada e use a seguinte receita para descompilá-lo: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)
Movfuscator
Este ofuscador muda todas as instruções para mov
sim, muito legal
. Ele também usa interrupções para mudar os fluxos de execução. Para obter mais informações sobre como funciona:
- https://www.youtube.com/watch?v=2VF_wPkiBJY
- https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf
Se você tiver sorte, o demovfuscator desofuscará o binário. Ele tem várias dependências.
apt-get install libcapstone-dev
apt-get install libz3-dev
E instale o keystone `apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`
Se você está jogando um CTF, esta solução alternativa para encontrar a flag pode ser muito útil: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
Delphi
Para binários compilados em Delphi, você pode usar https://github.com/crypto2011/IDR
Cursos
- https://github.com/0xZ0F/Z0FCourse_ReverseEngineering
- https://github.com/malrev/ABD
Desofuscação binária
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de cibersegurança? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.