# Leer pic con codigo de proteccion activado



## pepechip (Ago 21, 2008)

Hola 
Me picaba la curiosidad de si habria alguna forma de leer un pic con el codigo de protecion activado.
Tengo algunas ideas de como se podria hacer, pero por falta de tiempo prefiero exponerlas aqui y escuchar vuestras opiniones.

1º Al grabar un pic con el icpro al que le hemos activado el CP, no podemos verificar que esta bien grabado mediante la opcion *verificar despues de grabar*, pero si se puede hacer mediante la opcion *verificar durante la grabacion*.
Teniendo esto presente es posible que se pueda engañar al pic haciendo una nueva grabacion, pero variando los parametros de grabacion de tal forma que no lleguemos a borrar los datos que tiene almacenados y nos permita hacer una verificacion (lectura).

2º Sobre el programa original que tenga cargado el pic, proceder a cargar un programa encima de este pero con estas caracteristicas:
En la primera posicion de memoria poner un GOTO que me dirija a las ultimas posiciones de memoria que seguramente estaran sin escribir. En la segunda posicion poner la instruccion de comienzo de tabla. (solo habre perdido la información metida en la posicion del GOTO y inicio de tabla).
En las ultimas posiciones de memoria metere una rutina que me lea la tabla (sera todo el programa antiguo) y me saque la información por algun puerto. 
Normalmente  las ultimas posiciones de memoria estan en blanco, asi que no perdemos ningun dato si metemos nuestra rutina en esa posicion.

Naturalmente en caso de poder hacerse alguna de estas 2 opciones habria que realizar previamente el software que controle al grabador.

¿que conste que no soy partidario de copiar el sotfware de un pic en una operacion de 1 minuto, que otro compañero puede que se haya tirado meses en desarrollar?


----------



## microtronic (Ago 21, 2008)

Pues si me enterado por la red de algunas personas que han podido leer el programa del pic con el cp on...Pero hasta ahi.


----------



## pepechip (Ago 21, 2008)

No quiero leer nigun pic con CP, solo quiero saber cual es la forma de hacerlo.


----------



## ricbevi (Ago 21, 2008)

pepechip dijo:
			
		

> No quiero leer nigun pic con CP, solo quiero saber cual es la forma de hacerlo.



Perforas una "ventana" sobre la posición física en que se encuentra el CP en el chip y por ultravioleta o tensión(dependiendo del modelo de PIC) le cambias el estado.
Una cosa es decir y otra muy distinta hacer!

Saludos.

Ric.


----------



## El nombre (Ago 21, 2008)

Lo primero que hay que hacer es comprender como funciona el proceso de grabación y de lectura. 
Los segundo es saber el motivo por el cual no se puede leer. 
Que ocurre si te pones a leer bit a bit?
habria que hacer un programilla para ello.

No tiene por que estar la ultima linea de codigo vacia.

Saludos


----------



## gzaloprgm (Ago 21, 2008)

Me interesaría saber como harías para leer desde el programa las instrucciones almacenadas en flash. Esto es posible en los pics con self-programming unicamente.

También me parece raro que puedas sobreescribir sólo algunas words con el programador, estimo que lo deben haber pensado y te deberían obligar a programar toda la flash.

Saludos,
Gonzalo


----------



## Meta (Ago 22, 2008)

Hubo un tiempo que quería hacer lo mismo y todo el mundo me pidió que no pierda el tiempo.

Estoy invest¡gando otra vez a ver si sale algo.

*EDIT:*

Hice por ahora el comienzo del 16F84A. Tengo la idea de modificar la *__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC* mediante la programación y manejando desde el PORTA para cambiar el CP de ON a OFF y que esta se guarde en la EEPROM.

Por ejemplo, supongamos que usamos un 16F84A que sólo usamos un bit del puerto A para encender y apagar un Led. A lo zorro los 4 restantes del PORTA que no se usa, elegimos uno de ellos y lo dejamos pulsados 20 segundos hasta que se active el _CP_ON. ¿Realmente se puede hacer? Si se pudiera sólo lo hacemos los que programamos con esa intención, aún así es imposible por ahora quebrantarlo, pero por curiosidad...

Una vez que tengamos el .hex, lo pasamos por esa Web y descompilamos el código.

http://www.geocities.com/dinceraydin/pic/djdasm/djdasm.html

Mi ejemplo es el *__CONFIG   _CP_ON &  _WDT_ON & _PWRTE_ON & _XT_OSC* también puedes ponerlo así en *__CONFIG	0005* que es lo mismo, y el 0005 lo saqué de la configuración del ic-prog o winpic800 que lo puedes ver. Ahí mediante programación quiero saber si puedo cambiar esos datos mediante programación y ejecutando las órdenes del puerto A.



LIST	P=16F84A			; Procesador.
	INCLUDE <P16F84A.INC>		; Definición de los operandos utilizados.

; ZONA DE CÓDIGOS ********************************************************************

	ORG		2700					; Comienzo de la configuración
	__CONFIG	0005

	ORG 	2100					; Comienzo de la memoria EEPROM
		DE "Hola desde la EEPROM del PIC-16F84A", 0x00

	ORG		2000					; Comienzo del ID que es 1234
		DT 	0x01, 0x02, 0x03, 0x04

	ORG 	0						; El programa comienza en la dirección 0 de memoria de
Inicio								; programa.
		bsf		STATUS,RP0			; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
		clrf	PORTB				; Las líneas del Puerto B se configuran como salidas.
		movlw	b'11111111'
		movwf	PORTA				; Las líneas del Puerto A se configuran como entradas.
		bcf		STATUS,RP0			; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.

Al cargar el .hex al ic-pror puedo ver la configuración del ID que pone 1234, y se ve una opción llamada *Checsum* que pone 3499 cosa que en el Winpic800 no pone nada de eso.

Ahora toca a investigar.


----------



## gzaloprgm (Ago 22, 2008)

dejamos pulsados 20 segundos hasta que se active el _CP_ON. ¿Realmente se puede hacer? 

Los fuses no son addresables desde los programas, es imposible hacerlo.

Datasheet de 16f628a:

14.1 Configuration Bits
The configuration bits can be programmed (read as ‘0’)
or left unprogrammed (read as ‘1’) to select various
device configurations. These bits are mapped in
program memory location 2007h.
The user  will note  that address  2007h is  beyond the
user program memory space. In fact, it belongs to the
special configuration memory space (2000h-3FFFh),
which *can be accessed only during programming*. See
“PIC16F627A/628A/648A EEPROM Memory 
Programming Specification” (DS41196) for additional
informaciónrmation.


----------



## pepechip (Ago 22, 2008)

traductor de google:

14,1 configuración Bits 
La configuración de bits puede programarse (leer como'0 ') 
no programada oa la izquierda (leer como'1 ') para seleccionar varias 
configuraciones de dispositivos. Estos bits son mapeados en 
programa de ubicación de memoria 2007h. 
El usuario nota que la dirección 2007h está más allá de la 
programa de usuario espacio de memoria. De hecho, pertenece al 
configuración especial de espacio de memoria (2000h-3FFFh), 
que sólo pueden acceder a ellos durante la programación. Ver 
"PIC16F627A/628A/648A memoria EEPROM 
Especificación de Programación "(DS41196) adicionales para 
información.


----------



## gzaloprgm (Ago 22, 2008)

Traduccion Mia:

Los bits de configuración pueden ser programados (se leen como ‘0’)
o ser dejados sin programar (se leen como ‘1’) para seleccionar diversas
configuraciones de equipo. Estos bits están mapeados a la
direccion de memoria de programa 2007h.
El usuario se dará cuenta que 2007h está pasando
la memoria de usuario de programa. De hecho, corresponde al
espacio de memoria de configuración especial (2000h-3FFFh),
*a los que solo se puede acceder durante la programación*


----------



## Meta (Ago 22, 2008)

Y eso que decían que la ORG 2000 no se podía programar y si se puede. Hablo del 16F84, que el el ID.


```
ORG 2000 ; Comienzo del ID que es 1234
DT 0x01, 0x02, 0x03, 0x04
```

Ahora los más usados para aprender veo que son el 16F84A, 16F628A y el nuevo y preparado para el C el 16F88 con más memoria, RAM , etc... ¡OJO! Dije preparado al C, no orientado al C que eso son para la gama 18F.

Me da que no se puede alterar los CP nunca.

A la próxima utilizar traductor.
http://translate.google.com/
http://world.altavista.com/


----------



## Chico3001 (Ago 23, 2008)

es imposible por una simple razon.. los fabricantes buscan maneras de asegurar que no se pueda copiar programas... si tratan de desbloquear el fusible de proteccion de escritura el chip automaticamente hara un reset general para borrar todos los datos...

solo conozco casos de chips leidos con voltajes elevados adrede... pero eso puede dañar al chip... y otra es quitar la cobertura de plastico y leer las señales con equipo muy especializado... 

YouTube - How to Reverse-Engineer a Satellite TV Smart Card


----------



## sony (Ago 24, 2008)

Chico3001 dijo:
			
		

> es imposible por una simple razon.. los fabricantes buscan maneras de asegurar que no se pueda copiar programas... si tratan de desbloquear el fusible de proteccion de escritura el chip automaticamente hara un reset general para borrar todos los datos...
> 
> solo conozco casos de chips leidos con voltajes elevados adrede... pero eso puede dañar al chip... y otra es quitar la cobertura de plastico y leer las señales con equipo muy especializado...
> 
> http://www.youtube.com/watch?v=tnY7UVyaFiQ


bueno de poder si se puede como lo puso  chico 30001 en este video que el ingeniero en sofware cris lo hiso con acidos abrio el chip para ver la escritura de las targetas inteligentes de de nagra vision tanto se puede que ese sistema ya tiene mas de dos años hakeado.


----------

