Segurança para Fragmento de Código C#
-
2012年3月31日 23:28
Boa noite. Estou estudando tudo que posso sobre segurança do código fonte em C#, em função da fragilidade do MSIL, e de tantas ferramentas como Reflector, DLL Disassemble, Crack.Net que eu conheço. Bem já consegui resolver alguns problemas:
- Ofuscar para evitar o DLL Disassemble e reduzindo muito do que é visto pelo Reflector, usando o Crypto Obfuscator for Net;
- Criptografar Senhas com Hash no banco;
- Guardar string de conexão externamente e criptografada;
- Criptografia de conteúdo da memória.
Porém há outros itens que ainda não consegui, pois é difícil encontrar exemplos funcionais de boas técnicas, só muita teoria inconsistente, ao menos nas centenas de sites que visitei em 7 meses.
Encontrei na web um artigo de um Hacker que dava várias "Dicas" para dificultar ao máximo o trabalho deles mesmos. Porém a maioria era dedicada a programação binária, quando se compilava realmente, mas agora com o Dot.Net, a maioria não tem mais finalidade.
Porém em outro artigo de uma faculdade, se fazia referencia teórica a certas práticas como:
- Colocar Marca d´agua no código;
- Travas de segurança;
- Rotinas de passagem obrigatória, que se fossem retiradas ou adulteradas o sistema pararia de funcionar (não entendi como implementar)
- Entre outras...
Pergunta:
1) Como o Crack.Net permite percorrer em RAM tudo que um programa Dot.Net Executa e até alterar seus valores, como ficaria o licenciamento de um software nesse caso? Pois se usar um IF (valor = registro) se poderia alterar para IF (true = true) e acabaria com qualquer validação?
2) Como se pode incluir no código de uma Solution (Windows Forms) uma form de obrigar várias rotinas a passar sempre por determinado ponto, e se esse ponto fosse adulterado ou retirado o sistema deixasse de funcionar? Se o código pode ser analisado em RunTime, não sei como implementar isso com um pouco de segurança.

