[Source + Download] Visualizador de Funções Exportadas

Started by Dark_Side, 23 de December , 2007, 07:36:39 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dark_Side

Hi,

Voltando à programação, escrevi mais um outro aplicativo. Optei por utilizar Delphi devido à facilidade de se trabalhar com interfaces gráficas oferecida por ele.

A função deste aplicativo é carregar uma DLL, obter os nomes e os respectivos endereços das funções exportadas por ela e, em seguida, mostrá-los em uma lista. Uma vez listadas, o programa oferece alguns recursos básicos para trabalhar com as funções, como copiar e salvar, por exemplo.

O programa é bastante simples. No geral, o que se deve fazer é escolher uma DLL da lista ou escolher outra manualmente, através do seu nome de arquivo.

Ao desenvolver uma rotina escrita em Assembly, que posteriomente seria utilizada para gerar um shellcode, por exemplo, você poderia utilizar os endereços das funções contidas na DLL kernel32.dll diretamente. Exemplo com a função ExitProcess:


Declaração:

VOID ExitProcess(UINT uExitCode);

Uso:

ExitProcess(0);

Endereço:

7C81CAA2

Exemplo de uso em assembly:


xor eax,eax        ; Zera o registrador
push eax           ; Argumento da função -> valor de EAX = 0
mov eax,0x7C81CAA2 ; Armazena em EAX o endereço da função
call eax           ; Chama a função


Seguem algumas imagens do programa:





















Source Code + Executável:

http://one.xthost.info/darkside17/proje ... uncoes.rar

Bye ;)

OnlyOne

No céu toca Joy Division


rog

putz esse e bem interessante mesmo

sera que vc conseguiria fazer um desse para o parsing de uma relocation table ?

rog
realty.sys is corrupt :  reboot the universe (Y/N)

lcs

Caramba.. pow.. quando eu vejo o que esse cara faz. eu fico ateh triste.. ha um longo caminho a percorrer...

agora o que podemos fazer com isso?
Pra que viver sem sentido.


Asskiller


Agressor

Quote from: lcs on 23 de December , 2007, 09:59:43 PM
Caramba.. pow.. quando eu vejo o que esse cara faz. eu fico ateh triste.. ha um longo caminho a percorrer...

agora o que podemos fazer com isso?

Rapaz, nao fique triste nao, isso dai eh recurso padrao de varios debuggers como o immunity e tals.

http://www.immunityinc.com/products-immdbg.shtml

Quote from: lcs on 23 de December , 2007, 09:59:43 PM
agora o que podemos fazer com isso?


Bem o Dark_Side jah ta falando ai, manoh. Repara:


Quote from: Dark_Side on 23 de December , 2007, 07:36:39 AM

xor eax,eax        ; Zera o registrador
push eax           ; Argumento da função -> valor de EAX = 0
mov eax,0x7C81CAA2 ; Armazena em EAX o endereço da função
call eax           ; Chama a função


Isso dai eh bom pra fazer shellcode pra o winsux, tipow, repara que o endereco da  funcao exit na API nesse

pacote de servico eh 0x7C81CAA2, ele ta zerando o acumulador extendido (eax) e empurra pra pilha o valor que

estah armazenado nele (endereco do "ARGUMENTO" de exit), que eh 0 (status de sucesso):


C:\>net helpmsg 0

A operação foi concluída com êxito.


Quando uma funcao eh chamada (call ) ele eh executada o seus argumentos sao pegos do topo da stack. 

mov eax,0x7C81CAA2 ;

Acima o endereco eh copiado para eax e logo em seguida a funcao eh executada e pega o 0 do topo da pilha.


call eax           ; Chama a função


Isso dai acima eh a mesma coisa que chamar (call) o endereco, soh que como voce pode ver o endereco de

memoria eh copiado para e eax e o mesmo que eh usado para a chamada.

Enfim, acho que voces devem saber como fazer shellcode  ::) Com relacao ao nosso amigo ali:

Quote from: Asskiller on 21 de August , 2009, 06:28:49 PM
Poderia upar a source e executavel novamente ?


Entao cara, como ja falei isso dai eh recurso de muitos debuggers, tipow, quando voce carrega um prog nele

carrega junto varias API's entao voce vai ter que seguir alguns passos para visualizar os enderecos das funcoes.

Vale lembrar que esse endereco varia muito, cada pacote de serviço possui ele em um determinado lugar. Enfim,

vamos lah usando o olly (http://www.ollydbg.de/odbg108b.zip):

F3 para procurar um prog qualquer (nao dll =). Aqui carreguei o attrib.exe que ta no %systemroot%\system32 .

Depois de carregado na memoria voce vai la e clica no E:



Abaixo voce pode ver todos os modulos carregados na memoria (API's)



Agora se voce quiser ver as funcoes e endereço das mesmas na memoria voce vai la e clica em 'view names',

mandei ali o kernel32:




Pronto! Voce nao precisa mais do programa do Dark_Side! =) Ali voce pega o endereco de memoria (pra call),

pega o nome das func's ali da direita e tals. No immunity (gosto desse XD) voce vai lah que da ateh pra carregar

as dll's =7

[]'s

[BANIDO]

Overburn