Code Protection

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Code Protection

Mensagem  ManoelLemos em Seg Jul 05, 2010 10:58 pm

Salve galera. Alguem sabe como bloquear o codigo gravado dentro do PIC pelo c18 ?

ManoelLemos

Mensagens : 3
Data de inscrição : 16/04/2010
Idade : 30
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Code Protection

Mensagem  ManoelLemos em Qui Jul 15, 2010 10:07 pm

Alguem? rs

ManoelLemos

Mensagens : 3
Data de inscrição : 16/04/2010
Idade : 30
Localização : Belo Horizonte

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Code Protection

Mensagem  Bruno S. Avelar em Sex Out 22, 2010 7:23 pm

Essa é uma pergunta justa. Eu tive que estudar um pouco para poder responde-la.
A microchip disponibiliza em seus microcontroladores um sistema para proteção de código a fim de proteger a propriedade intelectual de seus clientes. Muitas vezes essa proteção (em constante evolução) é o suficiente, mas como tudo na area de tecnologia não há segurança que não possa ser quebrada. A solução se torna extremamente interessante quando pensamos no trabalho que dá quebra-la. Se seu projeto não valer bastante (acho que dezenas de milhares de dólares) é mais viável pagar um bom engenheiro para fazer um similar do que apelar para a engenharia reversa. Logo serve para a maior parte das empresas.
Eu encontrei um site que detalha bastante sobre tipos de code protection e técnicas atuais para quebra-lo. Eu estou poupando emitir opinião se isso é certo ou errado para não gerar polêmicas.
http://www.cl.cam.ac.uk/~sps32/mcu_lock.html

Em PICs da família 18F o code protect difere bastante de outros PICs e de outros microcontroladores. Essa teoria está explicada no datasheet na página 302. Posso colocar um pouco de informação aqui também.
Você pode proteger sua memória de programa e/ou sua memória EEPRON.
Não é possível fazer code protection utilizando boot loader apenas em gravações feitas com gravadoras externas.

Sobre a proteção da memória de programa:

A memória do programa do usuário é dividido em cinco blocos. Um deles é um bloco de inicialização de 2 Kbytes. O restante
da memória é dividida em quatro blocos.
Cada um dos cinco blocos com três bits de proteção de código a eles associados. São eles:
• Code-Protect bit (CPn)
• Write-Protect bit (WRTn)
• External Block Table Read bit (EBTRn)

No modo de execução normal, os bits CPN não têm nenhum efeito direto.
A função do CPN é inibir leitura e escrita externas.
O bloco de memória de programa pode ser protegido da tabela de escrita (table writes) se o WRTn configuration for '0 '.
O EBTRn bits controla a tabela de leitura (table reads). Para um bloco que EBTRn for setado como 0 instruções executadas deste bloco sao permitidas que façam leituras mas instruções de fora do bloco nao sao permitidas leituras e retornaram 0.

or a block of user memory
with the EBTRn bit set to ‘0’, a table read instruction
that executes from within that block is allowed to read.

A imagem abaixo, retirada do datasheet do PIC18F4550 mostra a divisão dos blocos e os bits de proteção correspondentes:


Estes bits e vários outros bits de configuração estão além dos 21-bits de endereçamento da memória de dados. Entretanto eles podem ser acessados pela tabela de leitura e escrita de instruções (table read and write instructions). A maioria dos bits de configuração (estou preparando um poust sobre bits de configuração, em breve coloco no forum) são definidos para o estado desejado quando o microcontrolador é programado.

Estes bits e outros podem ser configurados pelo próprio MPLAB em configure - configure bits.


ou no próprio código. Para o C18 é usado a diretiva de compilação # pragma config para definir esses bits para a programação inicial, e, geralmente, as aplicações não precisam de acesso a esta área da memória. É possível ver mais sobre os #pragma configs no C18 getting started página 94 disponibilizado pela microchip.
Por exemplo (de como nao proteger, para proteger as areas basta mudar off para on)

Código:

#pragma config CP0 = OFF          // Code protection bits-- Block 0 (000800 - 001FFFh) not code-protected
#pragma config CP1 = OFF          // (002000 - 003FFFh)
#pragma config CP2 = OFF          // (004000 - 004FFFh)
#pragma config CPB = OFF          // Boot block (000000 - 0007FFh) not code-protected
#pragma config CPD = OFF          // Data EEPROM not code-protected
#pragma config WRT0 = OFF          // Block 0 not write-protected
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRTB = OFF          // Boot block not write-protected
#pragma config WRTC = OFF          // Configuration register not write-protected
#pragma config WRTD = OFF          // EEPROM not write-protected
#pragma config EBTR0 = OFF          // Block 0 not protected from table reads executed in other blocks
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTRB = OFF          // Boot block not protected from table reads exectuted in other blocks

EEPROM:

Existem dois bits para proteção da EEPROM:
-CPD
-WRTD

O CPD inibe leitura e escrita de dados externos a EEPROM.
O WRTD inibe leitura e escrita de dados internos e externos a EEPROM
Note, o processador pode ler e escrever dados na EEPROM independente dos bits de proteção.

Espero ter ajudado,
Bruno S. Avelar
avatar
Bruno S. Avelar
Admin

Mensagens : 74
Data de inscrição : 26/07/2009
Idade : 33
Localização : Belo Horizonte MG

Ver perfil do usuário http://picminas.forumeiros.com

Voltar ao Topo Ir em baixo

Re: Code Protection

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum