Problema ao Ofuscar código fonte de Aplicação .net (Compact Framework)
Oi;
Estou com um serio problema de percurso no desenvolvimento
de um sistema para Windows Mobile (compact Framework), após terminar minha aplicação (sistema para
venda externa com palm ou smartphone) constatei que não posso ofuscar meu
código fonte utilizando o software Eazfuscator.NET ou Dotfuscator (isso para
proteger meu código fonte) pois umas das classes do sistema que serve para
montar os scripts do banco Compact sqlServer (classe de persistência), utiliza-se
de Reflection para pegar a estrutura das classes que representam as tabelas do
banco no sistema e gerar o script dinamicamente. O recurso de reflection
simplesmente não funciona após ofuscar o executável, porem andei pesquisando e
me parece que tem uma forma de acertar isso. Vc pode me ajudar? Socorro!!!
Em anexo um exemplo:Link da aplicação de exemplo: http://video.devmedia.com.br/discovirtual/173559/Chamados/Chamado1/TesteOfuscamento.zip
O exemplo mostra uma classe de nome rota que é interpretada pela classe persistente e é gerado uma string contendo o script (select ). Assim se vc testar esta aplicação vc vera que funcionará perfeitamente, porem se vc ofuscar o executável e tentar rodar a aplicação novamente o sistema vai deixar de funcionar. Espero que vcs possam me ajudar, pois tenho que entregar esta aplicação para meu cliente + não queria entregar a aplicação sem ofuscar o código fonte para evitar pirataria. Obrigado Alan
O exemplo mostra uma classe de nome rota que é interpretada pela classe persistente e é gerado uma string contendo o script (select ). Assim se vc testar esta aplicação vc vera que funcionará perfeitamente, porem se vc ofuscar o executável e tentar rodar a aplicação novamente o sistema vai deixar de funcionar. Espero que vcs possam me ajudar, pois tenho que entregar esta aplicação para meu cliente + não queria entregar a aplicação sem ofuscar o código fonte para evitar pirataria. Obrigado Alan
Alan Assis
Curtidas 0
Respostas
Alan Assis
19/01/2010
Alguma novidade?
GOSTEI 0
Fabio Mans
19/01/2010
Nada, já pesquisei em vários lugares e não sai te dizer.
GOSTEI 0
Alan Assis
19/01/2010
A devmedia não possui algum consultor que possa me ajudar a
solucionar este problema?
GOSTEI 0
Fabio Mans
19/01/2010
Na verdade Alan a consultoria não contempla ferramente de terceiros.
Fabio
GOSTEI 0
Devmedia
19/01/2010
Alan,
esse assunto não está no escopo da consultoria, por se tratar de componente de terceiros.
Por isso o chamado será cancelado para não debitar dos seus créditos.
esse assunto não está no escopo da consultoria, por se tratar de componente de terceiros.
Por isso o chamado será cancelado para não debitar dos seus créditos.
GOSTEI 0
Alan Assis
19/01/2010
A minha Dúvida não tem nada a ver com componente de terceiros...
GOSTEI 0
Alan Assis
19/01/2010
Depois
de muito tempo na frente do computador consegui resolver o problema com louvor.
Sou
muito grato a Deus por isso. Deus seja
Louvado!!!
Bom, para quem passar pela mesma situação la vai a solução: Para aplicações móbile em c# vc tem que incluir a referencia a um arquivo de nome ObfuscationAttributes.cs (este arquivo esta disponível na instalação do software Eazfuscator.NET ), também na classe program.cs inclua após declaração do uses a linha abaixo: [assembly: ObfuscateAssemblyAttribute(true, StripAfterObfuscation = false)] Ex: using System.Reflection; using System.IO; using Global; using Modelo; [assembly: ObfuscateAssemblyAttribute(true, StripAfterObfuscation = false)] namespace Mobile_Empresarial { static class Program { Tambem será necessário incluir nas classes que não devem ser ofuscadas (as classes que representam as tabelas do banco de dados) a linha de código abaixo: [System.Reflection.ObfuscationAttribute(Feature = "renaming", ApplyToMembers = true)]
Ex:
namespace Modelo { [System.Reflection.ObfuscationAttribute(Feature = "renaming", ApplyToMembers = true)] [Table("ROTAS)] public class Rota { private int? _iD = null; [Key("ID")] public int? ID { get { return _iD; } set { _iD = value; } } private int? _ordem = null; [Column("ORDEM", ColumnType.Int32, 11, false)] public int? Ordem { get { return _ordem; } set { _ordem = value; } } Pronto, mesmo depois de ofuscar o executável o script sql continua sendo montado dinamicamente
Bom, para quem passar pela mesma situação la vai a solução: Para aplicações móbile em c# vc tem que incluir a referencia a um arquivo de nome ObfuscationAttributes.cs (este arquivo esta disponível na instalação do software Eazfuscator.NET ), também na classe program.cs inclua após declaração do uses a linha abaixo: [assembly: ObfuscateAssemblyAttribute(true, StripAfterObfuscation = false)] Ex: using System.Reflection; using System.IO; using Global; using Modelo; [assembly: ObfuscateAssemblyAttribute(true, StripAfterObfuscation = false)] namespace Mobile_Empresarial { static class Program { Tambem será necessário incluir nas classes que não devem ser ofuscadas (as classes que representam as tabelas do banco de dados) a linha de código abaixo: [System.Reflection.ObfuscationAttribute(Feature = "renaming", ApplyToMembers = true)]
Ex:
namespace Modelo { [System.Reflection.ObfuscationAttribute(Feature = "renaming", ApplyToMembers = true)] [Table("ROTAS)] public class Rota { private int? _iD = null; [Key("ID")] public int? ID { get { return _iD; } set { _iD = value; } } private int? _ordem = null; [Column("ORDEM", ColumnType.Int32, 11, false)] public int? Ordem { get { return _ordem; } set { _ordem = value; } } Pronto, mesmo depois de ofuscar o executável o script sql continua sendo montado dinamicamente
GOSTEI 0
Fabio Mans
19/01/2010
Obrigado vou guardar nos meus arquivos.
Raramente trabalhamos eu outros projetos que não seja Web, e não precisamos da Ofuscar e por isso a falta de expertise no assunto.
Fabio
GOSTEI 0