ããã¯ãå€éšèªå·±æå·åãã©ã€ãã®ãããã³ã°ã«é¢ããèšäºã® 8671 çªç®ã§æåŸã®éšåã§ãã æè¿ãååããããªãªãã (ã¢ã€ãŽ) SKXNUMX ããŒã ãã©ã€ããç§ã«æã£ãŠããŠãããã®ã§ããããå
ã«æ»ãããšã«ããä»ãããããåŸããããã®ãå
±æããŠããããšãæãåºããŠãã ããã ç¶ããèªãåã«å¿
ããèªã¿ãã ãã
4. å éš PSoC ãã©ãã·ã¥ ãã©ã€ããããã³ãã®ååŸãéå§ããŸã
ã€ãŸãã([æåã®éšå]() ã§ç¢ºç«ããããã«) ãã¹ãŠã PIN ã³ãŒãã PSoC ã®ãã©ãã·ã¥æ·±åºŠã«ä¿åãããŠããããšã瀺ããŠããŸãã ãããã£ãŠããããã®ãã©ãã·ã¥æ·±ããèªã¿åãå¿ èŠããããŸãã å¿ èŠãªäœæ¥ã®åã«:
- ãã€ã¯ãã³ã³ãããŒã©ãŒãšã®ãéä¿¡ããå¶åŸ¡ããŸãã
- ãã®ãéä¿¡ããå€éšããã®èªã¿åãããä¿è·ãããŠãããã©ããã確èªããæ¹æ³ãèŠã€ããŸãã
- ä¿è·ãåé¿ããæ¹æ³ãèŠã€ããŠãã ããã
æå¹ãª PIN ã³ãŒããæ¢ãã®ãé©åãªå Žæã XNUMX ã€ãããŸãã
- å èµãã©ãã·ã¥ã¡ã¢ãªã
- SRAMãPIN ã³ãŒããä¿åããŠããŠãŒã¶ãŒãå ¥åãã PIN ã³ãŒããšæ¯èŒã§ããŸãã
ä»åŸã«æ³šç®ããŠãISSP ãããã³ã«ã®ææžåãããŠããªãæ©èœãç¡å¹ã«ããåŸãããã³ãŒã«ã ããŒã ãã¬ãŒã¹ããšåŒã°ããããŒããŠã§ã¢æ»æã䜿çšããŠã»ãã¥ãªã㣠ã·ã¹ãã ããã€ãã¹ããå éš PSoC ãã©ãã·ã¥ ãã©ã€ãã®ãã³ããååŸã§ããããšã«æ³šæããŠãã ããã ããã«ãããå®éã® PIN ã³ãŒããçŽæ¥ãã³ãããããšãã§ããŸããã
$ ./psoc.py
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9
æçµçãªããã°ã©ã ã³ãŒã:
5. ISSPãããã³ã«
5.1. ç©æ§ç 究æãšã¯
ãã€ã¯ãã³ã³ãããŒã©ãŒãšã®ãéä¿¡ãã¯ãããã³ããŒéãããã·ãªã¢ã« ãããã³ã« (ããšãã°ãMicrochip 瀟㮠PIC ã® ICSP) ã䜿çšãã察話ãŸã§ãããŸããŸãªæå³ãæã¡ãŸãã
ãµã€ãã¬ã¹ã«ã¯ãISSP (ã€ã³ã·ã¹ãã ã·ãªã¢ã« ããã°ã©ãã³ã° ãããã³ã«) ãšåŒã°ããããã®ããã®ç¬èªã®ãããã³ã«ããããŸããããã«ã€ããŠã¯ãéšåçã«èª¬æãããŠããŸãã
- PSoC ãåèµ·åããŸãã
- ããžã㯠ãã³ããŒããã® PSoC ã®ã·ãªã¢ã« ããŒã¿ ãã³ã«åºåããŸãã å€éšããã°ã©ãã³ã°ã¢ãŒãã«å ¥ãã
- éä¿¡ã³ãã³ãã¯ãããã¯ãã«ããšåŒã°ããé·ããããåã§ãã
ISSP ããã¥ã¡ã³ãã§ã¯ãããå°æ°ã®ã³ãã³ãã«å¯ŸããŠã®ã¿ãããã®ãã¯ãã«ãå®çŸ©ããŠããŸãã
- åæå-1
- åæå-2
- Initialize-3 (3V ããã³ 5V ãªãã·ã§ã³)
- IDã»ããã¢ãã
- èªã¿åãIDã¯ãŒã
- SET-BLOCK-NUM: 10011111010dddddddd111ãdddddddd=ãããã¯çªå·
- äžæ¬æ¶å»
- ããã°ã©ã ãããã¯
- ã»ããã¢ããã®æ€èšŒ
- èªã¿åããã€ã: 10110aaaaaaZDDDDDDDDZ1ãDDDDDDDD = ããŒã¿åºåãaaaaaa = ã¢ãã¬ã¹ (6 ããã)
- æžã蟌ã¿ãã€ã: 10010aaaaadddddddd111ãdddddddd = ããŒã¿å ¥åãaaaaaa = ã¢ãã¬ã¹ (6 ããã)
- å®å š
- ãã§ãã¯ãµã ã®ã»ããã¢ãã
- READ-CHECKSUM: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1ãDDDDDDDDDDDDDDDD = ããŒã¿åºå: ããã€ã¹ ãã§ãã¯ãµã
- ãããã¯æ¶å»
ããšãã°ãInitialize-2 ã®ãã¯ãã«ã¯æ¬¡ã®ããã«ãªããŸãã
1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111
ãã¹ãŠã®ãã¯ãã«ã¯åãé·ã (22 ããã) ãæã¡ãŸãã HSSP ã®ããã¥ã¡ã³ãã«ã¯ãISSP ã«é¢ããè¿œå æ å ±ãå«ãŸããŠããŸãããISSP ãã¯ãã«ã¯ãäžé£ã®åœä»€ãè¡šãããã ã·ãŒã±ã³ã¹ã«ãããŸãããã
5.2. ãã¯ãã«ã®è¬ã解ã
ããã§äœãèµ·ãã£ãŠããã®ãèŠãŠã¿ãŸãããã åœåãç§ã¯ãããã®åããã¯ãã«ã M8C åœä»€ã®çããŒãžã§ã³ã§ãããšä»®å®ããŸãããããã®ä»®èª¬ã確èªããåŸãæŒç®ã®ãªãã³ãŒããäžèŽããªãããšãããããŸããã
次ã«ãäžèšã®ãã¯ãã«ãã°ãŒã°ã«ã§æ€çŽ¢ããŠèŠã€ããŸãã
ãã®åŸãç£èŠ ROM (SROM) ã»ã¯ã·ã§ã³ããéåžžã«åœ¹ç«ã€æ
å ±ãåéããããšãã§ããŸããã
- 00h:SWBootãªã»ãã
- 01h: èªã¿åããããã¯
- 02h: ã©ã€ããããã¯
- 03h: ãããã¯æ¶å»
- 06h: ããŒãã«èªã¿åã
- 07h: ãã§ãã¯ãµã
- 08h: æ ¡æ£0
- 09h: æ ¡æ£1
ãã¯ãã«åã SROM é¢æ°ãšæ¯èŒããããšã§ããã®ãããã³ã«ã§ãµããŒããããŠããããŸããŸãªæäœãäºæããã SROM ãã©ã¡ãŒã¿ãŒã«ãããã³ã°ã§ããŸãã ãã®ãããã§ãISSP ãã¯ãã«ã®æåã® XNUMX ãããããã³ãŒãã§ããŸãã
- 100 => ããããºã
- 101 => ãrdmemã
- 110 => ãäžæ£ã
- 111 => ãrdregã
ãã ãããªã³ããã ããã»ã¹ãå®å šã«ç解ããã«ã¯ãPSoC ãšã®çŽæ¥éä¿¡ãéããŠã®ã¿åŸãããŸãã
5.3. PSoC ãšã®éä¿¡
ããŒã¯ã»ããã©ãŠãããŒã¯ãã§ã«
ç 究ã®éçšã§ãDirk ã®ã³ãŒããããªãå€æŽããããšã«æ³šæããŠãã ããã ç§ã®å€æŽã¯ GitHub ã§èŠã€ããããšãã§ããŸãã
ããã§ãArduinoã䜿ã£ãŠããŸããéä¿¡ãã«ãå ¬åŒãã®ãã¯ãã«ã ãã䜿ããŸããã VERIFYã³ãã³ãã䜿çšããŠå èµROMãèªã¿èŸŒãã§ã¿ãŸããã ãããã«ããã¯ç¡çã§ããã ããããããã©ãã·ã¥ãã©ã€ãå ã§èªã¿åãä¿è·ããããæå¹ã«ãªã£ãŠããããšãåå ãšèããããŸãã
次ã«ãã¡ã¢ãª/ã¬ãžã¹ã¿ã®æžã蟌ã¿ãšèªã¿åãã®ããã®ç¬èªã®åçŽãªãã¯ãã«ãããã€ãäœæããŸããã ãã©ãã·ã¥ ãã©ã€ããä¿è·ãããŠããå Žåã§ããSROM å šäœãèªã¿åãããšãã§ããããšã«æ³šæããŠãã ããã
5.4. ãªã³ãããã¬ãžã¹ã¿ã®èå¥
ãéã¢ã»ã³ãã«ãããããã¯ãã«ã確èªãããšãããããã€ã¹ãææžåãããŠããªãã¬ãžã¹ã¿ (0xF8 ïœ 0xFA) ã䜿çšããŠãä¿è·ããã€ãã¹ããŠçŽæ¥å®è¡ããã M8C ãªãã³ãŒããæå®ããŠããããšãããããŸããã ããã«ããããADDãããMOV AãXãããPUSHãããJMPããªã©ã®ããŸããŸãªãªãã³ãŒããå®è¡ã§ããããã«ãªããŸããã ãããã®ããã㧠(ã¬ãžã¹ã¿ã«å¯Ÿããå¯äœçšã調ã¹ãããšã§)ãææžåãããŠããªãã¬ãžã¹ã¿ã®ã©ããå®éã«ã¯éåžžã®ã¬ãžã¹ã¿ (AãXãSPãPC) ã§ããããå€æããããšãã§ããŸããã
ãã®çµæãHSSP_disas.rb ããŒã«ã«ãã£ãŠçæããããéã¢ã»ã³ãã«ããããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸã (ããããããããããã«ã³ã¡ã³ããè¿œå ããŸãã)ã
--== init2 ==--
[DE E0 1C] wrreg CPU_F (f7), 0x00 # ÑбÑÐŸÑ ÑлагПв
[DE C0 1C] wrreg SP (f6), 0x00 # ÑбÑÐŸÑ SP
[9F 07 5C] wrmem KEY1, 0x3A # ПбÑзаÑелÑÐœÑй аÑгÑÐŒÐµÐœÑ ÐŽÐ»Ñ SSC
[9F 20 7C] wrmem KEY2, 0x03 # аМалПгОÑМП
[DE A0 1C] wrreg PCh (f5), 0x00 # ÑбÑÐŸÑ PC (MSB) ...
[DE 80 7C] wrreg PCl (f4), 0x03 # (LSB) ... ЎП 3 ??
[9F 70 1C] wrmem POINTER, 0x80 # RAM-ÑказаÑÐµÐ»Ñ ÐŽÐ»Ñ Ð²ÑÑ
ПЎМÑÑ
ЎаММÑÑ
[DF 26 1C] wrreg opc1 (f9), 0x30 # ÐпкПЎ 1 => "HALT"
[DF 48 1C] wrreg opc2 (fa), 0x40 # ÐпкПЎ 2 => "NOP"
[9F 40 3C] wrmem BLOCKID, 0x01 # BLOCK ID ÐŽÐ»Ñ Ð²ÑзПва SSC
[DE 00 DC] wrreg A (f0), 0x06 # ÐœÐŸÐŒÐµÑ "Syscall" : TableRead
[DF 00 1C] wrreg opc0 (f8), 0x00 # ÐпкПЎ ÐŽÐ»Ñ SSC, "Supervisory SROM Call"
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12 # ÐеЎПкÑЌЌеМÑОÑÐŸÐ²Ð°ÐœÐœÐ°Ñ ÐŸÐ¿ÐµÑаÑОÑ: вÑпПлМОÑÑ Ð²ÐœÐµÑМОй ПпкПЎ
5.5. ã»ãã¥ãªãã£ããã
ãã®æ®µéã§ã¯ãã§ã« PSoC ãšéä¿¡ã§ããŠããŸããããã©ãã·ã¥ ãã©ã€ãã®ã»ãã¥ãªã㣠ãããã«é¢ããä¿¡é Œã§ããæ å ±ããŸã ãããŸããã ãµã€ãã¬ã¹ãããã€ã¹ã®ãŠãŒã¶ãŒã«ä¿è·ãæå¹ã«ãªã£ãŠãããã©ããã確èªããæ段ãæäŸããŠããªããšããäºå®ã«ã¯éåžžã«é©ããŸããã ç§ã¯ Google ãããã«è©³ãã調ã¹ãŠãCypress ãæäŸãã HSSP ã³ãŒãããDirk ãä¿®æ£ãå ¬éããåŸã«æŽæ°ãããããšãæçµçã«ç解ããŸããã ãªã©ïŒ ãã®æ°ãããã¯ãã«ãç»å ŽããŸããã
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[9F A0 1C] wrmem 0xFD, 0x00 # МеОзвеÑÑÐœÑе аÑгÑЌеМÑÑ
[9F E0 1C] wrmem 0xFF, 0x00 # аМалПгОÑМП
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 02 1C] wrreg A (f0), 0x10 # МеЎПкÑЌеМÑОÑПваММÑй syscall !
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
ãã®ãã¯ãã« (psoc.py ã® read_security_data ãåç §) ã䜿çšããŠãSRAM ã® 0x80 ã®ãã¹ãŠã®ã»ãã¥ãªã㣠ããããååŸããŸããä¿è·ããããããã¯ããšã« XNUMX ããããããŸãã
çµæã¯æ鬱ãªãã®ã§ããå€éšããã®èªã¿åããšæžã蟌ã¿ãç¡å¹ã«ãããã¢ãŒãã§ã¯ãã¹ãŠãä¿è·ãããŸãã ãããã£ãŠããã©ãã·ã¥ ãã©ã€ãããäœãèªã¿åãããšãã§ããªãã ãã§ãªããäœãæžã蟌ãããšãã§ããŸãã (ããšãã°ãããã« ROM ãã³ããŒãã€ã³ã¹ããŒã«ãããªã©)ã ãããŠãä¿è·ãç¡å¹ã«ããå¯äžã®æ¹æ³ã¯ããããå šäœãå®å šã«æ¶å»ããããšã§ãã ð
6. æåã®ïŒå€±æããïŒæ»æ: ROMX
ãã ãã次ã®ããªãã¯ãè©Šãããšãã§ããŸããä»»æã®ãªãã³ãŒããå®è¡ã§ããã®ã§ããã°ããã©ãã·ã¥ ã¡ã¢ãªã®èªã¿åãã«äœ¿çšããã ROMX ãå®è¡ããŠã¿ãŠã¯ãããã§ããããã ãã®ã¢ãããŒãã¯æåããå¯èœæ§ãé«ãã§ãã SROM (ãã¯ãã«ã«ãã£ãŠäœ¿çšããã) ããããŒã¿ãèªã¿åã ReadBlock é¢æ°ã¯ãããã ISSP ããåŒã³åºããããã©ããããã§ãã¯ããããã§ãã ãã ããROMX ãªãã³ãŒãã«ã¯ãã®ãããªãã§ãã¯ããªãå¯èœæ§ããããŸãã (Arduino ã³ãŒãã«ããã€ãã®ãã«ã㌠ã¯ã©ã¹ãè¿œå ããåŸã®) Python ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
for i in range(0, 8192):
write_reg(0xF0, i>>8) # A = 0
write_reg(0xF3, i&0xFF) # X = 0
exec_opcodes("x28x30x40") # ROMX, HALT, NOP
byte = read_reg(0xF0) # ROMX reads ROM[A|X] into A
print "%02x" % ord(byte[0]) # print ROM byte
æ®å¿µãªããããã®ã³ãŒãã¯æ©èœããŸããã ð ãšããããããã¯æ©èœããŸãããåºåã§ç¬èªã®ãªãã³ãŒã (0x28 0x30 0x40) ãååŸããŸãã ããã€ã¹ã®å¯Ÿå¿ããæ©èœãèªã¿åãä¿è·ã®èŠçŽ ã§ãããšã¯æããŸããã ããã¯ãšã³ãžãã¢ãªã³ã°ã®ããªãã¯ã«äŒŒãŠããŸããå€éšãªãã³ãŒããå®è¡ãããšãROM ãã¹ãäžæãããã¡ã«ãªãã€ã¬ã¯ããããŸãã
7. XNUMX çªç®ã®æ»æ: ã³ãŒã«ã ããŒã ãã¬ãŒã¹
ROMX ããªãã¯ãæ©èœããªãã£ãããããã®ããªãã¯ã®å¥ã®ããªãšãŒã·ã§ã³ã«ã€ããŠèãå§ããŸãããåºçç©ã§èª¬æãããŠããŸãã
7.1.å®è£
ISSP ã®ããã¥ã¡ã³ãã§ã¯ãCHECKSUM-SETUP ã®æ¬¡ã®ãã¯ãã«ãæäŸãããŠããŸãã
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[9F 40 1C] wrmem BLOCKID, 0x00
[DE 00 FC] wrreg A (f0), 0x07
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
ããã¯åºæ¬çã«ãããã¥ã¡ã³ã (æäœã§ç§ã®ãã®) ã«ç€ºãããŠããããã«ãSROM é¢æ° 0x07 ãåŒã³åºããŸãã
ãã®æ©èœã¯ãã§ãã¯ãµã æ€èšŒãè¡ããŸãã 16 ã€ã®ãã©ãã·ã¥ ãã³ã¯å ã®ãŠãŒã¶ãŒæå®ã®ãããã¯æ°ã® 1 ããã ãã§ãã¯ãµã ããŒãããèšç®ããŸãã BLOCKID ãã©ã¡ãŒã¿ã¯ããã§ãã¯ãµã ã®èšç®æã«äœ¿çšããããããã¯ã®æ°ãæž¡ãããã«äœ¿çšãããŸãã å€ãXNUMXãã¯ããã㯠XNUMX ã®ãã§ãã¯ãµã ã®ã¿ãèšç®ããŸãã äžæ¹ ã0ããæå®ãããšããã©ãã·ã¥ ãã³ã¯ã® 256 ãããã¯ãã¹ãŠã®åèšãã§ãã¯ãµã ãèšç®ãããŸãã 16 ãããã®ãã§ãã¯ãµã ã¯ãKEY1 ãš KEY2 ãä»ããŠè¿ãããŸãã KEY1 ãã©ã¡ãŒã¿ã«ã¯ãã§ãã¯ãµã ã®äžäœ 8 ããããæ ŒçŽãããKEY2 ãã©ã¡ãŒã¿ã«ã¯äžäœ 8 ããããæ ŒçŽãããŸãã è€æ°ã®ãã©ãã·ã¥ ãã³ã¯ãæã€ããã€ã¹ã®å Žåããã§ãã¯ãµã é¢æ°ã¯åãã©ãã·ã¥ ãã³ã¯ã«å¯ŸããŠåå¥ã«åŒã³åºãããŸãã åäœãããã³ã¯çªå·ã¯ãFLS_PR1 ã¬ãžã¹ã¿ã«ãã£ãŠèšå®ãããŸã (ã¿ãŒã²ãã ãã©ãã·ã¥ ãã³ã¯ã«å¯Ÿå¿ããã¬ãžã¹ã¿å ã®ããããèšå®ããããšã«ãã£ãŠ)ã
ããã¯åçŽãªãã§ãã¯ãµã ã§ããããšã«æ³šæããŠãã ããããã€ãã¯åçŽã«æ¬¡ã ã«è¿œå ãããŸãã 掟æ㪠CRC ã®çã¯ãããŸããã ããã«ãM8C ã³ã¢ã«ã¯éåžžã«å°ããªã¬ãžã¹ã¿ ã»ãããããããšãããã£ãŠããã®ã§ããã§ãã¯ãµã ãèšç®ãããšãã«ãäžéå€ãæçµçã«åºåãããåãå€æ°ã«èšé²ããããšæ³å®ããŸãã: KEY1 (0xF8) / KEY2 ( 0xF9)ã
ãããã£ãŠãçè«çã«ã¯ãç§ã®æ»æã¯æ¬¡ã®ããã«ãªããŸãã
- ISSPçµç±ã§æ¥ç¶ããŸãã
- CHECKSUM-SETUP ãã¯ãã«ã䜿çšããŠãã§ãã¯ãµã èšç®ãéå§ããŸãã
- æå®ãããæé T åŸã«ããã»ããµãåèµ·åããŸãã
- RAM ãèªã¿åããçŸåšã®ãã§ãã¯ãµã C ãååŸããŸãã
- æé 3 ãš 4 ãç¹°ãè¿ããæ¯å T ãå°ããã€å¢ãããŸãã
- çŸåšã®ãã§ãã¯ãµã ãã以åã®ãã§ãã¯ãµã C ãæžç®ããããšã§ããã©ãã·ã¥ ãã©ã€ãããããŒã¿ã埩å ããŸãã
ãã ããåé¡ããããŸããåèµ·ååŸã«éä¿¡ããå¿ èŠããã Initialize-1 ãã¯ãã«ã KEY1 ãš KEY2 ãäžæžãããŸãã
1100101000000000000000 # ÐагОÑ, пеÑевПЎÑÑÐ°Ñ PSoC в ÑежОЌ пÑПгÑаЌЌОÑПваМОÑ
nop
nop
nop
nop
nop
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A # кПМÑÑПлÑÐœÐ°Ñ ÑÑЌЌа пеÑезапОÑÑваеÑÑÑ Ð·ÐŽÐµÑÑ
[9F 20 7C] wrmem KEY2, 0x03 # О зЎеÑÑ
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 01 3C] wrreg A (f0), 0x09 # SROM-ÑÑМкÑÐžÑ 9
[DF 00 1C] wrreg opc0 (f8), 0x00 # SSC
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
ãã®ã³ãŒãã¯ãCalibrate1 (SROM é¢æ° 9) ãåŒã³åºãããšã§è²Žéãªãã§ãã¯ãµã ãäžæžãããŸã...ãããããããžã㯠ãã³ã㌠(äžèšã®ã³ãŒãã®å é ãã) ãéä¿¡ããŠããã°ã©ãã³ã° ã¢ãŒãã«å ¥ãããã®åŸ SRAM ãèªã¿åãããšãã§ããã§ãããã? ãããŠã¯ããããã¯ããŸããããŸãïŒ ãã®æ»æãå®è£ ãã Arduino ã³ãŒãã¯éåžžã«åçŽã§ãã
case Cmnd_STK_START_CSUM:
checksum_delay = ((uint32_t)getch())<<24;
checksum_delay |= ((uint32_t)getch())<<16;
checksum_delay |= ((uint32_t)getch())<<8;
checksum_delay |= getch();
if(checksum_delay > 10000) {
ms_delay = checksum_delay/1000;
checksum_delay = checksum_delay%1000;
}
else {
ms_delay = 0;
}
send_checksum_v();
if(checksum_delay)
delayMicroseconds(checksum_delay);
delay(ms_delay);
start_pmode();
- checkum_delay ãèªã¿åããŸãã
- ãã§ãã¯ãµã èšç® (send_checksum_v) ãå®è¡ããŸãã
- æå®ãããæéåŸ
æ©ããŸãã 次ã®èœãšãç©Žãèæ
®ããŠãã ããã
- çµæãããããŸã§ããªãã®æéãç¡é§ã«ãã
é 延ãã€ã¯ãç§ é 延ã 16383 ÎŒs ãè¶ ããªãå Žåã«ã®ã¿æ£ããåäœããŸãã - ãããŠãå ¥åãšã㊠0 ãæž¡ãããå ŽåãdelayMicroseconds ãå®å šã«èª€ã£ãŠåäœããããšãå€æãããŸã§ãåãæéãå床匷å¶çµäºããŸããã
- çµæãããããŸã§ããªãã®æéãç¡é§ã«ãã
- PSoC ãããã°ã©ãã³ã° ã¢ãŒãã§åèµ·åããŸã (åæåãã¯ãã«ã¯éä¿¡ãããããžã㯠ãã³ããŒãéä¿¡ããã ãã§ã)ã
Python ã§ã®æçµã³ãŒã:
for delay in range(0, 150000): # заЎеÑжка в ЌОкÑПÑекÑМЎаÑ
for i in range(0, 10): # кПлОÑеÑÑвП ÑÑОÑÑÐ²Ð°ÐœÐžÑ ÐŽÐ»Ñ ÐºÐ°Ð¶ÐŽÐŸÐ¹ÐžÐ· заЎеÑжек
try:
reset_psoc(quiet=True) # пеÑезагÑÑзка О вÑ
ПЎ в ÑежОЌ пÑПгÑаЌЌОÑПваМОÑ
send_vectors() # ПÑпÑавка ОМОÑОалОзОÑÑÑÑОÑ
векÑПÑПв
ser.write("x85"+struct.pack(">I", delay)) # вÑÑОÑлОÑÑ ÐºÐŸÐœÑÑПлÑÐœÑÑ ÑÑÐŒÐŒÑ + пеÑезагÑÑзОÑÑÑÑ Ð¿ÐŸÑле заЎеÑжкО
res = ser.read(1) # ÑÑОÑаÑÑ arduino ACK
except Exception as e:
print e
ser.close()
os.system("timeout -s KILL 1s picocom -b 115200 /dev/ttyACM0 2>&1 > /dev/null")
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=0.5) # ПÑкÑÑÑÑ Ð¿ÐŸÑлеЎПваÑелÑÐœÑй пПÑÑ
continue
print "%05d %02X %02X %02X" % (delay, # ÑÑОÑаÑÑ RAM-байÑÑ
read_regb(0xf1),
read_ramb(0xf8),
read_ramb(0xf9))
ç°¡åã«èšããšããã®ã³ãŒããè¡ãããšã¯æ¬¡ã®ãšããã§ãã
- PSoC ãåèµ·åããŸã (ãããŠãPSoC ã«ããžã㯠ãã³ããŒãéä¿¡ããŸã)ã
- å®å šãªåæåãã¯ãã«ãéä¿¡ããŸãã
- Arduino é¢æ° Cmnd_STK_START_CSUM (0x85) ãåŒã³åºããŸãããã€ã¯ãç§åäœã®é 延ããã©ã¡ãŒã¿ãšããŠæž¡ãããŸãã
- ãã§ãã¯ãµã (0xF8 ããã³ 0xF9) ãšææžåãããŠããªãã¬ãžã¹ã¿ 0xF1 ãèªã¿åããŸãã
ãã®ã³ãŒã㯠10 ãã€ã¯ãç§éã« 1 åå®è¡ãããŸãã 0xF1 ã¯ããã§ãã¯ãµã ã®èšç®æã«å€æŽãããå¯äžã®ã¬ãžã¹ã¿ã§ãããããããã«å«ãŸããŠããŸãã ãããããããã¯ç®è¡è«çãŠãããã«ãã£ãŠäœ¿çšãããããçš®ã®äžæå€æ°ã§ãã Arduino ã寿åœã®å åã瀺ããªããªã£ããšãã« (çç±ã¯ããããŸããã)ãpicocom ã䜿çšã㊠Arduino ããªã»ããããããã«ç§ã䜿çšããéãããã¯ã«æ³šç®ããŠãã ããã
7.2. çµæãèªã
Python ã¹ã¯ãªããã®çµæã¯æ¬¡ã®ããã«ãªããŸã (èªã¿ãããããã«ç°¡ç¥åããŠããŸã)ã
DELAY F1 F8 F9 # F1 â вÑÑеÑпПЌÑÐœÑÑÑй МеОзвеÑÑÐœÑй ÑегОÑÑÑ
# F8 ЌлаЎÑОй Ð±Ð°Ð¹Ñ ÐºÐŸÐœÑÑПлÑМПй ÑÑЌЌÑ
# F9 ÑÑаÑÑОй Ð±Ð°Ð¹Ñ ÐºÐŸÐœÑÑПлÑМПй ÑÑЌЌÑ
00000 03 E1 19
[...]
00016 F9 00 03
00016 F9 00 00
00016 F9 00 03
00016 F9 00 03
00016 F9 00 03
00016 F9 00 00 # кПМÑÑПлÑÐœÐ°Ñ ÑÑЌЌа ÑбÑаÑÑваеÑÑÑ Ð² 0
00017 FB 00 00
[...]
00023 F8 00 00
00024 80 80 00 # 1-й байÑ: 0x0080-0x0000 = 0x80
00024 80 80 00
00024 80 80 00
[...]
00057 CC E7 00 # 2-й байÑ: 0xE7-0x80: 0x67
00057 CC E7 00
00057 01 17 01 # пПМÑÑÐžÑ ÐœÐµ ОЌеÑ, ÑÑП зЎеÑÑ Ð¿ÑПОÑÑ
ПЎОÑ
00057 01 17 01
00057 01 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 D0 17 01
00058 F8 E7 00 # СМПва E7?
00058 D0 17 01
[...]
00059 E7 E7 00
00060 17 17 00 # ХЌЌЌЌЌЌ
[...]
00062 00 17 00
00062 00 17 00
00063 01 17 01 # Ð, ЎПÑлП! ÐÐŸÑ ÐŸÐœ же пеÑÐµÐœÐŸÑ Ð² ÑÑаÑÑОй байÑ
00063 01 17 01
[...]
00075 CC 17 01 # ÐÑак, 0x117-0xE7: 0x30
ããã¯èšã£ãŠããåé¡ããããŸããå®éã®ãã§ãã¯ãµã ã䜿çšããŠæäœããŠãããããnull ãã€ãã«ãã£ãŠèªã¿åãããå€ãå€æŽãããããšã¯ãããŸããã ãã ããèšç®æé å šäœ (8192 ãã€ã) ã«ã¯ 0,1478 ç§ããããŸã (å®è¡ãããã³ã«å€å°ã®å€åã¯ãããŸã)ããã㯠18,04 ãã€ããããçŽ XNUMX ÎŒs ã«çžåœããããããã®æéãé©åãªã¿ã€ãã³ã°ã§ãã§ãã¯ãµã å€ããã§ãã¯ããããã«äœ¿çšã§ããŸãã æåã®å®è¡ã§ã¯ãèšç®æé ã®ç¶ç¶æéãåžžã«ã»ãŒåãã§ããããããã¹ãŠãéåžžã«ç°¡åã«èªã¿åãããŸãã ãã ããåå®è¡ã®ãããããªã¿ã€ãã³ã°ã®ããããç©ã¿éãªããšé倧ã«ãªãããããã®ãã³ãã®æåŸã¯æ£ç¢ºããäœããªããŸãã
134023 D0 02 DD
134023 CC D2 DC
134023 CC D2 DC
134023 CC D2 DC
134023 FB D2 DC
134023 3F D2 DC
134023 CC D2 DC
134024 02 02 DC
134024 CC D2 DC
134024 F9 02 DC
134024 03 02 DD
134024 21 02 DD
134024 02 D2 DC
134024 02 02 DC
134024 02 02 DC
134024 F8 D2 DC
134024 F8 D2 DC
134025 CC D2 DC
134025 EF D2 DC
134025 21 02 DD
134025 F8 D2 DC
134025 21 02 DD
134025 CC D2 DC
134025 04 D2 DC
134025 FB D2 DC
134025 CC D2 DC
134025 FB 02 DD
134026 03 02 DD
134026 21 02 DD
ããã¯ããã€ã¯ãç§ã®é 延ããšã« 10 åã®ãã³ãã«çžåœããŸãã ãã©ãã·ã¥ ãã©ã€ãã® 8192 ãã€ããã¹ãŠããã³ãããããã®åèšäœæ¥æéã¯çŽ 48 æéã§ãã
7.3. ãã©ãã·ã¥ãã€ããªåæ§ç¯
ãã¹ãŠã®æéã®ãããèæ ®ããŠããã©ãã·ã¥ ãã©ã€ãã®ããã°ã©ã ã³ãŒããå®å šã«åæ§ç¯ããã³ãŒãã®äœæã¯ãŸã å®äºããŠããŸããã ãã ãããã®ã³ãŒãã®å é ã¯ãã§ã«åŸ©å ããŠããŸãã æ£ããå®è¡ã§ããããšã確èªããããã«ãm8cdis ã䜿çšããŠéã¢ã»ã³ãã«ããŸããã
0000: 80 67 jmp 0068h ; Reset vector
[...]
0068: 71 10 or F,010h
006a: 62 e3 87 mov reg[VLT_CR],087h
006d: 70 ef and F,0efh
006f: 41 fe fb and reg[CPU_SCR1],0fbh
0072: 50 80 mov A,080h
0074: 4e swap A,SP
0075: 55 fa 01 mov [0fah],001h
0078: 4f mov X,SP
0079: 5b mov A,X
007a: 01 03 add A,003h
007c: 53 f9 mov [0f9h],A
007e: 55 f8 3a mov [0f8h],03ah
0081: 50 06 mov A,006h
0083: 00 ssc
[...]
0122: 18 pop A
0123: 71 10 or F,010h
0125: 43 e3 10 or reg[VLT_CR],010h
0128: 70 00 and F,000h ; Paging mode changed from 3 to 0
012a: ef 62 jacc 008dh
012c: e0 00 jacc 012dh
012e: 71 10 or F,010h
0130: 62 e0 02 mov reg[OSC_CR0],002h
0133: 70 ef and F,0efh
0135: 62 e2 00 mov reg[INT_VC],000h
0138: 7c 19 30 lcall 1930h
013b: 8f ff jmp 013bh
013d: 50 08 mov A,008h
013f: 7f ret
ããªãçŽåŸã§ãããã§ãïŒ
7.4. PINã³ãŒãã®ä¿åå ã¢ãã¬ã¹ã調ã¹ã
å¿ èŠãªãšãã«ãã§ãã¯ãµã ãèªã¿åãããšãã§ããããã«ãªã£ãã®ã§ã次ã®ãšãã«ãã§ãã¯ãµã ãã©ãã§ã©ã®ããã«å€åããããç°¡åã«ç¢ºèªã§ããŸãã
- ééã£ã PIN ã³ãŒããå ¥åããŸãã
- PINã³ãŒããå€æŽããŸãã
ãŸããããããã®ã¹ãã¬ãŒãž ã¢ãã¬ã¹ãèŠã€ããããã«ãåèµ·ååŸã« 10 ããªç§åäœã§ãã§ãã¯ãµã ãã³ããååŸããŸããã 次ã«ãééã£ãPINãå ¥åããåãããšãããŸããã
å€ãã®å€æŽããã£ããããçµæã¯ããŸã楜ãããã®ã§ã¯ãããŸããã§ããã ãããæçµçã«ã¯ã120000 ÎŒs ãã 140000 ÎŒs ã®é 延ã®éã«ãã§ãã¯ãµã ãå€åãããšå€æã§ããŸããã ããããããã§è¡šç€ºããããã³ã³ãŒããã¯å®å šã«ééã£ãŠããŸãããããã¯ã0 ãæž¡ããããšå¥åŠãªåäœããããDelayMicroseconds ããã·ãŒãžã£ã®ã¢ãŒãã£ãã¡ã¯ãã«ãããã®ã§ãã
ãããŠã3 æéè¿ãè²»ãããåŸãSROM ã·ã¹ãã ã³ãŒã« CheckSum ãããã§ãã¯ãµã ã®ãããã¯æ°ãæå®ããåŒæ°ãå ¥åãšããŠåãåãããšãæãåºããŸããã ããã æ倧 64 ãã€ã ãããã¯ã®ç²ŸåºŠã§ãPIN ã³ãŒããšãäžæ£è©Šè¡ãã«ãŠã³ã¿ãŒã®ä¿åã¢ãã¬ã¹ãç°¡åã«ç¹å®ã§ããŸãã
æåã®å®è¡ã§ã¯æ¬¡ã®çµæãåŸãããŸããã
次ã«ãPIN ã³ãŒããã123456ãããã1234567ãã«å€æŽãããšã次ã®ããã«ãªããŸããã
ãããã£ãŠãPIN ã³ãŒããšèª€è©Šè¡ã«ãŠã³ã¿ãŒã¯ããã㯠No.126 ã«æ ŒçŽãããŠããããã§ãã
7.5ã ãããã¯No.126ã®ãã³ãæ¡å
ããã㯠#126 ã¯ãç§ã®å®å šãªãã³ãã§ã¯ããã§ãã¯ãµã èšç®ã®éå§ãã 125x64x18 = 144000ÎŒs ãããã«äœçœ®ããã¯ãã§ãããããã¯éåžžã«åŠ¥åœã§ããããã«èŠããŸãã 次ã«ãå€æ°ã®ç¡å¹ãªãã³ã (ã軜埮ãªã¿ã€ãã³ã°åå·®ãã®èç©ã«ãã) ãæåã§éžãåããåŸãæçµçã«æ¬¡ã®ãã€ããååŸããŸãã (ã¬ã€ãã³ã·ãŒ 145527 ÎŒs)ã
PIN ã³ãŒããæå·åãããŠããªã圢åŒã§ä¿åãããŠããããšã¯æããã§ãã ãã¡ããããããã®å€ã¯ ASCII ã³ãŒãã§æžãããŠããããã§ã¯ãããŸããããçµå±ã®ãšãããéé»å®¹éåŒããŒããŒãããååŸããèªã¿åãå€ãåæ ããŠããããšãããããŸãã
æåŸã«ãããã«ããã€ãã®ãã¹ããå®è¡ããŠãäžæ£ãªè©Šè¡ã«ãŠã³ã¿ãã©ãã«ä¿åãããŠããããèŠã€ããŸããã çµæã¯æ¬¡ã®ãšããã§ãã
0xFF - ã15 åã®è©Šè¡ããæå³ããè©Šè¡ã倱æãããã³ã«æžå°ããŸãã
7.6. PINã³ãŒãã®å埩
äžèšããŸãšããç§ã®éãã³ãŒãã¯æ¬¡ã®ãšããã§ãã
def dump_pin():
pin_map = {0x24: "0", 0x25: "1", 0x26: "2", 0x27:"3", 0x20: "4", 0x21: "5",
0x22: "6", 0x23: "7", 0x2c: "8", 0x2d: "9"}
last_csum = 0
pin_bytes = []
for delay in range(145495, 145719, 16):
csum = csum_at(delay, 1)
byte = (csum-last_csum)&0xFF
print "%05d %04x (%04x) => %02x" % (delay, csum, last_csum, byte)
pin_bytes.append(byte)
last_csum = csum
print "PIN: ",
for i in range(0, len(pin_bytes)):
if pin_bytes[i] in pin_map:
print pin_map[pin_bytes[i]],
print
å®è¡çµæã¯æ¬¡ã®ãšããã§ãã
$ ./psoc.py
syncing: KO OK
Resetting PSoC: KO Resetting PSoC: KO Resetting PSoC: OK
145495 53e2 (0000) => e2
145511 5407 (53e2) => 25
145527 542d (5407) => 26
145543 5454 (542d) => 27
145559 5474 (5454) => 20
145575 5495 (5474) => 21
145591 54b7 (5495) => 22
145607 54da (54b7) => 23
145623 5506 (54da) => 2c
145639 5506 (5506) => 00
145655 5533 (5506) => 2d
145671 554c (5533) => 19
145687 554e (554c) => 02
145703 554e (554e) => 00
PIN: 1 2 3 4 5 6 7 8 9
äžæ³ïŒ å¹ãïŒ
ç§ã䜿çšããã¬ã€ãã³ã·ã®å€ã¯ããããã XNUMX ã€ã®ç¹å®ã® PSoCãã€ãŸãç§ã䜿çšãã PSoC ã«é¢é£ããŠããããšã«æ³šæããŠãã ããã
8. 次ã¯äœã§ãã?
ããã§ãAigo ãã©ã€ãã®ã³ã³ããã¹ã㧠PSoC åŽã«ã€ããŠèŠçŽããŸãããã
- SRAM ã¯èªã¿åãä¿è·ãããŠããŠãèªã¿åãããšãã§ããŸãã
- ã³ãŒã«ã ããŒã ãã¬ãŒã¹æ»æã䜿çšããPIN ã³ãŒããçŽæ¥èªã¿åãããšã§ãã¹ã¯ã€ãé²æ¢ä¿è·ããã€ãã¹ã§ããŸãã
ãã ããç§ãã¡ã®æ»æã«ã¯åæã®åé¡ã«ããããã€ãã®æ¬ é¥ããããŸãã 次ã®ããã«æ¹åã§ããå¯èœæ§ããããŸãã
- ãã³ãŒã«ã ããŒã ãã¬ãŒã¹ãæ»æã®çµæãšããŠååŸãããåºåããŒã¿ãæ£ãããã³ãŒããããŠãŒãã£ãªãã£ãäœæããŸãã
- FPGA ã¬ãžã§ããã䜿çšããŠãããæ£ç¢ºãªæéé 延ãäœæããŸã (ãŸã㯠Arduino ããŒããŠã§ã¢ ã¿ã€ããŒã䜿çšããŸã)ã
- å¥ã®æ»æãè©Šã¿ãŸããæ æã«ééã£ã PIN ã³ãŒããå ¥åããåèµ·åã㊠RAM ããã³ãããæ¯èŒã®ããã«æ£ãã PIN ã³ãŒãã RAM ã«ä¿åãããããšãæåŸ ããŸãã ãã ããArduino ã§ãããè¡ãã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸãããArduino ã®ä¿¡å·ã¬ãã«ã¯ 5 ãã«ãã§ãããä»å調ã¹ãŠããããŒã㯠3,3 ãã«ãã®ä¿¡å·ã§åäœããããã§ãã
è©Šãããšãã§ããèå³æ·±ãããšã® XNUMX ã€ã¯ãé»å§ã¬ãã«ã調æŽããŠèªã¿åãä¿è·ããã€ãã¹ããããšã§ãã ãã®ã¢ãããŒããæ©èœããã°ãäžæ£ç¢ºãªã¿ã€ãã³ã°é 延ã«ãããã§ãã¯ãµã ã®èªã¿åãã«äŸåãã代ããã«ããã©ãã·ã¥ ãã©ã€ãããå®å šã«æ£ç¢ºãªããŒã¿ãååŸã§ããããã«ãªããŸãã
SROM ã¯ãããã ReadBlock ã·ã¹ãã ã³ãŒã«ãä»ããŠã¬ãŒã ããããèªã¿åãããã次ãšåãããšãã§ããŸãã
å®è¡ã§ãããã XNUMX ã€ã®æ¥œããããšã¯ããããããã±ãŒã¹ãåãåãããšã§ããSRAM ãã³ããååŸããææžåãããŠããªãã·ã¹ãã ã³ãŒã«ãšè匱æ§ãç¹å®ããŸãã
9ã çµè«
ãããã£ãŠããã®ãã©ã€ãã®ä¿è·ã«ã¯ããŸã äžååãªç¹ãå€ããããŸãããªããªãããã®ãã©ã€ãã¯ãPIN ã³ãŒããä¿åããããã«éåžžã® (ã匷åãããŠããªãã) ãã€ã¯ãã³ã³ãããŒã©ãŒã䜿çšããŠããããã§ããããã«ãããŒã¿ãã©ããªã£ãŠããã㯠(ãŸã ) 調ã¹ãŠããŸããããã®ããã€ã¹ã§ã¯æå·åãããŠããŸã!
ã¢ã€ãŽã«äœãå§ããŸããïŒ æå·åããã HDD ãã©ã€ãã®ããã€ãã®ã¢ãã«ãåæããåŸã2015 幎ã«ç§ã¯
ç§ã¯ãã®èª¿æ»ã« 40 ã€ã®é±æ«ãšæ°æ©ãè²»ãããŸããã åèšçŽ40æéã æå (ãã£ã¹ã¯ãéãããšã) ããæåŸ (PIN ã³ãŒããã³ã) ãŸã§æ°ããŸãã åã XNUMX æéã«ã¯ããã®èšäºãæžãã®ã«è²»ãããæéãå«ãŸããŸãã ãšãŠãåºæ¿çãªæ è¡ã§ããã
åºæïŒ habr.com