É possível "descompilar" um .exe do Windows? Ou pelo menos visualizar a Assembléia?


237

Um amigo meu baixou alguns malwares do Facebook e estou curioso para ver o que ele faz sem me infectar. Eu sei que você não pode realmente descompilar um .exe, mas posso pelo menos vê-lo no Assembly ou anexar um depurador?

Edite para dizer que não é um executável .NET, sem cabeçalho da CLI.


3
malware do facebook ?? você poderia explicar isso?
Aditya Mukherji 7/08/08

Desculpem a resposta super tardia ... mas do jeito que acho que aconteceu foi: ela executou um malware, que em algum momento enviou spam para todos os seus contatos no FB (eu) com um link para um "vídeo" que solicitou a você baixe um "novo codec". Estou assumindo que ele se comportou como um verme nesse sentido.
21420

Respostas:


448

Com um depurador, você pode percorrer o assembly do programa interativamente.
Com um desmontador , você pode visualizar a montagem do programa em mais detalhes.
Com um descompilador , você pode transformar um programa novamente em código-fonte parcial, supondo que você saiba em que foi escrito (que você pode descobrir com ferramentas gratuitas como o PEiD - se o programa estiver compactado, será necessário descompactá-lo primeiro OU Detecte-o-Fácil se você não encontrar o PEiD em nenhum lugar (o DIE tem uma forte comunidade de desenvolvedores no github atualmente).

Depuradores:

  • OllyDbg , free, um bom depurador de 32 bits, para o qual você pode encontrar vários plugins e scripts criados pelo usuário para torná-lo ainda mais útil.
  • WinDbg , grátis, um depurador bastante capaz da Microsoft. O WinDbg é especialmente útil para examinar os componentes internos do Windows, pois ele sabe mais sobre as estruturas de dados do que outros depuradores.
  • SoftICE , SICE para amigos. O comércio e o desenvolvimento foram interrompidos em 2006. O SoftICE é uma ferramenta hardcore que roda sob o sistema operacional (e interrompe todo o sistema quando invocado). O SoftICE ainda é usado por muitos profissionais, embora possa ser difícil de obter e talvez não funcione em algum hardware (ou software - ou seja, não funcionará nas placas gfx Vista ou NVIDIA).

Desmontadores:

  • IDA Pro (comercial) - desmontador / depurador topo de linha. Utilizado pela maioria dos profissionais, como analistas de malware, etc. Custa alguns dólares (existe a versão gratuita , mas é bastante limitada)
  • W32Dasm (gratuito) - um pouco datado, mas faz o trabalho. Acredito que o W32Dasm é abandonware atualmente e existem inúmeros hacks criados por usuários para adicionar algumas funcionalidades muito úteis. Você precisará procurar ao redor a melhor versão.

Descompiladores:

  • Visual Basic: VB Decompiler , comercial, produz um bytecode um tanto identificável.
  • Delphi: DeDe , grátis, produz código fonte de boa qualidade.
  • C: HexRays , comercial, um plugin para o IDA Pro da mesma empresa. Produz ótimos resultados, mas custa muito dinheiro, e não será vendido a ninguém (ou pelo que ouvi).
  • .NET (C #): dotPeek , gratuito, descompila os assemblies do .NET 1.0-4.5 para C #. Suporte para arquivos .dll, .exe, .zip, .vsix, .nupkg e .winmd.

Algumas ferramentas relacionadas que podem ser úteis para o que você está fazendo são editores de recursos, como o ResourceHacker (gratuito) e um bom editor hexadecimal, como o Hex Workshop (comercial).

Além disso, se você estiver fazendo uma análise de malware (ou usar o SICE) , sugiro sinceramente executar tudo dentro de uma máquina virtual, ou seja, o VMware Workstation . No caso do SICE, ele protegerá seu sistema real dos BSODs e, no caso de malware, protegerá seu sistema real do programa de destino. Você pode ler sobre a análise de malware com o VMware aqui .

Pessoalmente, eu rolo com Olly, WinDbg & W32Dasm e algumas ferramentas utilitárias menores.

Além disso, lembre-se de que desmontar ou até depurar o software de outras pessoas geralmente é contra o EULA no mínimo :)


16
Aprecio o último parágrafo em sua generalidade, bons conselhos, mas é divertido no contexto da pergunta: duvido que um vírus venha com um EULA! ;-)
PhiLho

4
Na verdade, alguns malwares e até cavalos de Troia nos últimos tempos têm EULAs neles (ah, esses russos ..) É claro que eles podem ser (e são) ignorados pelas pesquisas, porque pode-se presumir que ninguém se apresentará para processá-los. .. Além disso, eles geralmente são escritos muito mal para significar algo em tribunal em qualquer caso.
Anon6439

2
Observe que a versão anterior do IDA Pro é gratuita para uso não comercial.
Simon Buchan

6
Note-se que a maioria dos malwares nos dias de hoje (pelo menos malwares compilado) pode facilmente detectar se ele está sendo executado em VMWare, Virtual PC, vinho, VirtualBox, etc.
Mick

Se você estiver executando em uma VM, atente para o ataque Blue Pill.
Siqi Lin 25/08/10

44

O excelente post de psoul responde à sua pergunta, para não replicar o bom trabalho dele, mas acho que ajudaria a explicar por que essa é uma pergunta ao mesmo tempo perfeitamente válida, mas também terrivelmente boba. Afinal, este é um lugar para aprender, certo?

Programas de computador modernos são produzidos por meio de uma série de conversões, começando com a entrada de um corpo de instruções de texto legível por humanos (chamado "código-fonte") e terminando com um corpo de instruções legível por computador (chamado alternativamente de "binário" ou "máquina" código").

A maneira como um computador executa um conjunto de instruções de código de máquina é basicamente muito simples. Cada ação que um processador pode executar (por exemplo, ler da memória, adicionar dois valores) é representada por um código numérico. Se eu lhe dissesse que o número 1 significava gritar e o número 2 significava rir, e depois segurava cartas com 1 ou 2 esperando que você gritasse ou risse de acordo, eu usaria o que é essencialmente o mesmo sistema que um computador usa para operar.

Um arquivo binário é apenas um conjunto desses códigos (geralmente chamados de "códigos operacionais") e as informações ("argumentos") em que os códigos operacionais atuam.

Agora, a linguagem assembly é uma linguagem de computador em que cada palavra de comando na linguagem representa exatamente um código operacional no processador. Há uma tradução direta 1: 1 entre um comando da linguagem assembly e um código operacional do processador. É por isso que o conjunto de codificação para um processador x386 é diferente do conjunto de codificação para um processador ARM.

A desmontagem é simplesmente esta: um programa lê o binário (o código da máquina), substituindo os códigos op por seus comandos equivalentes na linguagem assembly, e gera o resultado como um arquivo de texto. É importante entender isso; se o seu computador pode ler o binário, você também pode ler o binário, manualmente, com uma tabela de código operacional na mão (ick) ou através de um desmontador.

Os desmontadores têm alguns truques novos e tudo mais, mas é importante entender que um desmontador é, em última análise, um mecanismo de busca e substituição. É por isso que qualquer EULA que o proíba está soprando ar quente. Você não pode imediatamente permitir que o computador leia os dados do programa e também proibi-lo de ler os dados do programa.

(Não me interpretem mal, houve tentativas de fazê-lo. Eles funcionam tão bem quanto o DRM em arquivos de música.)

No entanto, existem advertências na abordagem de desmontagem. Nomes de variáveis ​​são inexistentes; tal coisa não existe na sua CPU. As chamadas à biblioteca são confusas como o inferno e geralmente exigem a desmontagem de outros binários. E é difícil ler a montagem nas melhores condições.

A maioria dos programadores profissionais não consegue sentar e ler a linguagem assembly sem sentir dor de cabeça. Para um amador, isso simplesmente não vai acontecer.

De qualquer forma, esta é uma explicação um pouco obscurecida, mas espero que ajude. Todos podem se sentir livres para corrigir quaisquer distorções da minha parte; faz algum tempo. ;)


1
Isso explica a desmontagem, mas eu adoraria ouvir uma elaboração sobre a descompilação. É provável que seja tão infrutífero? Quais são as advertências disso?
Prometheus

@has: descompilar código nativo é um desafio bastante difícil, muitas vezes impossível. Os otimizadores são extremamente agressivos, frequentemente convertendo o código fonte em nada. Você não pode descompilar nada.
11nspectable


11

Qualquer depurador decente pode fazer isso. Experimente o OllyDbg . (edit: que possui um ótimo desmontador que até decodifica os parâmetros para chamadas WinAPI!)



6

Claro, dê uma olhada no IDA Pro . Eles oferecem uma versão de avaliação para que você possa experimentá-lo.


6

Se você está apenas tentando descobrir o que um malware faz, pode ser muito mais fácil executá-lo sob algo como a ferramenta gratuita Process Monitor que será reportada sempre que tentar acessar o sistema de arquivos, o registro, as portas, etc.

Além disso, o uso de uma máquina virtual como o servidor VMWare gratuito é muito útil para esse tipo de trabalho. Você pode criar uma imagem "limpa" e depois voltar sempre que executar o malware.


4

Você pode obter algumas informações visualizando-as em montagem, mas acho que a coisa mais fácil é iniciar uma máquina virtual e ver o que ela faz. Certifique-se de que você não possui compartilhamentos abertos ou algo do tipo que possa atravessar;)


Sim, eu pensei sobre isso, mas eu prefiro não passar pelo incômodo de configurar uma VM apenas para matá-la :) #
28580

1
É verdade que é um aborrecimento para este caso, mas sempre acho útil manter uma VM disponível para testar novos softwares ou coisas assim. Posso fazer o que quiser e apenas optar por não salvar o estado no final e voltar à VM limpa para a próxima execução.
Rob Prouse

4

Também vale a pena conferir o Boomerang .


Na verdade não. ele trava e queima por algo mais complicado do que os executáveis ​​mais triviais.
shoosh


3

Ainda não acredito que ninguém tenha dito nada sobre o Immunity Debugger .

O Immunity Debugger é uma ferramenta poderosa para gravar explorações, analisar malware e fazer engenharia reversa de arquivos binários. Inicialmente, foi baseado no código-fonte do Ollydbg 1.0, mas com o bug da pesquisa de nomes corrigido. Possui uma API Python bem suportada para fácil extensibilidade, para que você possa escrever seus scripts python para ajudá-lo na análise.

Além disso, há um bom que Peter, da equipe Corelan, escreveu chamado mona.py , excelente ferramenta btw.


2

Se você deseja executar o programa para ver o que ele faz sem infectar o computador, use com uma máquina virtual como VMWare ou Microsoft VPC ou um programa que possa proteger o programa como o SandboxIE




2

Eu diria que em 2019 vale a pena conferir Ghidra ( https://ghidra-sre.org/ ). É de código aberto (e gratuito) e possui recursos fenomenais de análise de código, incluindo a capacidade de descompilar todo o caminho de volta ao código C razoavelmente legível.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.