Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22989|Resposta: 1

[WinForm] .net/c# usa assinaturas fortes para proteger suas próprias DLLs contra forjamentos

[Copiar link]
Publicado em 19/10/2017 17:31:40 | | | |
Como uma aplicação .net/c# garante que o dll chamado não seja substituído por falsificação?
https://www.itsvse.com/thread-4173-1-1.html
(Fonte: Architect)

Da última vez, testamos que a DLL pode ser forjada por outros e executada, como evitar isso?



Introdução Emblemática:
Uma assinatura de montagem (também conhecida como assinatura de nome forte) dá a uma aplicação ou componente uma identidade única que outros softwares podem usar para identificar e referenciar explicitamente a aplicação ou componente. Um nome forte consiste no nome de texto simples da assembleia, número de versão, informações regionais (se fornecidas) e um par de chaves pública/privada.

Por exemplo, nomes fortes permitem que autores e administradores de aplicações especifiquem a versão exata de um serviço que será usada por componentes compartilhados. Isso permite que diferentes aplicações especifiquem versões diferentes sem afetar outras. Você também pode usar o nome forte do componente como evidência de segurança para gerar uma relação de confiança entre os dois componentes.

Para assinar fortemente uma assembleia, você não precisa assinar um certificado digital com o código comprado, você pode gerar um arquivo SNK com a ferramenta sn fornecida pelo .NET, e pode garantir a assinatura da sua montagem salvando esse arquivo.

No entanto, uma assinatura forte para um assembly não é o mesmo que uma assinatura digital para um arquivo executável (mesmo que o assembly seja um arquivo exe). E o MSDN deixa claro que arquivos exe não devem ser fortemente assinados (embora eu tenha assinado). Uma assinatura digital para um arquivo é, na verdade, anexar uma assinatura a qualquer arquivo no nível do sistema de arquivos, informando ao sistema operacional quem é o emissor desse arquivo. No diálogo de propriedades do arquivo, você pode ver a aba "Assinaturas Digitais".


Assinamos fortemente a DLL e depois a chamamos com um programa, que pode ser executado normalmente, da seguinte forma:


E se a gente substituísse a dll por uma dll forjada? Teste e veja que a execução é um erro, o que pode efetivamente impedir que a dll chamada seja forjada (Testei, modifiquei o código dll assinado, depois o regenerei, e o aplicativo também pode ser chamado normalmente, deveria ser assim desde que o programa esteja assinado corretamente!!

O erro é o seguinte:

Para mais informações sobre chamar depuração em tempo real (JIT) em vez deste diálogo,
Veja o final desta mensagem.

Texto incomum **************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
Nome do arquivo: "dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e"
   Em TestDll.Form1.button1_Click_1 (Object sender, EventArgs e)
   Em System.Windows.Forms.Control.OnClick(EventArgs e)
   Em System.Windows.Forms.Button.OnClick(EventArgs e)
   Em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   Em System.Windows.Forms.Control.WmMouseUp(Message& m, botão MouseButton, Int32 cliques)
   Em System.Windows.Forms.Control.WndProc(Message& m)
   Em System.Windows.Forms.ButtonBase.WndProc(Message& m)
   Em System.Windows.Forms.Button.WndProc(Message& m)
   Em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   Em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Aviso: O registro da vinculação de montagem está desativado.
Para habilitar o registro de falhas de assembly binding, defina o valor do registro [HKLM\Software\Microsoft\Fusion!" EnableLog (DWORD) está definido como 1.
Nota: Haverá algumas penalidades de desempenho associadas ao registro de falhas em binding assembly.
Para desativar esse recurso, remova o valor do registro [HKLM\Software\Microsoft\Fusion!] EnableLog]。



Montagens carregadas **************
mscorlib
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2098.0 Construída por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDll
    Versão de montagem: 1.0.0.0
    Versão do Win32: 1.0.0.0
    Código base: file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2094.0 Construída por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
Sistema
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2093.0 Produzida por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2046.0 Construída por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2046.0 Construída por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2098.0 Construída por: NET47REL1LAST
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2046.0 Construída por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2046.0 Construída por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.recursos
    Versão assembly: 4.0.0.0
    Versão Win32: 4.7.2046.0 Construída por: NET47REL1
    Código base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

Depuração **************
Para habilitar a depuração em tempo real (JIT),
Ele deve ser configurado na seção system.windows.forms do arquivo .config (machine.config) do aplicativo ou computador
jitDebugging value.
Também deve ser ativado ao compilar a aplicação
Depurando.

Por exemplo:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

Quaisquer exceções não tratadas após a depuração JIT são ativadas
será enviado ao depurador JIT registrado nesta máquina,
Em vez de ser tratado por este diálogo.







Anterior:Como uma aplicação .net/c# garante que o dll chamado não seja substituído por falsificação?
Próximo:FSADF{:1_2:}
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com