ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC

ื–ื”ื• ื”ื—ืœืง ื”ืฉื ื™ ื•ื”ืื—ืจื•ืŸ ืฉืœ ื”ืžืืžืจ ืขืœ ืคืจื™ืฆืช ื›ื•ื ื ื™ื ื—ื™ืฆื•ื ื™ื™ื ืœื”ืฆืคื ื” ืขืฆืžื™ืช. ื”ืจืฉื• ืœื™ ืœื”ื–ื›ื™ืจ ืœื›ื ืฉืขืžื™ืช ื”ื‘ื™ื ืœื™ ืœืื—ืจื•ื ื” ื›ื•ื ืŸ ืงืฉื™ื— ืฉืœ Patriot (Aigo) SK8671, ื•ื”ื—ืœื˜ืชื™ ืœื”ืคื•ืš ืื•ืชื•, ื•ืขื›ืฉื™ื• ืื ื™ ืžืฉืชืฃ ืืช ืžื” ืฉื™ืฆื ืžืžื ื•. ืœืคื ื™ ืงืจื™ืื” ื ื•ืกืคืช, ื”ืงืคื“ ืœืงืจื•ื ื—ืœืง ืจืืฉื•ืŸ ืžืืžืจื™ื.

4. ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœืงื—ืช dump ืžื›ื•ื ืŸ ื”ื‘ื–ืง PSoC ื”ืคื ื™ืžื™
5. ืคืจื•ื˜ื•ืงื•ืœ ISSP
โ€“ 5.1. ืžื” ื–ื” ISSP
โ€“ 5.2. ื•ืงื˜ื•ืจื™ื ืžืกืœืงื™ื
โ€“ 5.3. ืชืงืฉื•ืจืช ืขื PSoC
โ€“ 5.4. ื–ื™ื”ื•ื™ ืื•ื’ืจื™ื ืขืœ ืฉื‘ื‘
โ€“ 5.5. ื—ืœืงื™ ืื‘ื˜ื—ื”
6. ื”ืชืงืคื” ืจืืฉื•ื ื” (ื›ื•ืฉืœืช): ROMX
7. ื”ืชืงืคื” ืฉื ื™ื™ื”: ืžืขืงื‘ ืื—ืจ ืืชื—ื•ืœ ืงืจ
โ€“ 7.1. ื™ื™ืฉื•ื
โ€“ 7.2. ืงื•ืจื ืืช ื”ืชื•ืฆืื”
โ€“ 7.3. ืฉื—ื–ื•ืจ ื‘ื™ื ืืจื™ ืคืœืืฉ
โ€“ 7.4. ืžืฆื™ืืช ื›ืชื•ื‘ืช ืื—ืกื•ืŸ ืงื•ื“ PIN
โ€“ 7.5. ืœืงื™ื—ืช ืžื–ื‘ืœื” ืฉืœ ื‘ืœื•ืง ืžืก' 126
โ€“ 7.6. ืฉื—ื–ื•ืจ ืงื•ื“ PIN
8. ืžื” ื”ืœืื”?
9. ืžืกืงื ื”

ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC


4. ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœืงื—ืช dump ืžื›ื•ื ืŸ ื”ื‘ื–ืง PSoC ื”ืคื ื™ืžื™

ืื– ื”ื›ืœ ืžืฆื‘ื™ืข (ื›ืคื™ ืฉืงื‘ืขื ื• ื‘[ื—ืœืง ื”ืจืืฉื•ืŸ]()) ืฉืงื•ื“ ื”-PIN ืžืื•ื—ืกืŸ ื‘ืžืขืžืงื™ ื”ื”ื‘ื–ืง ืฉืœ ื”-PSoC. ืœื›ืŸ, ืขืœื™ื ื• ืœืงืจื•ื ืืช ืขื•ืžืงื™ ื”ื”ื‘ื–ืง ื”ืœืœื•. ื—ื–ื™ืช ื”ืขื‘ื•ื“ื” ื”ื“ืจื•ืฉื”:

  • ืœื”ืฉืชืœื˜ ืขืœ "ืชืงืฉื•ืจืช" ืขื ื”ืžื™ืงืจื•-ื‘ืงืจ;
  • ืœืžืฆื•ื ื“ืจืš ืœื‘ื“ื•ืง ื”ืื "ืชืงืฉื•ืจืช" ื–ื• ืžื•ื’ื ืช ืžืงืจื™ืื” ืžื‘ื—ื•ืฅ;
  • ืœืžืฆื•ื ื“ืจืš ืœืขืงื•ืฃ ืืช ื”ื”ื’ื ื”.

ื™ืฉื ื ืฉื ื™ ืžืงื•ืžื•ืช ื‘ื”ื ื”ื’ื™ื•ื ื™ ืœื—ืคืฉ ืงื•ื“ PIN ื—ื•ืงื™:

  • ื–ื™ื›ืจื•ืŸ ืคืœืืฉ ืคื ื™ืžื™;
  • SRAM, ืฉื‘ื• ื ื™ืชืŸ ืœืื—ืกืŸ ืืช ืงื•ื“ ื”-PIN ื›ื“ื™ ืœื”ืฉื•ื•ืช ืื•ืชื• ืœืงื•ื“ ื”-PIN ืฉื”ื–ื™ืŸ ื”ืžืฉืชืžืฉ.

ื‘ืžื‘ื˜ ืงื“ื™ืžื”, ืืฆื™ื™ืŸ ืฉืขื“ื™ื™ืŸ ื”ืฆืœื—ืชื™ ืœืงื—ืช dump ืฉืœ ื›ื•ื ืŸ ื”ื”ื‘ื–ืง ื”ืคื ื™ืžื™ ืฉืœ PSoC - ืขื•ืงืฃ ืืช ืžืขืจื›ืช ื”ืื‘ื˜ื—ื” ืฉืœื• ื‘ืืžืฆืขื•ืช ื”ืชืงืคืช ื—ื•ืžืจื” ืฉื ืงืจืืช "ืžืขืงื‘ ืื—ืจ ืืชื—ื•ืœ ืงืจ" - ืœืื—ืจ ืฉื”ืคื›ืชื™ ืืช ื”ื™ื›ื•ืœื•ืช ื”ืœื ืžืชื•ืขื“ื•ืช ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ ISSP. ื–ื” ืื™ืคืฉืจ ืœื™ ืœื–ืจื•ืง ื™ืฉื™ืจื•ืช ืืช ืงื•ื“ ื”-PIN ื‘ืคื•ืขืœ.

$ ./psoc.py 
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9

ืงื•ื“ ืชื•ื›ื ื™ืช ืกื•ืคื™:

5. ืคืจื•ื˜ื•ืงื•ืœ ISSP

5.1. ืžื” ื–ื” ISSP

ืžืฉืžืขื•ืช "ืชืงืฉื•ืจืช" ืขื ืžื™ืงืจื•-ื‘ืงืจ ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื“ื‘ืจื™ื ืฉื•ื ื™ื: ืž"ืกืคืง ืœืกืคืง" ื•ืขื“ ืœืื™ื ื˜ืจืืงืฆื™ื” ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ ื˜ื•ืจื™ (ืœื“ื•ื’ืžื”, ICSP ืขื‘ื•ืจ PIC ืฉืœ Microchip).

ืœ- Cypress ื™ืฉ ืคืจื•ื˜ื•ืงื•ืœ ืงื ื™ื™ื ื™ ืžืฉืœื” ืœื›ืš, ื”ื ืงืจื ISSP (ืคืจื•ื˜ื•ืงื•ืœ ืชื›ื ื•ืช ื˜ื•ืจื™ ื‘ืชื•ืš ื”ืžืขืจื›ืช), ื”ืžืชื•ืืจ ื‘ื—ืœืงื• ื‘- ืžืคืจื˜ ื˜ื›ื ื™. ืคื˜ื ื˜ US7185162 ื’ื ื ื•ืชืŸ ืงืฆืช ืžื™ื“ืข. ื™ืฉ ื’ื ืžืงื‘ื™ืœื” ืฉืœ OpenSource ื‘ืฉื HSSP (ื ืฉืชืžืฉ ื‘ื” ืงืฆืช ืžืื•ื—ืจ ื™ื•ืชืจ). ISSP ืคื•ืขืœ ื‘ืื•ืคืŸ ื”ื‘ื:

  • ืืชื—ื•ืœ PSoC;
  • ืคืœื˜ ืืช ืžืกืคืจ ื”ืงืกื ืœืคื™ืŸ ื”ื ืชื•ื ื™ื ื”ื˜ื•ืจื™ ืฉืœ PSoC ื–ื”; ื›ื“ื™ ืœื”ื™ื›ื ืก ืœืžืฆื‘ ืชื›ื ื•ืช ื—ื™ืฆื•ื ื™;
  • ืฉืœื— ืคืงื•ื“ื•ืช, ืฉื”ืŸ ืžื—ืจื•ื–ื•ืช ืกื™ื‘ื™ื•ืช ืืจื•ื›ื•ืช ื”ื ืงืจืื•ืช "ื•ืงื˜ื•ืจื™ื".

ืชื™ืขื•ื“ ISSP ืžื’ื“ื™ืจ ื•ืงื˜ื•ืจื™ื ืืœื” ืขื‘ื•ืจ ืงื•ืžืฅ ืงื˜ืŸ ืฉืœ ืคืงื•ื“ื•ืช ื‘ืœื‘ื“:

  • ืืชื—ื•ืœ-1
  • ืืชื—ื•ืœ-2
  • ืืชื—ื•ืœ-3 (ืืคืฉืจื•ื™ื•ืช 3V ื•-5V)
  • ID-SETUP
  • READ-ID-WORD
  • SET-BLOCK-NUM: 10011111010dddddddd111, ื›ืืฉืจ dddddddd=block #
  • ืžื—ื™ืงืช ื›ืžื•ืช ื’ื“ื•ืœื”
  • PROGRAM-BLOCK
  • ืืžืช ืืช ื”ื”ื’ื“ืจื”
  • READ-BYTE: 10110aaaaaaZDDDDDDDDZ1, ื›ืืฉืจ DDDDDDDD = ื ืชื•ื ื™ื ื”ื—ื•ืฆื”, aaaaaa = ื›ืชื•ื‘ืช (6 ืกื™ื‘ื™ื•ืช)
  • WRITE-BYTE: 10010aaaaaaddddddd111, ื›ืืฉืจ dddddddd = data in, aaaaaa = ื›ืชื•ื‘ืช (6 ืกื™ื‘ื™ื•ืช)
  • ืœื‘ื˜ื—
  • CHECKSUM-SETUP
  • READ-CHECKSUM: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1, ื›ืืฉืจ DDDDDDDDDDDDDDDDDD = ื™ืฆื™ืืช ื ืชื•ื ื™ื: ืกื›ื•ื ื‘ื“ื™ืงืช ืžื›ืฉื™ืจ
  • ืžื—ืง ื‘ืœื•ืง

ืœื“ื•ื’ืžื”, ื”ื•ื•ืงื˜ื•ืจ ืฉืœ Initialize-2:

1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111

ืœื›ืœ ื”ื•ืงื˜ื•ืจื™ื ื™ืฉ ืื•ืจืš ื–ื”ื”: 22 ืกื™ื‘ื™ื•ืช. ื‘ืชื™ืขื•ื“ HSSP ื™ืฉ ืžื™ื“ืข ื ื•ืกืฃ ืขืœ ISSP: "ื•ืงื˜ื•ืจ ISSP ื”ื•ื ืœื ื™ื•ืชืจ ืžืจืฆืฃ ืกื™ื‘ื™ื•ืช ื”ืžื™ื™ืฆื’ ืงื‘ื•ืฆื” ืฉืœ ื”ื•ืจืื•ืช."

5.2. ื•ืงื˜ื•ืจื™ื ืžืกืœืงื™ื

ื‘ื•ืื• ื ื‘ื™ืŸ ืžื” ืงื•ืจื” ื›ืืŸ. ื‘ืชื—ื™ืœื” ื”ื ื—ืชื™ ืฉืื•ืชื ื•ืงื˜ื•ืจื™ื ื”ื ื’ืจืกืื•ืช ื’ื•ืœืžื™ื•ืช ืฉืœ ื”ื•ืจืื•ืช M8C, ืืš ืœืื—ืจ ื‘ื“ื™ืงืช ื”ื”ืฉืขืจื” ื”ื–ื•, ื’ื™ืœื™ืชื™ ืฉื”ืื•ืคืงื•ื“ื™ื ืฉืœ ื”ืคืขื•ืœื•ืช ืœื ืชืืžื•.

ืื—ืจ ื›ืš ื—ื™ืคืฉืชื™ ื‘ื’ื•ื’ืœ ืืช ื”ื•ื•ืงื˜ื•ืจ ืœืžืขืœื” ื•ื ืชืงืœืชื™ ื–ึถื” ืžื—ืงืจ ืฉื‘ื• ื”ืžื—ื‘ืจ, ืœืžืจื•ืช ืฉื”ื•ื ืœื ื ื›ื ืก ืœืคืจื˜ื™ื, ื ื•ืชืŸ ื›ืžื” ื˜ื™ืคื™ื ืฉื™ืžื•ืฉื™ื™ื: "ื›ืœ ื”ื•ืจืื” ืžืชื—ื™ืœื” ื‘ืฉืœื•ืฉื” ื‘ื™ื˜ื™ื ื”ืชื•ืืžื™ื ืœืื—ืช ืžืืจื‘ืขื” ื–ื›ืจื•ื ื•ืช (ืงืจื ืž-RAM, ื›ืชื•ื‘ ืœ-RAM, ืงืจื ืจื™ืฉื•ื, ื›ืชื•ื‘ ืจื™ืฉื•ื). ืœืื—ืจ ืžื›ืŸ ื™ืฉ 8 ืกื™ื‘ื™ื•ืช ื›ืชื•ื‘ืช, ื•ืื—ืจื™ื”ืŸ 8 ืกื™ื‘ื™ื•ืช ื ืชื•ื ื™ื (ืงืจื™ืื” ืื• ื›ืชื™ื‘ื”) ื•ืœื‘ืกื•ืฃ ืฉืœื•ืฉื” ืกื™ื‘ื™ื•ืช ืขืฆื™ืจื”".

ืื—ืจ ื›ืš ื”ืฆืœื—ืชื™ ืœืœืงื˜ ืžื™ื“ืข ืฉื™ืžื•ืฉื™ ืžืื•ื“ ืžืงื˜ืข ื”-Supervisory ROM (SROM). ืžื“ืจื™ืš ื˜ื›ื ื™. SROM ื”ื•ื ROM ืžืงื•ื“ื“ ืงืฉื” ื‘-PSoC ื”ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ืฉื™ืจื•ืช (ื‘ืื•ืคืŸ ื“ื•ืžื” ืœ-Syscall) ืขื‘ื•ืจ ืงื•ื“ ืชื•ื›ื ื™ืช ื”ืคื•ืขืœ ื‘ืžืจื—ื‘ ื”ืžืฉืชืžืฉ:

  • 00h:SWBootReset
  • 01h: ReadBlock
  • 02h: WriteBlock
  • 03h: EraseBlock
  • 06:XNUMX: ืงืจื™ืื” ื‘ื˜ื‘ืœื”
  • 07h: CheckSum
  • 08h: ื›ื™ื™ืœ0
  • 09h: ื›ื™ื™ืœ1

ืขืœ ื™ื“ื™ ื”ืฉื•ื•ืืช ืฉืžื•ืช ื•ืงื˜ื•ืจื™ื ืœืคื•ื ืงืฆื™ื•ืช SROM, ื ื•ื›ืœ ืœืžืคื•ืช ืืช ื”ืคืขื•ืœื•ืช ื”ืฉื•ื ื•ืช ื”ื ืชืžื›ื•ืช ืขืœ ื™ื“ื™ ืคืจื•ื˜ื•ืงื•ืœ ื–ื” ืœืคืจืžื˜ืจื™ื ื”ืฆืคื•ื™ื™ื ืฉืœ SROM. ื”ื•ื“ื•ืช ืœื›ืš, ืื ื• ื™ื›ื•ืœื™ื ืœืคืขื ื— ืืช ืฉืœื•ืฉืช ื”ื‘ื™ื˜ื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื•ืงื˜ื•ืจื™ ISSP:

  • 100 => "wrem"
  • 101 => "rdmem"
  • 110 => "wrreg"
  • 111 => "rdreg"

ืขื ื–ืืช, ื ื™ืชืŸ ืœื”ืฉื™ื’ ื”ื‘ื ื” ืžืœืื” ืฉืœ ืชื”ืœื™ื›ื™ื ืขืœ-ืฉื‘ื‘ ืจืง ื‘ืืžืฆืขื•ืช ืชืงืฉื•ืจืช ื™ืฉื™ืจื” ืขื ื”-PSoC.

5.3. ืชืงืฉื•ืจืช ืขื PSoC

ืžืื– ื“ื™ืจืง ืคื˜ืจืื•ื˜ืกืงื™ ื›ื‘ืจ ืžื•ืขื‘ืจ ืงื•ื“ ื”-HSSP ืฉืœ Cypress ื‘-Arduino, ื”ืฉืชืžืฉืชื™ ื‘-Arduino Uno ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœืžื—ื‘ืจ ISSP ืฉืœ ืœื•ื— ื”ืžืงืœื“ืช.

ืฉื™ืžื• ืœื‘ ืฉื‘ืžื”ืœืš ื”ืžื—ืงืจ ืฉืœื™ ืฉื™ื ื™ืชื™ ืœื ืžืขื˜ ืืช ื”ืงื•ื“ ืฉืœ ื“ื™ืจืง. ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืืช ื”ืฉื™ื ื•ื™ ืฉืœื™ ื‘-GitHub: ื›ืืŸ ื•ืชืกืจื™ื˜ Python ื”ืžืชืื™ื ืœืชืงืฉื•ืจืช ืขื Arduino, ื‘ืžืื’ืจ ืฉืœื™ cypress_psoc_tools.

ืื–, ื‘ืืžืฆืขื•ืช Arduino, ื”ืฉืชืžืฉืชื™ ืœืจืืฉื•ื ื” ืจืง ื‘ื•ืงื˜ื•ืจื™ื ื”"ืจืฉืžื™ื™ื" ืœ"ืชืงืฉื•ืจืช". ื ื™ืกื™ืชื™ ืœืงืจื•ื ืืช ื”-ROM ื”ืคื ื™ืžื™ ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” VERIFY. ื›ืฆืคื•ื™, ืœื ื”ืฆืœื—ืชื™ ืœืขืฉื•ืช ื–ืืช. ื›ื ืจืื” ื‘ื’ืœืœ ื”ืขื•ื‘ื“ื” ืฉืกื™ื‘ื™ื•ืช ื”ื’ื ืช ืงืจื™ืื” ืžื•ืคืขืœื•ืช ื‘ืชื•ืš ื›ื•ื ืŸ ื”ื”ื‘ื–ืง.

ืœืื—ืจ ืžื›ืŸ ื™ืฆืจืชื™ ื›ืžื” ื•ืงื˜ื•ืจื™ื ืคืฉื•ื˜ื™ื ืžืฉืœื™ ืœื›ืชื™ื‘ื” ื•ืงืจื™ืื” ืฉืœ ื–ื™ื›ืจื•ืŸ/ืจื’ื™ืกื˜ืจื™ื. ืฉื™ืžื• ืœื‘ ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืงืจื•ื ืืช ื›ืœ ื”-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, ืื‘ืœ ืขื“ื™ื™ืŸ ืื™ืŸ ืœื™ ืžื™ื“ืข ืืžื™ืŸ ืขืœ ืกื™ื‘ื™ื•ืช ื”ืื‘ื˜ื—ื” ืฉืœ ื›ื•ื ืŸ ื”ื”ื‘ื–ืง. ื”ื•ืคืชืขืชื™ ืžืื•ื“ ืžื”ืขื•ื‘ื“ื” ืฉ- Cypress ืœื ืžืกืคืงืช ืœืžืฉืชืžืฉ ื‘ืžื›ืฉื™ืจ ื›ืœ ืืžืฆืขื™ ืœื‘ื“ื•ืง ื”ืื ื”ื”ื’ื ื” ืžื•ืคืขืœืช. ื”ืชืขืžืงืชื™ ื‘ื’ื•ื’ืœ ื›ื“ื™ ืœื”ื‘ื™ืŸ ืกื•ืฃ ืกื•ืฃ ืฉืงื•ื“ ื”-HSSP ืฉืกื™ืคืง Cypress ืขื•ื“ื›ืŸ ืœืื—ืจ ืฉื“ื™ืจืง ืคืจืกื ืืช ื”ืฉื™ื ื•ื™ ืฉืœื•. ื•ื›ืš! ื”ื•ื•ืงื˜ื•ืจ ื”ื—ื“ืฉ ื”ื–ื” ื”ื•ืคื™ืข:

[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

ื‘ืืžืฆืขื•ืช ื•ืงื˜ื•ืจ ื–ื” (ืจืื” read_security_data ื‘-psoc.py), ืื ื• ืžืงื‘ืœื™ื ืืช ื›ืœ ืกื™ื‘ื™ื•ืช ื”ืื‘ื˜ื—ื” ื‘-SRAM ื‘-0x80, ื›ืืฉืจ ื™ืฉ ืฉื ื™ ื‘ื™ื˜ื™ื ืœื›ืœ ื‘ืœื•ืง ืžื•ื’ืŸ.

ื”ืชื•ืฆืื” ืžื“ื›ืืช: ื”ื›ืœ ืžื•ื’ืŸ ื‘ืžืฆื‘ "ื”ืฉื‘ืช ืงืจื™ืื” ื•ื›ืชื™ื‘ื” ื—ื™ืฆื•ื ื™ืช". ืœื›ืŸ, ืœื ืจืง ืฉืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœืงืจื•ื ืฉื•ื ื“ื‘ืจ ืžื›ื•ื ืŸ ื”ื‘ื–ืง, ืืœื ืฉืื ื—ื ื• ื’ื ืœื ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘ ืฉื•ื ื“ื‘ืจ (ืœื“ื•ื’ืžื”, ืœื”ืชืงื™ืŸ ืฉื ื“ื•ืžืคืจ ROM). ื•ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืœื”ืฉื‘ื™ืช ืืช ื”ื”ื’ื ื” ื”ื™ื ืœืžื—ื•ืง ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืฉื‘ื‘ ื›ื•ืœื•. ๐Ÿ™

6. ื”ืชืงืคื” ืจืืฉื•ื ื” (ื›ื•ืฉืœืช): ROMX

ืขื ื–ืืช, ื ื•ื›ืœ ืœื ืกื•ืช ืืช ื”ื˜ืจื™ืง ื”ื‘ื: ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื ื• ืืช ื”ื™ื›ื•ืœืช ืœื”ืคืขื™ืœ ืงื•ื“ื™ื ืฉืจื™ืจื•ืชื™ื™ื, ืžื“ื•ืข ืœื ืœื”ืคืขื™ืœ ืืช ROMX, ื”ืžืฉืžืฉ ืœืงืจื™ืืช ื–ื™ื›ืจื•ืŸ ืคืœืืฉ? ืœื’ื™ืฉื” ื–ื• ื™ืฉ ืกื™ื›ื•ื™ ื˜ื•ื‘ ืœื”ืฆืœื™ื—. ืžื›ื™ื•ื•ืŸ ืฉืคื•ื ืงืฆื™ื™ืช ReadBlock ืฉืงื•ืจืืช ื ืชื•ื ื™ื ืžื”-SROM (ืฉืžืฉืžืฉื™ื ื‘ื•ืงื˜ื•ืจื™ื) ื‘ื•ื“ืงืช ืื ื”ื™ื ื ืงืจืืช ืžื”-ISSP. ืขื ื–ืืช, ื™ื™ืชื›ืŸ ืฉืœืงื•ื“ ื”-ROMX ืื™ืŸ ื‘ื“ื™ืงื” ื›ื–ื•. ืื– ื”ื ื” ื”ืงื•ื“ ืฉืœ Python (ืœืื—ืจ ื”ื•ืกืคืช ื›ืžื” ืžื—ืœืงื•ืช ืขื•ื–ืจ ืœืงื•ื“ Arduino):

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. ื”ืชืงืคื” ืฉื ื™ื™ื”: ืžืขืงื‘ ืื—ืจ ืืชื—ื•ืœ ืงืจ

ืžื›ื™ื•ื•ืŸ ืฉื”ื˜ืจื™ืง ืฉืœ 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 ืกื™ื‘ื™ื•ืช ืฉืœ ืžืกืคืจ ื”ื‘ืœื•ืงื™ื ืฉืฆื•ื™ื ื• ืขืœ ื™ื“ื™ ื”ืžืฉืชืžืฉ ื‘ื‘ื ืง ื”ื‘ื–ืง ืื—ื“, ื”ื—ืœ ืžืืคืก. ื”ืคืจืžื˜ืจ BLOCKID ืžืฉืžืฉ ืœื”ืขื‘ืจืช ืžืกืคืจ ื”ื‘ืœื•ืงื™ื ืฉื™ืฉืžืฉื• ื‘ืขืช ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื”. ืขืจืš ืฉืœ "1" ื™ื—ืฉื‘ ืจืง ืืช ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืขื‘ื•ืจ ื‘ืœื•ืง ืืคืก; ื•ืื™ืœื• "0" ื™ื’ืจื•ื ืœื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื” ื”ื›ื•ืœืœ ืฉืœ ื›ืœ 256 ื”ื‘ืœื•ืงื™ื ืฉืœ ื‘ื ืง ื”ืคืœืืฉ. ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืฉืœ 16 ืกื™ื‘ื™ื•ืช ืžื•ื—ื–ืจ ื‘ืืžืฆืขื•ืช KEY1 ื•-KEY2. ื”ืคืจืžื˜ืจ KEY1 ืžืื—ืกืŸ ืืช 8 ื”ืกื™ื‘ื™ื•ืช ืžื”ืกื“ืจ ื”ื ืžื•ืš ืฉืœ ืกื›ื•ื ื”ื‘ื“ื™ืงื”, ื•ื”ืคืจืžื˜ืจ KEY2 ืžืื—ืกืŸ ืืช 8 ื”ืกื™ื‘ื™ื•ืช ืžื”ืกื“ืจ ื”ื’ื‘ื•ื”. ืขื‘ื•ืจ ืžื›ืฉื™ืจื™ื ืขื ืžืกืคืจ ื‘ื ืงื™ ืคืœืืฉ, ืคื•ื ืงืฆื™ื™ืช ื”-Checksum ื ืงืจืืช ืขื‘ื•ืจ ื›ืœ ืื—ื“ ื‘ื ืคืจื“. ืžืกืคืจ ื”ื‘ื ืง ืื™ืชื• ื”ื•ื ื™ืขื‘ื•ื“ ื ืงื‘ืข ืขืœ ื™ื“ื™ ื”ืื•ื’ืจ FLS_PR1 (ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ื”ื‘ื™ื˜ ื‘ื• ื”ืžืชืื™ื ืœื‘ื ืง ื”ืคืœืืฉ ื”ื™ืขื“).

ืฉื™ืžื• ืœื‘ ืฉื–ื”ื• ืกื›ื•ื ื‘ื™ืงื•ืจืช ืคืฉื•ื˜: ื”ื‘ืชื™ื ืคืฉื•ื˜ ืžืชื•ื•ืกืคื™ื ืื—ื“ ืื—ืจื™ ื”ืฉื ื™; ืœืœื ืžื•ื–ืจื•ื™ื•ืช CRC ืžืคื•ืืจื•ืช. ื‘ื ื•ืกืฃ, ืžืชื•ืš ื™ื“ื™ืขื” ืฉืœืœื™ื‘ืช ื”-M8C ื™ืฉ ืงื‘ื•ืฆื” ืงื˜ื ื” ืžืื•ื“ ืฉืœ ืื•ื’ืจื™ื, ื”ื ื—ืชื™ ืฉื‘ืขืช ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื”, ืขืจื›ื™ ื‘ื™ื ื™ื™ื ื™ื™ืจืฉืžื• ื‘ืื•ืชื ืžืฉืชื ื™ื ืฉื™ืœื›ื• ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืœืคืœื˜: KEY1 (0xF8) / KEY2 ( 0xF9).

ืื– ื‘ืชื™ืื•ืจื™ื” ื”ื”ืชืงืคื” ืฉืœื™ ื ืจืื™ืช ื›ืš:

  1. ืื ื• ืžืชื—ื‘ืจื™ื ื‘ืืžืฆืขื•ืช ISSP.
  2. ืื ื• ืžืชื—ื™ืœื™ื ืืช ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื” ื‘ืืžืฆืขื•ืช ื•ืงื˜ื•ืจ CHECKSUM-SETUP.
  3. ืื ื• ืžืืชื—ืœื™ื ืืช ื”ืžืขื‘ื“ ืœืื—ืจ ื–ืžืŸ ืžื•ื’ื“ืจ T.
  4. ืื ื• ืงื•ืจืื™ื ื–ื™ื›ืจื•ืŸ RAM ื›ื“ื™ ืœืงื‘ืœ ืืช ืกื›ื•ื ื”ื‘ื“ื™ืงื” ื”ื ื•ื›ื—ื™ C.
  5. ื—ื–ื•ืจ ืขืœ ืฉืœื‘ื™ื 3 ื•-4, ื”ื’ื“ืœ ืžืขื˜ ืืช T ื‘ื›ืœ ืคืขื.
  6. ืื ื• ืžืฉื—ื–ืจื™ื ื ืชื•ื ื™ื ืžื›ื•ื ืŸ ื”ื‘ื–ืง ืขืœ ื™ื“ื™ ื”ืคื—ืชืช ืกื›ื•ื ื”ื‘ื“ื™ืงื” ื”ืงื•ื“ื 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();

  1. ืงืจื checkum_delay.
  2. ื”ืคืขืœ ื—ื™ืฉื•ื‘ ืกื›ื•ื ื‘ื“ื™ืงื” (send_checksum_v).
  3. ื”ืžืชืŸ ืœืคืจืง ื–ืžืŸ ืžื•ื’ื“ืจ; ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืžืœื›ื•ื“ื•ืช ื”ื‘ืื•ืช:
    • ื‘ื–ื‘ื–ืชื™ ื”ืจื‘ื” ื–ืžืŸ ืขื“ ืฉื’ื™ืœื™ืชื™ ืžื” ื™ืฆื ืขื™ื›ื•ื‘ ืžื™ืงืจื•-ืฉื ื™ื•ืช ืคื•ืขืœ ื›ืจืื•ื™ ืจืง ืขื ืขื™ื›ื•ื‘ื™ื ืฉืื™ื ื ืขื•ืœื™ื ืขืœ 16383 ฮผs;
    • ื•ืื– ืฉื•ื‘ ื”ืจื’ ืืช ืื•ืชื” ื›ืžื•ืช ื–ืžืŸ ืขื“ ืฉื’ื™ืœื™ืชื™ ืฉื”-delayMicroseconds, ืื 0 ืžื•ืขื‘ืจ ืืœื™ื• ื›ืงืœื˜, ืขื•ื‘ื“ ืœื’ืžืจื™ ืœื ื ื›ื•ืŸ!
  4. ื”ืคืขืœ ืžื—ื“ืฉ ืืช ื”-PSoC ืœืžืฆื‘ ืชื›ื ื•ืช (ืื ื—ื ื• ืคืฉื•ื˜ ืฉื•ืœื—ื™ื ืืช ืžืกืคืจ ื”ืงืกื, ืžื‘ืœื™ ืœืฉืœื•ื— ื•ืงื˜ื•ืจื™ื ืืชื—ื•ืœ).

ืงื•ื“ ืกื•ืคื™ ื‘ืคื™ื™ืชื•ืŸ:

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))

ื‘ืงืฆืจื”, ืžื” ื”ืงื•ื“ ื”ื–ื” ืขื•ืฉื”:

  1. ืžืืชื—ืœ ืืช ื”-PSoC (ื•ืฉื•ืœื— ืœื• ืžืกืคืจ ืงืกื).
  2. ืฉื•ืœื— ื•ืงื˜ื•ืจื™ื ืืชื—ื•ืœ ืžืœื.
  3. ืงื•ืจื ืœืคื•ื ืงืฆื™ื” Arduino Cmnd_STK_START_CSUM (0x85), ื›ืืฉืจ ื”ื”ืฉื”ื™ื” ื‘ืžื™ืงืจื•-ืฉื ื™ื•ืช ืžื•ืขื‘ืจืช ื›ืคืจืžื˜ืจ.
  4. ืงื•ืจื ืืช ืกื›ื•ื ื”ื‘ื“ื™ืงื” (0xF8 ื•-0xF9) ื•ืืช ื”ืื•ื’ืจ ื”ืœื ืžืชื•ืขื“ 0xF1.

ืงื•ื“ ื–ื” ืžื‘ื•ืฆืข 10 ืคืขืžื™ื ื‘ืžื™ืงืจื•-ืฉื ื™ื™ื” ืื—ืช. 1xF0 ื ื›ืœืœ ื›ืืŸ ืžื›ื™ื•ื•ืŸ ืฉื–ื” ื”ื™ื” ื”ืจืฉื•ื ื”ื™ื—ื™ื“ ืฉื”ืฉืชื ื” ื‘ืขืช ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื”. ืื•ืœื™ ื–ื” ืกื•ื’ ืฉืœ ืžืฉืชื ื” ื–ืžื ื™ ื”ืžืฉืžืฉ ืืช ื”ื™ื—ื™ื“ื” ื”ืœื•ื’ื™ืช ื”ืืจื™ืชืžื˜ื™ืช. ืฉื™ืžื• ืœื‘ ืœืคืจื™ืฆื” ื”ืžื›ื•ืขืจืช ืฉื‘ื” ืื ื™ ืžืฉืชืžืฉ ื›ื“ื™ ืœืืคืก ืืช ื”ืืจื“ื•ืื™ื ื• ื‘ืืžืฆืขื•ืช ืคื™ืงื•ืงื•ื ื›ืืฉืจ ื”ืืจื“ื•ืื™ื ื• ืžืคืกื™ืง ืœื”ืจืื•ืช ืกื™ืžื ื™ ื—ื™ื™ื (ืื™ืŸ ืœื™ ืžื•ืฉื’ ืœืžื”).

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 ืžื™ืงืจื•ืกื•ืคื˜ ื‘ืขืจืš ืœื‘ื™ื™ื˜, ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื–ืžืŸ ื”ื–ื” ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ืขืจืš ื”ื‘ื“ื™ืงื” ื‘ื–ืžื ื™ื ื”ืžืชืื™ืžื™ื. ื‘ืจื™ืฆื•ืช ื”ืจืืฉื•ื ื•ืช, ื”ื›ืœ ื ืงืจื ื“ื™ ื‘ืงืœื•ืช, ืฉื›ืŸ ืžืฉืš ื”ื”ืœื™ืš ื”ื—ื™ืฉื•ื‘ื™ ืชืžื™ื“ ื›ืžืขื˜ ื–ื”ื”. ืขื ื–ืืช, ื”ืกื•ืฃ ืฉืœ dump ื–ื” ืคื—ื•ืช ืžื“ื•ื™ืง ืžื›ื™ื•ื•ืŸ ืฉ"ืกื˜ื™ื•ืช ื”ืชื–ืžื•ืŸ ื”ืงืœื•ืช" ื‘ื›ืœ ืจื™ืฆื” ืžืฆื˜ื‘ืจื•ืช ืœื”ื™ื•ืช ืžืฉืžืขื•ืชื™ื•ืช:

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.

ืจืืฉื™ืช, ื›ื“ื™ ืœืžืฆื•ื ืืช ื›ืชื•ื‘ืช ื”ืื—ืกื•ืŸ ื”ืžืฉื•ืขืจืช, ืขืฉื™ืชื™ dump ืฉืœ ืกื›ื•ื ื‘ื“ื™ืงื” ื‘ืžืจื•ื•ื—ื™ื ืฉืœ 10 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ. ื•ืื– ื”ื–ื ืชื™ ืืช ื”-PIN ื”ืฉื’ื•ื™ ื•ืขืฉื™ืชื™ ืื•ืชื• ื“ื‘ืจ.

ื”ืชื•ืฆืื” ืœื ื”ื™ื™ืชื” ื ืขื™ืžื” ื‘ืžื™ื•ื—ื“, ืฉื›ืŸ ื”ื™ื• ืฉื™ื ื•ื™ื™ื ืจื‘ื™ื. ืื‘ืœ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ืฆืœื—ืชื™ ืœืงื‘ื•ืข ืฉืกื›ื•ื ื”ื‘ื“ื™ืงื” ื”ืฉืชื ื” ืื™ืคืฉื”ื• ื‘ื™ืŸ 120000 ืžื™ืงืจื•-ืฉื ื™ื•ืช ืœ-140000 ืžื™ืงืจื•-ืฉื ื™ื•ืช ืฉืœ ืขื™ื›ื•ื‘. ืื‘ืœ ื”-"pincode" ืฉื”ืฆื’ืชื™ ืฉื ื”ื™ื” ืฉื’ื•ื™ ืœื—ืœื•ื˜ื™ืŸ - ืขืงื‘ ื—ืคืฅ ืฉืœ ื”ืœื™ืš delayMicroseconds, ืฉืขื•ืฉื” ื“ื‘ืจื™ื ืžื•ื–ืจื™ื ื›ืฉืžื•ืขื‘ืจ ืืœื™ื• 0.

ื•ืื–, ืœืื—ืจ ืฉื‘ื™ืœื™ืชื™ ื›ืžืขื˜ 3 ืฉืขื•ืช, ื ื–ื›ืจืชื™ ืฉืžืขืจื›ืช ื”-SROM ื”ืงืจื™ืื” CheckSum ืžืงื‘ืœืช ืืจื’ื•ืžื ื˜ ื›ืงืœื˜ ื”ืžืฆื™ื™ืŸ ืืช ืžืกืคืจ ื”ื—ืกื™ืžื•ืช ืขื‘ื•ืจ ื”-checksum! ื–ึถื”. ืื ื• ื™ื›ื•ืœื™ื ื‘ืงืœื•ืช ืœืืชืจ ืืช ื›ืชื•ื‘ืช ื”ืื—ืกื•ืŸ ืฉืœ ืงื•ื“ ื”-PIN ื•ืžื•ื ื” "ื”ื ืกื™ื•ื ื•ืช ื”ืฉื’ื•ื™ื™ื", ื‘ื“ื™ื•ืง ืฉืœ ืขื“ 64 ื‘ืชื™ื ื‘ืœื•ืง.

ื”ืจื™ืฆื•ืช ื”ืจืืฉื•ื ื™ื•ืช ืฉืœื™ ื”ื ื™ื‘ื• ืืช ื”ืชื•ืฆืื” ื”ื‘ืื”:

ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC

ืœืื—ืจ ืžื›ืŸ ืฉื™ื ื™ืชื™ ืืช ืงื•ื“ ื”-PIN ืž-"123456" ืœ-"1234567" ื•ืงื™ื‘ืœืชื™:

ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC

ืœืคื™ื›ืš, ื ืจืื” ืฉืงื•ื“ ื”-PIN ื•ื”ืžื•ื ื” ืฉืœ ื ื™ืกื™ื•ื ื•ืช ืฉื’ื•ื™ื™ื ืžืื•ื—ืกื ื™ื ื‘ื‘ืœื•ืง ืžืก' 126.

7.5. ืœืงื™ื—ืช ืžื–ื‘ืœื” ืฉืœ ื‘ืœื•ืง ืžืก' 126

ื‘ืœื•ืง ืžืก' 126 ืืžื•ืจ ืœื”ื™ื•ืช ืžืžื•ืงื ืื™ืคืฉื”ื• ื‘ืกื‘ื™ื‘ื•ืช 125x64x18 = 144000ฮผs, ืžืชื—ื™ืœืช ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ื‘ื“ื™ืงื”, ื‘-dump ื”ืžืœื ืฉืœื™, ื•ื–ื” ื ืจืื” ื“ื™ ืกื‘ื™ืจ. ืœืื—ืจ ืžื›ืŸ, ืœืื—ืจ ืกื™ื ื•ืŸ ื™ื“ื ื™ ืฉืœ ื”ืฉืœื›ื•ืช ืœื ื—ื•ืงื™ื•ืช ืจื‘ื•ืช (ืขืงื‘ ื”ืฆื˜ื‘ืจื•ืช ืฉืœ "ืกื˜ื™ื•ืช ืชื–ืžื•ืŸ ืงืœื•ืช"), ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืงื™ื‘ืœืชื™ ืืช ื”ื‘ืชื™ื ื”ืืœื” (ื‘ื”ืฉื”ื™ื” ืฉืœ 145527 ืžื™ืงืจื•ืŸ):

ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC

ื–ื” ื“ื™ ื‘ืจื•ืจ ืฉืงื•ื“ ื”-PIN ืžืื•ื—ืกืŸ ื‘ืฆื•ืจื” ืœื ืžื•ืฆืคื ืช! ืขืจื›ื™ื ืืœื•, ื›ืžื•ื‘ืŸ, ืื™ื ื ื›ืชื•ื‘ื™ื ื‘ืงื•ื“ื™ ASCII, ืืš ื›ืคื™ ืฉืžืชื‘ืจืจ, ื”ื ืžืฉืงืคื™ื ืืช ื”ืงืจื™ืื•ืช ืฉื ืœืงื—ื• ืžื”ืžืงืœื“ืช ื”ืงื™ื‘ื•ืœื™ืช.

ืœื‘ืกื•ืฃ, ื”ืจืฆืชื™ ืขื•ื“ ื›ืžื” ื‘ื“ื™ืงื•ืช ื›ื“ื™ ืœืžืฆื•ื ื”ื™ื›ืŸ ืžืื•ื—ืกืŸ ืžื•ื ื” ื”ื ื™ืกื™ื•ื ื•ืช ื”ื’ืจื•ืขื™ื. ื”ื ื” ื”ืชื•ืฆืื”:

ื”ื™ืคื•ืš ื•ืคืจื™ืฆื” ืฉืœ ื›ื•ื ืŸ HDD ื—ื™ืฆื•ื ื™ ืžื•ืฆืคืŸ ืขืฆืžื™ืช ืฉืœ Aigo. ื—ืœืง 2: ืœืงื™ื—ืช dump ืž- Cypress PSoC

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

ื”ื™ื“ื“! ืขื•ื‘ื“!

ืฉื™ื ืœื‘ ืฉืขืจื›ื™ ื”ื”ืฉื”ื™ื” ืฉื‘ื”ื ื”ืฉืชืžืฉืชื™ ื›ื ืจืื” ืจืœื•ื•ื ื˜ื™ื™ื ืœ-PSoC ืกืคืฆื™ืคื™ ืื—ื“ - ื–ื” ืฉื”ืฉืชืžืฉืชื™ ื‘ื•.

8. ืžื” ื”ืœืื”?

ืื– ื‘ื•ืื• ื ืกื›ื ืืช ื”ืฆื“ ืฉืœ ื”-PSoC, ื‘ื”ืงืฉืจ ืฉืœ ื›ื•ื ืŸ Aigo ืฉืœื ื•:

  • ืื ื• ื™ื›ื•ืœื™ื ืœืงืจื•ื SRAM ื’ื ืื ื”ื•ื ืžื•ื’ืŸ ืงืจื™ืื”;
  • ืื ื• ื™ื›ื•ืœื™ื ืœืขืงื•ืฃ ืืช ื”ื”ื’ื ื” ื ื’ื“ ื”ื—ืœืงื” ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืžืชืงืคืช ืžืขืงื‘ ืฉืœ ืืชื—ื•ืœ ืงืจ ื•ืงืจื™ืื” ื™ืฉื™ืจื” ืฉืœ ืงื•ื“ ื”-PIN.

ืขื ื–ืืช, ืœื”ืชืงืคื” ืฉืœื ื• ื™ืฉ ื›ืžื” ืคื’ืžื™ื ืขืงื‘ ื‘ืขื™ื•ืช ืกื ื›ืจื•ืŸ. ื ื™ืชืŸ ืœืฉืคืจ ื–ืืช ื‘ืื•ืคืŸ ื”ื‘ื:

  • ืœื›ืชื•ื‘ ื›ืœื™ ืขื–ืจ ืœืคืขื ื•ื— ื ื›ื•ืŸ ืฉืœ ื ืชื•ื ื™ ื”ืคืœื˜ ื”ืžืชืงื‘ืœื™ื ื›ืชื•ืฆืื” ืžื”ืชืงืคืช "ืขืงื‘ื•ืช ืืชื—ื•ืœ ืงืจ";
  • ื”ืฉืชืžืฉ ื‘ื’ืื“ื’'ื˜ FPGA ื›ื“ื™ ืœื™ืฆื•ืจ ืขื™ื›ื•ื‘ื™ ื–ืžืŸ ืžื“ื•ื™ืงื™ื ื™ื•ืชืจ (ืื• ื”ืฉืชืžืฉ ื‘ื˜ื™ื™ืžืจื™ื ืฉืœ ื—ื•ืžืจื” ืฉืœ Arduino);
  • ื ืกื” ื”ืชืงืคื” ื ื•ืกืคืช: ื”ื–ืŸ ืงื•ื“ PIN ืฉื’ื•ื™ ื‘ื›ื•ื•ื ื”, ื”ืคืขืœ ืžื—ื“ืฉ ื•ื”ื•ืจื“ ืืช RAM, ื‘ืชืงื•ื•ื” ืฉืงื•ื“ ื”-PIN ื”ื ื›ื•ืŸ ื™ื™ืฉืžืจ ื‘-RAM ืœืฆื•ืจืš ื”ืฉื•ื•ืื”. ืขื ื–ืืช, ื–ื” ืœื ื›ืœ ื›ืš ืงืœ ืœืขืฉื•ืช ื‘- Arduino, ืžื›ื™ื•ื•ืŸ ืฉืจืžืช ื”ืื•ืช ืฉืœ Arduino ื”ื™ื 5 ื•ื•ืœื˜, ื‘ืขื•ื“ ืฉื”ืœื•ื— ืฉืื ื• ื‘ื•ื—ื ื™ื ืขื•ื‘ื“ ืขื ืื•ืชื•ืช 3,3 ื•ื•ืœื˜.

ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืื—ื“ ืฉืืคืฉืจ ืœื ืกื•ืช ื”ื•ื ืœืฉื—ืง ืขื ืจืžืช ื”ืžืชื— ื›ื“ื™ ืœืขืงื•ืฃ ืืช ื”ื’ื ืช ื”ืงืจื™ืื”. ืื ื’ื™ืฉื” ื–ื• ื”ื™ื™ืชื” ืขื•ื‘ื“ืช, ื ื•ื›ืœ ืœืงื‘ืœ ื ืชื•ื ื™ื ืžื“ื•ื™ืงื™ื ืœื—ืœื•ื˜ื™ืŸ ืžื›ื•ื ืŸ ื”ื‘ื–ืง - ื‘ืžืงื•ื ืœื”ืกืชืžืš ืขืœ ืงืจื™ืืช ืกื›ื•ื ื‘ื“ื™ืงื” ืขื ืขื™ื›ื•ื‘ื™ื ื‘ืชื–ืžื•ืŸ ืœื ืžื“ื•ื™ืงื™ื.

ืžื›ื™ื•ื•ืŸ ืฉื”-SROM ื›ื ืจืื” ืงื•ืจื ืืช ืกื™ื‘ื™ื•ืช ื”ืฉืžื™ืจื” ื‘ืืžืฆืขื•ืช ืงืจื™ืืช ืžืขืจื›ืช ReadBlock, ื ื•ื›ืœ ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ ื›ืžื• ืžึฐืชื•ึผืึธืจ ื‘ื‘ืœื•ื’ ืฉืœ ื“ืžื™ื˜ืจื™ ื ื“ื•ืกืคืกื•ื‘ - ื™ื™ืฉื•ื ืžื—ื“ืฉ ืฉืœ ื”ืžืชืงืคื” ืฉืœ ื›ืจื™ืก ื’ืจืœื™ื ืกืงื™, ื”ื•ื›ืจื– ื‘ื›ื ืก "REcon Brussels 2017".

ืขื•ื“ ื“ื‘ืจ ืžื”ื ื” ืฉืืคืฉืจ ืœืขืฉื•ืช ื”ื•ื ืœื˜ื—ื•ืŸ ืืช ื”ืžืืจื– ืžื”ืฉื‘ื‘: ืœืงื—ืช dump SRAM, ืœื–ื”ื•ืช ืงืจื™ืื•ืช ืžืขืจื›ืช ืœื ืžืชื•ืขื“ื•ืช ื•ืคื’ื™ืขื•ื™ื•ืช.

9. ืžืกืงื ื”

ืื–, ื”ื”ื’ื ื” ืฉืœ ื”ื›ื•ื ืŸ ื”ื–ื” ืžืฉืื™ืจื” ื”ืจื‘ื” ืžื” ืœืจืฆื•ืช, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืฉืชืžืฉ ื‘ืžื™ืงืจื•-ื‘ืงืจ ืจื’ื™ืœ (ืœื "ืžื•ืงืฉื—") ื›ื“ื™ ืœืื—ืกืŸ ืืช ืงื•ื“ ื”-PIN... ื‘ื ื•ืกืฃ, ืœื ื‘ื“ืงืชื™ (ืขื“ื™ื™ืŸ) ืื™ืš ื”ื“ื‘ืจื™ื ื”ื•ืœื›ื™ื ืขื ื ืชื•ื ื™ื ื”ืฆืคื ื” ื‘ืžื›ืฉื™ืจ ื–ื”!

ืžื” ืืชื” ื™ื›ื•ืœ ืœื”ืžืœื™ืฅ โ€‹โ€‹ืขืœ ืื™ื™ื’ื•? ืœืื—ืจ ืฉื ื™ืชื— ื›ืžื” ื“ื’ืžื™ื ืฉืœ ื›ื•ื ื ื™ HDD ืžื•ืฆืคื ื™ื, ื‘ืฉื ืช 2015 ื™ืฆืจืชื™ ื”ึทืฆึธื’ึธื” ื‘-SyScan, ืฉื‘ื• ื‘ื—ืŸ ืืช ื‘ืขื™ื•ืช ื”ืื‘ื˜ื—ื” ืฉืœ ื›ืžื” ื›ื•ื ื ื™ HDD ื—ื™ืฆื•ื ื™ื™ื, ื•ื”ืฆื™ืข ื”ืžืœืฆื•ืช ืžื” ื ื™ืชืŸ ืœืฉืคืจ ื‘ื”ื. ๐Ÿ™‚

ื‘ื™ืœื™ืชื™ ืฉื ื™ ืกื•ืคื™ ืฉื‘ื•ืข ื•ืžืกืคืจ ืขืจื‘ื™ื ื‘ืžื—ืงืจ ื”ื–ื”. ืกืš ื”ื›ืœ ื›-40 ืฉืขื•ืช. ืกื•ืคืจื™ื ืžื”ื”ืชื—ืœื” (ื›ืฉืคืชื—ืชื™ ืืช ื”ื“ื™ืกืง) ื•ืขื“ ื”ืกื•ืฃ (ืžื–ืžื›ืช ืงื•ื“ PIN). ืื•ืชืŸ 40 ืฉืขื•ืช ื›ื•ืœืœื•ืช ืืช ื”ื–ืžืŸ ืฉื‘ื™ืœื™ืชื™ ื‘ื›ืชื™ื‘ืช ืžืืžืจ ื–ื”. ื–ื” ื”ื™ื” ื˜ื™ื•ืœ ืžืื•ื“ ืžืจื’ืฉ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”