Kun je nog configuratiebits terugvinden op deze PIC

Ik heb in bijlage een foto van een PIC16C54. Is het nog altijd mogelijk om de configuratiebits in deze structuur terug te vinden of zitten die gewoon in een geheugenlocatie en zijn het niet meer zoals de echte'Fusebits' van vroeger?

https://upload.wikimedia.org/wikipedia/commons/3/37/PIC16C54-XT_P_9420…

Kruimel

Golden Member

Oef, goede vraag, Microchip is er een beetje vaag over. In de datasheet verwijzen ze gewoon naar het "configuration word". In het configuratiebit 'manual' staat iets aan info:

These bits are mapped in program
memory location 2007h.

Dat wil echter niet per definitie zeggen dat ze ook daadwerkelijk op die plek in het geheugen zitten (waarschijnlijk niet zelfs).

Ze maken het zelfs nog iets vager in de "design tips":

Question 3:
When I erase the device, the program memory is blank but the configuration word is not yet erased.

Answer 3:
That is by design. Also remember that Microchip does not recommend code protecting windowed devices.

Blijkbaar zijn ze dus op een bepaalde manier beveiligd. Hieruit wordt het ook niet duidelijk of ze eenmalig programmeerbaar zijn (zelfs bij de EPROM versies) of gewoon moeilijker te wissen. In elk geval wordt het hier wel duidelijk dat het domweg kunnen zien van de instellingen met een vergrootglas erg onwaarschijnlijk is, ze hebben immers al manipulaties toegepast om het wissen ervan onwaarschijnlijk te maken. Omdat het hier om slechts 4 bit gaat vermoed ik dat de betrokken bits wel een EPROM zullen zijn (PROM voor zo weinig bits bespaart niet heel veel 'die' oppervlak), maar misschien aan blootstelling van UV ontrokken zijn door een strategisch gepositioneerde metallisering van de 'die'.

Arco

Special Member

Ligt aan de uitvoering. De gewone 16C54 is OTP, dus daar kan helemaal niks gewist worden.
Bij de eprom versie kun je het hele geheugen (dus ook uiteraard de config registers) wissen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Als ik deze thread goed lees, dan is de 16c54 een behoorlijk oude chip. Denk aan een 20 jaar. Dus "zoals vroeger" is JUIST op dit ding van toepassing. Dat ding KOMT van vroeger.

De regelmatige structuur links zou ik van gokken dat het het programma geheugen is. Daar in de buurt zitten vaak de fuse bits. Normaliter zijn de echte cellen dan subtiel groter dan de eprom bits.

Rechts van de lichte eprom array zit de addres decoder. Boven de eprom array wordt de data uitgelezen en verwerkt. In die buurt zou ik ze zoeken.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Kruimel

Golden Member

Op 21 oktober 2018 00:44:51 schreef Arco:
Ligt aan de uitvoering. De gewone 16C54 is OTP, dus daar kan helemaal niks gewist worden.
Bij de eprom versie kun je het hele geheugen (dus ook uiteraard de config registers) wissen...

Volgens de datasheet (p. 8&9) zou de OTP variant PIC16CR54 moeten zijn, en is de 'C' variant een EPROM. Ik was (nog) niet bezig met µCs toen deze chip uitkwam, dus ik heb geen eerstehands informatie.

Op 21 oktober 2018 09:15:41 schreef rew:
Als ik deze thread goed lees, dan is de 16c54 een behoorlijk oude chip. Denk aan een 20 jaar. Dus "zoals vroeger" is JUIST op dit ding van toepassing. Dat ding KOMT van vroeger.

Het is inderdaad een oude chip, ik heb alleen geen idee waar die 'fusebit' naam vandaan komt. Klink mij in de oren uit de tijd dat er alleen nog maar PROMs waren en er daadwerkelijk kleine zekeringetjes werden opgeblazen. Dat is in een EPROM niet meer het geval, die werken met het opsluiten van elektronen door een 'electron tunneling' effect (vraag me niet om de details). Ik zou verwachten dat ze die technologie hier zouden gebruiken. Maar ja, dan zie je geen reet... :)

De regelmatige structuur links zou ik van gokken dat het het programma geheugen is. Daar in de buurt zitten vaak de fuse bits. Normaliter zijn de echte cellen dan subtiel groter dan de eprom bits.

Waarom zouden ze PROM modules inbouwen die groter zijn dan EPROM bits? Ik zou verwachten dat ze dan een kleinere structuur zouden inbouwen om het 'die' oppervlak te beperken (hoewel het hier maar om 4 bits gaat).

Rechts van de lichte eprom array zit de addres decoder. Boven de eprom array wordt de data uitgelezen en verwerkt. In die buurt zou ik ze zoeken.

Mee eens, dat verkleint het zoekgebied aanzienlijk. Je weet dat je zoekt naar een relatief kleine groep bits (4), daarentegen zorgt die beperkte grootte er ook voor dat het wel een zoektocht zal worden, maar met deze info ben je wel een stukje dichterbij.

Maar hoezo de vraag eigenlijk? Je kunt toch vrij makkelijk ontdekken wat de configuratie-instellingen zijn? Als hij niet uitgelezen kan worden is de 'code protect' bit aan, en afhankelijk van de bron van het kloksignaal (iets dat je op de PCB vrij aardig moet kunnen zien) is het één van de vier klokopties. Alleen de 'watchdog timer' bit is wat lastiger te herkennen, maar dan moet het je net om die bit gaan.

Op 21 oktober 2018 14:21:57 schreef Kruimel:
Waarom zouden ze PROM modules inbouwen die groter zijn dan EPROM bits? Ik zou verwachten dat ze dan een kleinere structuur zouden inbouwen om het 'die' oppervlak te beperken (hoewel het hier maar om 4 bits gaat).

't moet iets betrouwbaarder te lezen zijn: Valt er een progbitje om, had je maar een checksum op de binary moeten doen en een foutmelding moeten geven. Maar een fusebit is meestal direct fataal en programmatisch niets meer tegen te doen. Maar goed. Misschien heb jij gelijk en gebruiken ze gewoon precies dezelfde "programmeerbare bitjes"

Ik denk dat het "fuse" bits heten door de historie. Als dit ding inderdaad 4 wisbare fusebits heeft dan zal ie ongeveer de eerste zijn geweest die dit heeft.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Kruimel

Golden Member

Ok dat is een goed punt, niet aan gedacht... Maakt het voor de TS weer (net) wat makkelijker te vinden. :)

Ik ben nog wel bang dat het een set EPROM bits gaat zijn, en daar ga je optisch volgens mij niets aan zien.

Arco

Special Member

Ze heten toch echt allebei gewoon 16C54 hoor... ;)
(de -jw suffix is eprom versie, de 16CR54 is een mask-rom versie)

https://www.circuitsonline.net/forum/file/35912/forum-post

Ik denk dat beiden dezelfde die hebben; alleen heeft de otp geen ruitje...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 21 oktober 2018 14:21:57 schreef Kruimel:

Maar hoezo de vraag eigenlijk? Je kunt toch vrij makkelijk ontdekken wat de configuratie-instellingen zijn? Als hij niet uitgelezen kan worden is de 'code protect' bit aan, en afhankelijk van de bron van het kloksignaal (iets dat je op de PCB vrij aardig moet kunnen zien) is het één van de vier klokopties. Alleen de 'watchdog timer' bit is wat lastiger te herkennen, maar dan moet het je net om die bit gaan.

Wel daar haal je het aan, ik wil zelf testen of ik er één die ik code protect naderhand zou kunnen uitlezen, noem het maar een experimentje reverse engineering. Nu is de algemene teneur die ik lees dat die niet kunnen uitgelezen worden, dat de data die je terugkrijgt gescrambled is.

Nu bleek dat de 16C84 wel met een 'zwakheid' zat zodat het programma toch kon gelezen worden ook al was de CP bit geset. Werkwijze zou blijkbaar zijn:
Bron: http://www.brouhaha.com/~eric/pic/84security.html

Insert the PIC+socket into the ZIF on the programmer board and switch
> VDD to 5V.
> From the menu set the CP configuration fuse to OFF.
> Now set VDD to VPP-0.5V (approx 13.5 volts).
> Program the configuration fuses. (Reply on screen saying
> error invalid?? Ignore this error and set VDD back to 5V.)
> Switch VDD supply off at the power supply.
> Switch off programmer supply.
> Wait 10 to 20 secs.
> Switch on programmer supply.
> Switch the VDD supply to 5V.
> Read PIC.
>
> What may be confusing to people is the error message displayed
> when programming the configuration fuses, and next not waiting for
> the charge on the cells to fall back to 5 volts after setting the
> fuses. This is why I say switch off for 10 to 20 secs, but don't
> forget to reset the VDD supply to 5 volts first.

Als deze techniek zou werken dan begrijp ik niet goed welke methode hier toegepast wordt (door de VDD spanning te verhogen), wat er juist gebeurt met de geheugencellen en hoe die CP- bit dan gereset wordt.
Nu betreft het hier wel de 16c84 en niet de 16c54 maar misschien kan dezelfde truuk toegepast worden. Ben nog mijn programmer aan het ontwerpen/bouwen, dus ik kan het nog niet direct testen.

Andere info die ik heb gevonden is:
http://www.piclist.com/techref/microchip/crackpic.htm

Wie zin en tijd heeft kan het artikel eens doornemen, maar daar probeert men vanuit de gescrambelde data het origineel terug te halen:

Theory of hacking 12-bit data parallel programed PIC-s:
---------------------------------------------------------------------------
16c54,16c55,16c56,16c57,16c58
*****************************

PASS 1 Getting S
-----------------
Reading code protected parts data will be scrambled by equation:

S = a XOR b XOR c
-----------------

XOR Table:

x y |z
------
0 0 |0
1 0 |1
0 1 |1
1 1 |0

MSB LSB
Origin W = aaaa bbbb cccc

S 4 bit ;scrambled data

a MSB 4 bit ;a,b,c parts from origin W (12bit)
b 4 bit
c LSB 4 bit

PASS 2 Getting S1
------------------
If we write to PIC "1111 1111 0000" (0ff0h) c=0 !
Reading code protected part data will be scrambled by equation:

S1 = a XOR b XOR c=0
S1 = a XOR b
------------

PASS 3 Getting S2
-----------------
If we write to PIC "1111 0000 0000" (0f00h) b=0 c=0 !
Reading code protected part data will be scrambled by equation:

S2 = a XOR b=0 XOR c=0
S2 = a
------

Now a = S2
b = S2 XOR S1
c = S1 XOR S

Now we can get origin W by equation:

*************************************************************************
* W = (S2 AND 15)*256 + ((S2 XOR S1) AND 15)*16 + ((S1 XOR S) AND 15) *
*************************************************************************

Theory of writing data to protected PIC-s
========================================================

In order to set bit in EPROM from 0 to 1 you have to apply appropriate amount of
energy to the Gate of the FET in memory cell.
There are (to my knowledge) three ways to do it:

1. Applying short length EM wave, like UV light, X-rays, and similar.
To use UV light, you'll have to access the core of the chip. You can gain
this access by corroding it with some highly corrosive acid.

With this method, memory cell is being slowly and permanently erased!

2. Increasing PIC power supply, but if you overdo it, you can easily
destroy the chip. (Use no more than 10 - 20V, with a 50-100mA
HIGH SPEED LIMITED CURRENT !!!)

This method changes memory cell state ONLY during the time the voltage
is increased, and this change takes effect almost instantly (because of
the difference between memory cell structure and the structure of the
rest of chip logic). When voltage drops back to the normal level, memory
cells states also returns to their previous value.

IT IS IMPORTANT TO TAKE CARE OF THE SUPPLY DIFFERENCE BETWEEN
YOUR PROGRAMMER AND PIC!!! YOU HAVE TO CONSTRUCT LEVEL TRANSLATORS,
SO THAT YOUR PROGRAMMER WILL NOT BE DAMAGED !!!

3. Increasing the temperature of the chip (no more than 140 degrees of
Celsius. At 155 to 200 degrees substrate will change its structure,
and will be permanently destroyed!

Remarks for this method are the same as for the previous one
(increasing PIC power supply),
but this method has lesser effect on the memory cell.

In my opinion this is the best way:
-----------------------------------

First we read protected PIC, and acquire "S" with standard reading.

To acquire "S1" ("S2"):
----------------------------------

First you should try with the voltage change. In most cases it is quite
enough to set protected bit in PIC.

But be aware that during the programming, applying 10 -15 V
power supply generates too big current that can destroy the chip, so
you`ll have to supply the chip with limited 50 to 100 mA current.

If this method gives no result, try this way:

Temperature should be constant and about 110 Celsius.
Vdd = 6-9 V (limit 100mA)

Adjust UV light power so that it takes about 10 minutes to erase PIC.
(You can regulate this by simply changing the distance between UV light
source and chip)

(Temperature remains 110 degrees of Celsius)

1 Expose between 20 - 30 sec
2 Interrupt exposure, and with programmer Vdd=6-9 V T=110 C
check is PIC protection bit set.
3 Repeat steps 1 and 2 until this bit is set.
4 Expose for another 5-10 sec
5 Stop with the exposure (Now it is possible to program the whole PIC)
6 With a programmer at a 110 degrees of Celsius temperature and
Vdd = 6-9 V program the WHOLE PIC with 3f80h for every word.
7 Slowly cool down the PIC to -10 C to -20 C
8 Read PIC at a temperature of -20 C and voltage of 3-4 V,
unless you have not gone too far with the erasure of the PIC,
all data will be intact (as before the erasure), even the protection
bit will be 0! BUT, lower 7 bits in every word will be 0!,
and we have acquired "s1"!

Bigger voltage and temperature difference will result in better
compensation of single bits erasure non-linearity on whole PIC.

By using this equation we can decode the whole PIC:

w = ((NOT s1) AND 127)*128 + ((s XOR s1 ) AND 127)
==================================================

Nu past men ook hier een spanningsmethode toe maar ook uv-belichting, maar ik weet niet goed wat er dan wel en niet gewist wordt. Alles je de hele chip belicht met uv-licht zou je toch verwachten dat het hele programma gewist wordt en dat zou volgens dit artikel. Ook wordt de chio verwarmt naar >100°

Kruimel

Golden Member

Op 22 oktober 2018 01:45:04 schreef Tailgunner:
Wel daar haal je het aan, ik wil zelf testen of ik er één die ik code protect naderhand zou kunnen uitlezen, noem het maar een experimentje reverse engineering. Nu is de algemene teneur die ik lees dat die niet kunnen uitgelezen worden, dat de data die je terugkrijgt gescrambled is.

Dat is totaal iets anders dus, je wil helemaal niet weten wat de configuratiebits zijn, maar je wil een beveiligde chip uitlezen. Lekkere vraagstelling dit... :S

In elk geval heeft de verhoogde voedingsspanning waarschijnlijk een effect op de cellen van het geheugen, maar ik kan niet verklaren hoe dan de beveiliging omzeild wordt. Ik zou zeggen: probeer het en kijk wat er gebeurt. Op hypothetische vragen over ongedocumenteerde features kunnen we je weinig antwoorden geven.

Arco

Special Member

Als je echt wilt weten wat er in zit aan data, kun je de chip laten 'ontleden' ergens in een oosters land... ;)
(die pellen de chip laag voor laag af tot de geheugencellen zichtbaar zijn die dan bestudeerd worden. Kost iets van 5000+ dollar heb ik gelezen)

Ik denk niet dat veel mensen ermee zullen zitten dat er een veiligheidslekje in een 20 jaar oude processor zit.
(dat bestaat al zolang de processor bestaat. De 8051 kon ook nog uitgelezen worden als de protectie aan stond...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik had een timestamp van 2002 in het datasheet gezien. Ik vond "20 jaar" wel "close enough" om te laten staan.
Maar jij produceert fotos van chips uit 1994, eerder zo'n 25 jaar geleden....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

De voorloper daarvan (de PIC1650) is zelfs uit 1977!... :)
De PIC1654 (zonder 'C') is al uit 1983...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik heb nog even verder gezocht. Bradley post op Tuesday, March 02, 2004 dat de 1654 uit zo ongeveer 1981 dateert. Echt ouder dan we tot nu toe durfden te posten.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Dit komt uit het 1983 databook van GI:

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
maartenbakker

Golden Member

Op 22 oktober 2018 13:26:05 schreef Arco:
De voorloper daarvan (de PIC1650) is zelfs uit 1977!... :)
De PIC1654 (zonder 'C') is al uit 1983...

Het staat me bij dat ik zoiets had aangetroffen in een antieke wasmachine, Miele denk ik, en al wat verbaasd was. Maar het is wel logisch, het IC is ooit ontworpen als programmeerbare interface controller voor computers en dat is toch de tijd dat CPU-peripherie nogal populair was.

www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."

Deze link uit m’n favorieten zou ook wel ‘ns interessant voor TS kunnen zijn: https://www.bunniestudios.com/blog/?page_id=40

Kruimel

Golden Member

Wellicht, maar de topic starter heeft geen goede geschiedenis van het reageren meer dan een dag na zijn laatste post. Hopelijk leest 'ie het nog. Het is wel een Amerikaans bedrijf, dus het zal misschien lastig zijn om dit gedaan te krijgen, maar misschien is het een optie.

Op 15 november 2018 01:19:37 schreef Wcool18:
Deze link uit m’n favorieten zou ook wel ‘ns interessant voor TS kunnen zijn: https://www.bunniestudios.com/blog/?page_id=40

Ja die link ken ik. Probleem is dat ik geen metallurgische microscoop ter mijn beschikking heb en ik dergelijke structuur niet zal kunnen opsporen.

Op 15 november 2018 10:27:32 schreef Kruimel:
Wellicht, maar de topic starter heeft geen goede geschiedenis van het reageren meer dan een dag na zijn laatste post. Hopelijk leest 'ie het nog. Het is wel een Amerikaans bedrijf, dus het zal misschien lastig zijn om dit gedaan te krijgen, maar misschien is het een optie.

Ik ben bezig geweest met de TAIT programmer te bouwen, wacht nog op een aantal componenten en mijn 16c54's moeten ook nog binnen komen, dan kan ik mijn experiment starten. Hoe dan ook zal ik eerst de spanningsmethode proberen. VDD naar VPP-0,5 zetten en de configuratiebits opnieuw programmeren. Enig probleem dat ik hierbij nog moet oplossen is dat het IC dan te veel stroom zal trekken. Mag maximaal 50-100mA. Dus ik moet een stroombegrenzing hebben die deze stroom limiteert maar ik moet wel mij hogere spanning blijven behouden. Ik had gedacht aan een LM317 als constante stroombrob.

Kruimel

Golden Member

Wat je wil kan niet. Het is of de spanning regelen, of de stroom. Het kan niet beide tegelijk. Het IC bepaalt de hoeveelheid stroom die het gebruikt. Als hij plots intern doorslaat wordt die stroom opeens groter en het enige wat je dan kan doen is de spanning verlagen om de stroom op dat moment te beperken.

Voor een voeding is een LM317 als stroombron en één in serie als spanningsbron ideaal, beetje als de LM317 labvoeding op de site. Je kunt de negatieve hulpspanning weg laten, wat veel onderdelen scheelt want je zult toch niet onder de 1,25V nodig hebben. R3 kan je 12Ω oid maken om de maximale stroom in te stellen op 100mA.

Zorg ervoor om geen condensatoren aan de uitgangen van de ICs te hangen, dus C6 weg, en C5 een 1µF elco max, eventueel met een 10Ω serieweerstand. Die condensatoren vaak aangeraden om transient response te verbeteren, maar zorgen voor piekstromen bij kortsluitingen.

Bedankt voor de link, zal de soldeerbout alvast opwarmen.