Code Protection
2 participantes
picminas :: PIC 18F4550 :: PIC 18F4550 :: Firmware
Página 1 de 1
Code Protection
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 : 36
Localização : Belo Horizonte
Re: Code Protection
Alguem? rs
ManoelLemos- Mensagens : 3
Data de inscrição : 16/04/2010
Idade : 36
Localização : Belo Horizonte
Re: Code Protection
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)
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
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
picminas :: PIC 18F4550 :: PIC 18F4550 :: Firmware
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|