Como carregar um driver no Windows 7?

32 views
Skip to first unread message

Fernando Mercês

unread,
Nov 25, 2014, 2:09:33 PM11/25/14
to ccppb...@googlegroups.com
Amigos,

A dúvida não é sobre código em si, mas peço licença para pedir ajuda pois sei que há um pessoal que conhece de programação de drivers aqui.

Tenho um arquivo a.sys, que é componente de um malware. A questão é que o arquivo que insere este .sys no sistema eu não tenho e queria saber como inserir para ver o funcionamento.

A estrutura do .sys (que eu estou admitindo que é um .sys simplesmente por ter a flag subsystem==1) é essa: http://pastebin.com/dNUrzyba

Ele tem essa seção INIT. Como carrego isso? Tentei com o sc.exe:

sc.exe create teste binPath =C:\a.sys

O serviço é criado mas dá um erro ao carregar (erro 193: 0xc1 - Windows could not start teste service on Local Computer).

Obrigado.

Att,

Fernando Mercês
Linux Registered User #432779
www.mentebinaria.com.br
------------------------------------
"Ninguém pode ser escravo de sua identidade; quando surge uma possibilidade de mudança é preciso mudar". (Elliot Gould)

Rodrigo Strauss

unread,
Nov 26, 2014, 1:55:42 PM11/26/14
to ccppbrasil
O driver é assinado? Para que o Windows carregue ele precisa ser assinado ou você precisa desligar a verificação de assinatura.

Apesar do local no registro ser o mesmo para drivers e serviços, não sei se o "sc create" instala drivers. Um google por "install .sys driver" retorna bastante coisa.

Sobre da carga, viu o Event Viewer? Lá deve ter alguma dica do motivo.


Rodrigo Strauss
http://www.1bit.com.br
@rodrigostrauss

--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------

Fernando Mercês

unread,
Nov 26, 2014, 2:11:15 PM11/26/14
to ccppb...@googlegroups.com
Oi Strauss.

Tudo que achei na internet era relativo a instalar o driver com o sc. Eu tentei mas sem sucesso. A perspectiva minha é um pouco diferente porque eu não tenho ideia do que é o arquivo, entende? Diferente de vocês que criam, eu não sei como isso foi criado e estou assumindo que é um driver por conta da estrutura do PE que mostrei.

Criei no registro e também usei "sc create". Mesmo desabilitando a checagem de assinatura, não consegui levantar o serviço que criei e chamei de "a":

---
C:\Users\mal\Desktop>bcdedit.
exe -set TESTSIGNING ON
The operation completed successfully.

C:\Users\mal\Desktop>bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
The operation completed successfully.

C:\Users\mal\Desktop>bcdedit.exe -set NOINTEGRITYCHECKS ON
The operation completed successfully.

C:\Users\mal\Desktop>net start a
System error 1275 has occurred.

This driver has been blocked from loading
---

Depois tentei registrá-lo com diferentes "type", mas também sem sucesso:

> sc create a type= kernel binPath= "c:\Documents and Settings\Administrador\Desktop\a.sys"

Neste type eu tentei todas as opções. Aí na hora de subir dá:

> sc start a
System error 1275 has occurred.

This driver has been blocked from loading
Tentei também no Windows XP. Não deve ser um serviço (não tenho conhecimento suficiente pra dizer). Mas se não for um serviço, como eu o carrego no sistema?

Abraço.



Att,

Fernando Mercês
Linux Registered User #432779
www.mentebinaria.com.br
------------------------------------
"Ninguém pode ser escravo de sua identidade; quando surge uma possibilidade de mudança é preciso mudar". (Elliot Gould)

Victor Augusto Furtado Leite

unread,
Nov 26, 2014, 2:18:21 PM11/26/14
to ccppb...@googlegroups.com
E não sei se tem algum jeito prático, mesmo que programaticamente de carregar um driver (que é o que aparenta ser esse seu .sys) sem usar um .inf. Acredito que, conhecendo muito bem o que esse seu driver faz, daria pra tentar prever o que o Windows iria mudar/adicionar no registro, fazer essas alterações via código e depois simplesmente copiar o .sys pra pasta certa (pode ser que isso funcione, pensando num processo de instalação genérica, mas é só um palpite)...

[]'s

2014-11-26 16:55 GMT-02:00 Rodrigo Strauss <rod...@1bit.com.br>:



--
Victor Augusto Furtado Leite

Rodrigo Strauss

unread,
Nov 26, 2014, 2:30:32 PM11/26/14
to ccppbrasil
 Machine: 0x14c IMAGE_FILE_MACHINE_I386

Seu Windows é 64bit? Caso seja, está aí o motivo.

Rodrigo Strauss
http://www.1bit.com.br
@rodrigostrauss

Fernando Mercês

unread,
Nov 26, 2014, 2:55:58 PM11/26/14
to ccppb...@googlegroups.com
Tentei com ambos, Rodrigo.
Pois é, Victor, acontece que na minha profissão eu não sei abosulamente nada sobre os arquivos suspeitos que pego para analisar. Este está complicado. Tentei criar um INF, ele até copia para a pasta %windir%\system32\drivers mas não consigo ver que "subiu". Não sei fazer subir. Pelo que vi, criar um INF para um arquivo que não se sabe nada sobre ele é bem complicado.

Abraço.


Att,

Fernando Mercês
Linux Registered User #432779
www.mentebinaria.com.br
------------------------------------
"Ninguém pode ser escravo de sua identidade; quando surge uma possibilidade de mudança é preciso mudar". (Elliot Gould)

Victor Augusto Furtado Leite

unread,
Nov 26, 2014, 4:12:54 PM11/26/14
to ccppb...@googlegroups.com
Só palpitando...
Pensando nesse arquivo como um malware, acho que o mais fácil pro cara fazer isso seria pegar um driver nativo do Windows e modifica-lo ou anexar seu código... As vezes comparar símbolos de drivers nativos com os presentes no vírus possa dar alguma dica, se o que eu falei for válido.

[]'s
Victor Augusto Furtado Leite

Rodrigo Strauss

unread,
Nov 26, 2014, 5:21:11 PM11/26/14
to ccppbrasil
Viu o EventViewer?

Rodrigo Strauss
http://www.1bit.com.br
@rodrigostrauss

Rodrigo Strauss

unread,
Nov 26, 2014, 5:37:13 PM11/26/14
to ccppbrasil
Olhei o subsystem, é 1 (Native), parece correto. 

Não achei a função DriverEntry na lista de funções exportadas. Essa função é o main() de um driver. O que vocês postou diz Entrypoint: 0x8a88, acho que é o caso de descobrir qual função é essa. Talvez carregar esse binário no WinDbg como descrito em  http://blogs.msdn.com/b/doronh/archive/2006/03/10/549036.aspx. Esse endereço está esquisito, acho que deve ser o offset em relação ao endereço de carga do PE na memória ou em relação ao SECTION onde a função está. 

Se o EventViewer não disse nada, o Checked Build do Windows deve dizer algo no output de debug. http://msdn.microsoft.com/en-us/library/windows/hardware/ff543457%28v=vs.85%29.aspx






Rodrigo Strauss
http://www.1bit.com.br
@rodrigostrauss

Fernando Mercês

unread,
Nov 26, 2014, 11:00:59 PM11/26/14
to ccppb...@googlegroups.com
Victor, acho bem válido. Vou tentar isso.

Rodrigo, o eventvwr não fala mais que o cmd ao tentar carregar como serviço. Já via INF, não fala nada. Vou tentar suas sugestões!

Obrigado a todos!

Att,

Fernando Mercês

Rodrigo Madera

unread,
Nov 27, 2014, 8:45:34 AM11/27/14
to ccppb...@googlegroups.com
Minha sugestão seria rever o que você tem em mãos.

Fora isso, recomendo o OSR Driver Loader [1] e o DevCon, da Microsoft.
Mas não nessa ordem.

Happy hacking,
Madera

[1] http://www.osronline.com/article.cfm?article=157
[2] http://www.osronline.com/article.cfm?id=150

P.

unread,
Nov 28, 2014, 6:56:54 AM11/28/14
to ccppb...@googlegroups.com
Se bem me lembro um serviço driver tem um "tipo" especifico, diferente de um serviço generico. Deve ter alguma propriedade para alterar com o sc.EXE antes de subir. P.
Reply all
Reply to author
Forward
0 new messages