เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ Cypress PSoC

เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™ hack เป„เบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ•เบปเบ™เป€เบญเบ‡เบžเบฒเบเบ™เบญเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เป„เบ”เป‰เบ™เปเบฒเป€เบญเบปเบฒเบฎเบฒเบ”เบ”เบดเบ” Patriot (Aigo) SK8671 เปƒเบซเป‰เบเบฑเบšเบ‚เป‰เบญเบ, เปเบฅเบฐเบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเบฑเบšเบกเบฑเบ™, เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบญเบญเบเบกเบฒเบˆเบฒเบเบกเบฑเบ™. เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เบ•เปเปˆเป„เบ›, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบญเปˆเบฒเบ™ เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ” เบšเบปเบ”เบ„เบงเบฒเบก.

4. เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒ dump เบˆเบฒเบเบžเบฒเบเปƒเบ™ PSoC flash drive
5. เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ ISSP
โ€“ 5.1. ISSP เปเบกเปˆเบ™เบซเบเบฑเบ‡
โ€“ 5.2. Demystifying vectors
โ€“ 5.3. เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบเบฑเบš PSoC
โ€“ 5.4. เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปƒเบ™เบŠเบดเบš
โ€“ 5.5. เบšเบดเบ”เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž
6. เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” (เบฅเบปเป‰เบกเป€เบซเบฅเบง): ROMX
7. เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡: Cold Boot Tracing
โ€“ 7.1. เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”
โ€“ 7.2. เบเบฒเบ™เบญเปˆเบฒเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš
โ€“ 7.3. Flash เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบ–เบฒเบ™เบชเบญเบ‡
โ€“ 7.4. เบŠเบญเบเบซเบฒเบ—เบตเปˆเบขเบนเปˆเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ” PIN
โ€“ 7.5. เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ•เบฑเบ™ เป€เบฅเบเบ—เบต 126
โ€“ 7.6. เบเบฒเบ™เบเบนเป‰เบฅเบฐเบซเบฑเบ” PIN
8. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบซเบเบฑเบ‡?
9 เบชเบฐเบซเบผเบธเบš

เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ Cypress PSoC


4. เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒ dump เบˆเบฒเบเบžเบฒเบเปƒเบ™ PSoC flash drive

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™ (เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เปƒเบ™ [เบžเบฒเบเบ—เปเบฒเบญเบดเบ”] ()) เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” PIN เป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบ„เบงเบฒเบกเป€เบฅเบดเบ flash เบ‚เบญเบ‡ PSoC. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบญเปˆเบฒเบ™เบ„เบงเบฒเบกเป€เบฅเบดเบ Flash เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ—เบฒเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹:

  • เป€เบญเบปเบฒเบเบฒเบ™เบ„เบงเบšเบ„เบธเบก "เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™" เบเบฑเบš microcontroller;
  • เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ "เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™" เบ™เบตเป‰เบ–เบทเบเบ›เบปเบเบ›เป‰เบญเบ‡เบˆเบฒเบเบเบฒเบ™เบญเปˆเบฒเบ™เบˆเบฒเบเบžเบฒเบเบ™เบญเบ;
  • เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ‚เป‰เบฒเบกเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡.

เบกเบตเบชเบญเบ‡เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบฅเบฐเบซเบฑเบ” PIN เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡:

  • เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash เบžเบฒเบเปƒเบ™;
  • SRAM, เบšเปˆเบญเบ™เบ—เบตเปˆเบฅเบฐเบซเบฑเบ” PIN เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป€เบžเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเบกเบฑเบ™เบเบฑเบšเบฅเบฐเบซเบฑเบ” PIN เบ—เบตเปˆเปƒเบชเปˆเป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰.

เป€เบšเบดเปˆเบ‡เป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ, เบ‚เป‰เบญเบเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบเบฑเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡ PSoC flash drive เบžเบฒเบเปƒเบ™ - เบ‚เป‰เบฒเบกเบฅเบฐเบšเบปเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบฎเบฒเบ”เปเบงเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "cold boot tracing" - เบซเบผเบฑเบ‡เบˆเบฒเบเบซเบฑเบ™เบเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™ ISSP. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบ–เบดเป‰เบกเบฅเบฐเบซเบฑเบ” PIN เบ•เบปเบงเบˆเบดเบ‡เป‚เบ”เบเบเบปเบ‡.

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

เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบชเบธเบ”เบ—เป‰เบฒเบ:

5. เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ ISSP

5.1. ISSP เปเบกเปˆเบ™เบซเบเบฑเบ‡

"เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™" เบเบฑเบš microcontroller เบชเบฒเบกเบฒเบ”เบซเบกเบฒเบเป€เบ–เบดเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™: เบˆเบฒเบ "เบœเบนเป‰เบ‚เบฒเบเบเบฑเบšเบœเบนเป‰เบ‚เบฒเบ" เป„เบ›เบชเบนเปˆเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป‚เบ”เบเปƒเบŠเป‰เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ serial (เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™ ICSP เบชเปเบฒเบฅเบฑเบš Microchip's PIC).

Cypress เบกเบตเบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เป€เบญเบตเป‰เบ™เบงเปˆเบฒ ISSP (เปƒเบ™เบฅเบฐเบšเบปเบš serial programming protocol), เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบšเบฒเบ‡เบชเปˆเบงเบ™เปƒเบ™. เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เบ”เป‰เบฒเบ™โ€‹เบงเบดโ€‹เบŠเบฒโ€‹เบเบฒเบ™โ€‹. เบชเบดเบ”เบ—เบดเบšเบฑเบ” US7185162 เบเบฑเบ‡เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบต OpenSource เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ HSSP (เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เบ•เปเปˆเบกเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ). ISSP เป€เบฎเบฑเบ”เบงเบฝเบเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • reboot PSoC;
  • เบชเบปเปˆเบ‡เบญเบญเบเบ•เบปเบงเป€เบฅเบ magic เบเบฑเบš PIN เบ‚เปเป‰เบกเบนเบ™ serial เบ‚เบญเบ‡ PSoC เบ™เบตเป‰; เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเป‚เบซเบกเบ”เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบžเบฒเบเบ™เบญเบ;
  • เบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบฒเบเบšเบดเบ”เบเบฒเบงเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "vectors".

เป€เบญเบเบฐเบชเบฒเบ™ ISSP เบเปเบฒเบ™เบปเบ” vectors เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡:

  • เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ -1
  • เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ -2
  • Initialize-3 (เบ—เบฒเบ‡เป€เบฅเบทเบญเบ 3V เปเบฅเบฐ 5V)
  • ID-SETUP
  • READ-ID-WORD
  • SET-BLOCK-NUM: 10011111010ddddddddd111, where dddddddd=block #
  • เบฅเบปเบšเบซเบผเบฒเบ
  • เป‚เบ›เบฃเปเบเบก-เบšเบฅเบฑเบญเบ
  • เบขเบทเบ™เบขเบฑเบ™-เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ
  • READ-BYTE: 10110aaaaaaZDDDDDDDDZ1, เบšเปˆเบญเบ™เบ—เบตเปˆ DDDDDDDD = เบ‚เปเป‰เบกเบนเบ™เบญเบญเบ, aaaaaa = เบ—เบตเปˆเบขเบนเปˆ (6 เบšเบดเบ”)
  • WRITE-BYTE: 10010aaaaaaaddddddd111, เบšเปˆเบญเบ™เบ—เบตเปˆ dddddddd = เบ‚เปเป‰เบกเบนเบ™เบขเบนเปˆเปƒเบ™, aaaaaa = เบ—เบตเปˆเบขเบนเปˆ (6 เบšเบดเบ”)
  • SECURE
  • เบเบงเบ”เบชเบญเบš-เบ•เบฑเป‰เบ‡
  • READ-CheckSUM: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1, เบšเปˆเบญเบ™เบ—เบตเปˆ DDDDDDDDDDDDDDDD = เบ‚เปเป‰เบกเบนเบ™เบญเบญเบ: เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบญเบธเบ›เบฐเบเบญเบ™
  • เบฅเบถเบšเบšเบฅเบฑเบญเบ

เบ•เบปเบงเบขเปˆเบฒเบ‡, vector for Initialize-2:

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

vectors เบ—เบฑเบ‡เบซเบกเบปเบ”เบกเบตเบ„เบงเบฒเบกเบเบฒเบงเบ”เบฝเบงเบเบฑเบ™: 22 bits. เป€เบญเบเบฐเบชเบฒเบ™ HSSP เบกเบตเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš ISSP: "Vector ISSP เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ™เบญเบ เป€เปœเบทเบญ เบˆเบฒเบเบฅเปเบฒเบ”เบฑเบšเป€เบฅเบฑเบเบ™เป‰เบญเบเบ—เบตเปˆเบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบŠเบธเบ”เบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ."

5.2. Demystifying vectors

เบฅเบญเบ‡เบ„เบดเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบขเบนเปˆเบ™เบตเป‰. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ vectors เบ”เบฝเบงเบเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ”เบดเบšเบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ M8C, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒ opcodes เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบšเปเปˆเบเบปเบ‡เบเบฑเบ™.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰ googled vector เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบฅเบฐเบกเบฒเปƒเบ™เบ—เบปเปˆเบง เบ™เบตเป‰ เบเบฒเบ™เบชเบถเบเบชเบฒเบ—เบตเปˆเบœเบนเป‰เบ‚เบฝเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฒเบงเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”, เปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”: "เปเบ•เปˆเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบชเบฒเบกเบšเบดเบ”เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบตเปˆ mnemonics (เบญเปˆเบฒเบ™เบˆเบฒเบ RAM, เบ‚เบฝเบ™เบซเบฒ RAM, เบญเปˆเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™, เบ‚เบฝเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบต 8 bits เบ—เบตเปˆเบขเบนเปˆ, เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบ 8 bits เบ‚เปเป‰เบกเบนเบ™ (เบญเปˆเบฒเบ™เบซเบผเบทเบ‚เบฝเบ™) เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบชเบฒเบก bits.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™ "Supervisory ROM (SROM)". เบ„เบนเปˆเบกเบทเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™. SROM เป€เบ›เบฑเบ™ ROM เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบเบฒเบเปƒเบ™ PSoC เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” (เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš Syscall) เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰:

  • 00h:SWBootReset
  • 01h: ReadBlock
  • 02h: WriteBlock
  • 03h: EraseBlock
  • 06h: TableRead
  • 07h: CheckSum
  • 08h: Calibrate0
  • 09h: Calibrate1

เป‚เบ”เบเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบŠเบทเปˆ vector เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ SROM, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ”เบเป‚เบ›เป‚เบ•เบ„เบญเบ™เบ™เบตเป‰เบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ SROM เบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰. เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบชเบฒเบกเบšเบดเบ”เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡ ISSP vectors:

  • 100 => โ€œwremโ€
  • 101 => โ€œrdmemโ€
  • 110 => โ€œเบœเบดเบ”โ€
  • 111 => โ€œrdregโ€

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ—เบดเบ‡เบŠเบดเบšเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบœเปˆเบฒเบ™เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เป‚เบ”เบเบเบปเบ‡เบเบฑเบš PSoC.

5.3. เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบเบฑเบš PSoC

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Dirk Petrautsky เป„เบ”เป‰เปเบฅเป‰เบง ported เบฅเบฐเบซเบฑเบ” HSSP เบ‚เบญเบ‡ Cypress เปƒเบ™ Arduino, เบ‚เป‰เบญเบเปƒเบŠเป‰ Arduino Uno เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ ISSP เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™เปเบ›เป‰เบ™เบžเบดเบก.

เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปƒเบ™เป„เบฅเบเบฐเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเป„เบ”เป‰เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡ Dirk เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™ GitHub: เบ—เบตเปˆเบ™เบตเป‰ เปเบฅเบฐ script Python เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบเบฑเบš Arduino, เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ cypress_psoc_tools.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Arduino, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ—เปเบฒเบญเบดเบ”เปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆ vectors "เบ—เบฒเบ‡เบเบฒเบ™" เบชเปเบฒเบฅเบฑเบš "เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™". เบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเบญเปˆเบฒเบ™ ROM เบžเบฒเบเปƒเบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ VERIFY. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰. เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบšเบดเบ”เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบžเบฒเบเปƒเบ™ flash drive.

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡ vectors เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบฝเบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒ / เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹. เบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™ SROM เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ flash drive เบˆเบฐเบ–เบทเบเบ›เป‰เบญเบ‡เบเบฑเบ™!

5.4. เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปƒเบ™เบŠเบดเบš

เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบšเบดเปˆเบ‡ vectors " disassembled ", เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบญเบธเบ›เบฐเบเบญเบ™เปƒเบŠเป‰เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™ (0xF8-0xFA) เป€เบžเบทเปˆเบญเบฅเบฐเบšเบธ opcodes M8C เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบเบปเบ‡, เบ‚เป‰เบฒเบกเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ opcodes เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™ "ADD", "MOV A, X", "PUSH" เบซเบผเบท "JMP". เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ (เป‚เบ”เบเป€เบšเบดเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™) เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ›เบปเบเบเบฐเบ•เบด (A, X, SP เปเบฅเบฐ PC).

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ” "disassembled" เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบกเบท 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 เป„เบ”เป‰เปเบฅเป‰เบง, เปเบ•เปˆเบ‚เป‰เบญเบเบเบฑเบ‡เบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡ flash drive. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เบปเบเบ•เบฐเบฅเบถเบ‡เบซเบผเบฒเบเป‚เบ”เบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ Cypress เบšเปเปˆเป„เบ”เป‰เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบญเบธเบ›เบฐเบเบญเบ™เปƒเบ”เป†เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‚เบธเบ”เป€เบฅเบดเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Google เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” HSSP เบ—เบตเปˆเปƒเบซเป‰เป‚เบ”เบ Cypress เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบ Dirk เบ›เปˆเบญเบเบ•เบปเบงเบ”เบฑเบ”เปเบเป‰เบ‚เบญเบ‡เบฅเบฒเบง. เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™! vector เปƒเบซเบกเปˆเบ™เบตเป‰เป„เบ”เป‰เบ›เบฐเบเบปเบ”เบงเปˆเบฒ:

[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

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ vector เบ™เบตเป‰ (เป€เบšเบดเปˆเบ‡ read_security_data เปƒเบ™ psoc.py), เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš bits เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ SRAM เบ—เบตเปˆ 0x80, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบชเบญเบ‡ bits เบ•เปเปˆเบ•เบฑเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบ•เบปเบเบ•เปเปˆเบฒ: เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ›เบปเบเบ›เป‰เบญเบ‡เปƒเบ™เป‚เบซเบกเบ” "เบ›เบดเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เปเบฅเบฐเบ‚เบฝเบ™เบžเบฒเบเบ™เบญเบ". เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบซเบเบฑเบ‡เบˆเบฒเบ flash drive, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบซเบเบฑเบ‡เป„เบ”เป‰ (เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ROM dumper เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™). เปเบฅเบฐเบงเบดเบ—เบตเบ”เบฝเบงเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบฅเบปเบšเบฅเป‰เบฒเบ‡เบŠเบดเบšเบ—เบฑเบ‡เบซเบกเบปเบ”. ๐Ÿ™

6. เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” (เบฅเบปเป‰เบกเป€เบซเบฅเบง): ROMX

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบก trick เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” opcodes arbitrary, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ ROMX, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบญเปˆเบฒเบ™ flash memory? เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเป‚เบญเบเบฒเบ”เบ”เบตเบ—เบตเปˆเบˆเบฐเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบŸเบฑเบ‡เบŠเบฑเบ™ ReadBlock เบ—เบตเปˆเบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ SROM (เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบ vectors) เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบˆเบฒเบ ISSP. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, ROMX opcode conceivably เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ” 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

เบ‚เปเบญเบฐเป„เบž, เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปƒเบŠเป‰เบšเปเปˆเป„เบ”เป‰. ๐Ÿ™ เบซเบผเบทเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš opcodes เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เบขเบนเปˆเบ—เบตเปˆเบœเบปเบ™เบœเบฐเบฅเบดเบ” (0x28 0x30 0x40)! เบ‚เป‰เบญเบเบšเปเปˆเบ„เบดเบ”เบงเปˆเบฒเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เปเบกเปˆเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบท trick เบ”เป‰เบฒเบ™เบงเบดเบชเบฐเบงเบฐเบเปเบฒเบซเบผเบฒเบ: เป€เบกเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ” opcodes เบžเบฒเบเบ™เบญเบ, เบฅเบปเบ”เป€เบก ROM เบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ buffer เบŠเบปเปˆเบงเบ„เบฒเบง.

7. เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡: Cold Boot Tracing

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ trick ROMX เบšเปเปˆเป„เบ”เป‰เบœเบปเบ™, เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบญเบทเปˆเบ™เบ‚เบญเบ‡ trick เบ™เบตเป‰ - เบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเปƒเบ™เบชเบดเปˆเบ‡เบžเบดเบก. "เบชเปˆเบญเบ‡เปเบชเบ‡เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป€เบŸเบตเบกเปเบงเบ‚เบญเบ‡ Microcontroller".

7.1. เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”

เป€เบญเบเบฐเบชเบฒเบ™ ISSP เบชเบฐเบซเบ™เบญเบ‡ vector เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบš 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, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ (เบšเปเปˆเปเบฎเปˆเบ•เบปเบงเป€เบ™เบตเป‰เบ‡):

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš. เบกเบฑเบ™เบ„เบดเบ”เป„เบฅเปˆ checksum 16-bit เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบšเบฅเบฑเบญเบเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบซเบ™เบถเปˆเบ‡ flash bank, เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบชเบนเบ™. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ BLOCKID เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบ•เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป€เบงเบฅเบฒเบ„เบดเบ”เป„เบฅเปˆ checksum. เบ„เปˆเบฒเบ‚เบญเบ‡ "1" เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ„เบดเบ”เป„เบฅเปˆ checksum เบชเปเบฒเบฅเบฑเบš block zero; เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ "0" เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ 256 blocks เบ‚เบญเบ‡ flash bank. checksum 16-bit เปเบกเปˆเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เบœเปˆเบฒเบ™ KEY1 เปเบฅเบฐ KEY2. เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบต KEY1 เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปˆเปเบฒ 8 เบšเบดเบ”เบ‚เบญเบ‡ checksum, เปเบฅเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต KEY2 เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบนเบ‡ 8 เบšเบดเบ”. เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบ„เบฒเบ™ flash เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™ checksum เปเบกเปˆเบ™โ€‹เป€เบญเบตเป‰เบ™โ€‹เบงเปˆเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹เปเบเบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบซเบฒเบโ€‹. เปเบฒเบเป€เบฅเบเบ—เบฐเบ™เบฒเบ„เบฒเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ FLS_PR1 (เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบดเบ”เปƒเบ™เบกเบฑเบ™เบเบปเบ‡เบเบฑเบš flash bank เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ).

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ checksum เบ‡เปˆเบฒเบเบ”เบฒเบ: bytes เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบญเบทเปˆเบ™; เบšเปเปˆเบกเบต quirks CRC fancy. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบฎเบนเป‰เบงเปˆเบฒเบซเบผเบฑเบ M8C เบกเบตเบŠเบธเบ”เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ™เป‰เบญเบเบซเบผเบฒเบ, เบ‚เป‰เบญเบเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบกเบทเปˆเบญเบ„เบดเบ”เป„เบฅเปˆ checksum, เบ„เปˆเบฒเบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบ•เบปเบงเปเบ›เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบ—เป‰เบฒเบเบˆเบฐเป„เบ›เบซเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš: KEY1 (0xF8) / KEY2 (. 0xF9).

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

  1. เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ ISSP.
  2. เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ checksum เป‚เบ”เบเปƒเบŠเป‰ vector CHECKSUM-SETUP.
  3. เบžเบงเบเป€เบฎเบปเบฒ reboot เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰ T.
  4. เบžเบงเบเป€เบฎเบปเบฒเบญเปˆเบฒเบ™ RAM เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบš checksum C เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.
  5. เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™ 3 เปเบฅเบฐ 4, เป€เบžเบตเปˆเบก T เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡.
  6. เบžเบงเบเป€เบฎเบปเบฒเบเบนเป‰เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ flash drive เป‚เบ”เบเบเบฒเบ™เบซเบฑเบเบฅเบปเบš checksum C เบเปˆเบญเบ™เปœเป‰เบฒเบˆเบฒเบเบญเบฑเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเบšเบฑเบ™เบซเบฒ: vector Initialize-1 เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบ reboot เบ‚เบฝเบ™เบ—เบฑเบš 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

เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบ‚เบฝเบ™เบ—เบฑเบš checksum เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบเบฒเบ™เป‚เบ—เบซเบฒ Calibrate1 (เบซเบ™เป‰เบฒเบ—เบตเปˆ SROM 9) ... เบšเบฒเบ‡เบ—เบตเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เป€เบฅเบ magic (เบˆเบฒเบเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡) เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเป‚เบซเบกเบ”เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเปˆเบฒเบ™ 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. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ checksum (send_checksum_v).
  3. เบฅเปเบ–เป‰เบฒเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰; เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡ pitfalls เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:
    • เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เป€เบชเบโ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบซเบผเบฒเบโ€‹เบˆเบปเบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เบซเบฑเบ™โ€‹เบญเบญเบโ€‹ เป€เบฅเบทเปˆเบญเบ™เป„เบกเป‚เบ„เบฃเบงเบดเบ™เบฒเบ—เบต เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบšเปเปˆเป€เบเบตเบ™ 16383 ฮผs;
    • เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ‚เป‰เบฒเบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบˆเบปเบ™เบเปˆเบงเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเป„เบกเป‚เบ„เบฃเบงเบดเบ™เบฒเบ—เบต, เบ–เป‰เบฒ 0 เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบกเบฑเบ™เป€เบ›เบฑเบ™เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™, เป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™!
  4. เบฃเบตเบšเบนเบ” PSoC เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเป‚เปเบ”เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฃเปเบเบฃเบก (เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เป€เบฅเบ magic, เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡ vectors เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™).

เบฅเบฐเบซเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™ 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))

เป‚เบ”เบเบซเบเปเป‰, เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เป€เบฎเบฑเบ”เบซเบเบฑเบ‡:

  1. เบฃเบตเบšเบนเบ” PSoC (เปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป€เบฅเบ magic).
  2. เบชเบปเปˆเบ‡ vector เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ•เบฑเบก.
  3. เป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™ Arduino Cmnd_STK_START_CSUM (0x85), เบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเปƒเบ™ microseconds เบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต.
  4. เบญเปˆเบฒเบ™ checksum (0xF8 เปเบฅเบฐ 0xF9) เปเบฅเบฐ undocumented register 0xF1.

เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ” 10 เป€เบ—เบทเปˆเบญเปƒเบ™ 1 microsecond. 0xF1 เปเบกเปˆเบ™เบฅเบงเบกเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ”เบฝเบงเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป€เบงเบฅเบฒเบ„เบดเบ”เป„เบฅเปˆ checksum. เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบŠเบปเปˆเบงเบ„เบฒเบงเบšเบฒเบ‡เบŠเบฐเบ™เบดเบ”เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบเบซเบปเบงเปœเปˆเบงเบเป€เบซเบ”เบœเบปเบ™เป€เบฅเบเบ„เบฐเบ™เบดเบ”. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™ hack เบ—เบตเปˆเบซเบ™เป‰เบฒเบเบฝเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฑเบš 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

เบ—เบตเปˆเบ–เบทเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบšเบฑเบ™เบซเบฒ: เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบฑเบš checksum เบ•เบปเบงเบˆเบดเบ‡, a null byte เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบญเปˆเบฒเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบฑเบ‡เบซเบกเบปเบ” (8192 bytes) เปƒเบŠเป‰เป€เบงเบฅเบฒ 0,1478 เบงเบดเบ™เบฒเบ—เบต (เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบกเบฑเบ™เปเบฅเปˆเบ™), เป€เบŠเบดเปˆเบ‡เป€เบ—เบปเปˆเบฒเบเบฑเบšเบ›เบฐเบกเบฒเบ™ 18,04 ฮผsเบ•เปเปˆ byte, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบกเบนเบ™เบ„เปˆเบฒ checksum เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเปˆเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบญเปˆเบฒเบ™เป„เบ”เป‰เบ‡เปˆเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเปเบกเปˆเบ™เป€เบเบทเบญเบšเบ„เบทเบเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบซเบ™เป‰เบญเบเป€เบžเบฒเบฐเบงเปˆเบฒ "เบเบฒเบ™เบšเบดเบ”เป€เบšเบทเบญเบ™เป€เบงเบฅเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ" เปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™:

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 dumps เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ microsecond เบ—เบธเบเป†. เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบดเป‰เบกเบ—เบฑเบ‡เบซเบกเบปเบ” 8192 bytes เบ‚เบญเบ‡ flash drive เปเบกเปˆเบ™เบ›เบฐเบกเบฒเบ™ 48 เบŠเบปเปˆเบงเป‚เบกเบ‡.

7.3. Flash เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเบ–เบฒเบ™เบชเบญเบ‡

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡ flash drive เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡ deviations เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบŸเบทเป‰เบ™เบŸเบนเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปเบฅเป‰เบง. เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบ‚เป‰เบญเบเป„เบ”เป‰เบ–เบญเบ”เบกเบฑเบ™เบญเบญเบเป‚เบ”เบเปƒเบŠเป‰ 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

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™ checksum เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ:

  • เปƒเบชเปˆเบฅเบฐเบซเบฑเบ” PIN เบœเบดเบ”;
  • เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ” PIN.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบ—เบตเปˆเบขเบนเปˆเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป‚เบ”เบเบ›เบฐเบกเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบญเบปเบฒ checksum dump เปƒเบ™ 10 ms เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบ reboot. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบชเปˆเบฅเบฐเบซเบฑเบ” PIN เบœเบดเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบชเบธเบเบซเบผเบฒเบ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบ. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒ checksum เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ 120000 ยตs เปเบฅเบฐ 140000 ยตs เบ‚เบญเบ‡เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ. เปเบ•เปˆ "pincode" เบ—เบตเปˆเบ‚เป‰เบญเบเบชเบฐเปเบ”เบ‡เบขเบนเปˆเบ™เบฑเป‰เบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™ - เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบญเบกเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒMicrosconds, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เป€เบกเบทเปˆเบญ 0 เบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบกเบฑเบ™.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบเบทเบญเบš 3 เบŠเบปเปˆเบงเป‚เบกเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒเบฅเบฐเบšเบปเบš SROM เป‚เบ—เบซเบฒ CheckSum เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบ›เบฑเบ™เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเบˆเปเบฒเบ™เบงเบ™เบ•เบฑเบ™เบชเปเบฒเบฅเบฑเบš checksum! เบ™เบฑเป‰เบ™. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบขเปˆเบฒเบ‡โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ” PIN เปเบฅเบฐ "เบเบฒเบ™โ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹" counter, เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹เบชเบนเบ‡โ€‹เป€เบ–เบดเบ‡ 64-byte block.

เบเบฒเบ™เปเบฅเปˆเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบœเบปเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ Cypress PSoC

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ” PIN เบˆเบฒเบ "123456" เป€เบ›เบฑเบ™ "1234567" เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบš:

เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ Cypress PSoC

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ” PIN เปเบฅเบฐเบ•เบปเบงเบ•เป‰เบฒเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบšเบฅเบฑเบญเบ 126.

7.5. เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ•เบฑเบ™ เป€เบฅเบเบ—เบต 126

เบ•เบฑเบ™ #126 เบ„เบงเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡เบ›เบฐเบกเบฒเบ™ 125x64x18 = 144000ฮผs, เบˆเบฒเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ checksum, เปƒเบ™ dump เป€เบ•เบฑเบกเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เปเบฅเบฐเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบญเบปเบฒเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบญเบญเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบฐเบชเบปเบกเบ‚เบญเบ‡ "เบเบฒเบ™เบšเบดเบ”เป€เบšเบทเบญเบ™เป€เบงเบฅเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ"), เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš bytes เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ (เปƒเบ™ latency เบ‚เบญเบ‡ 145527 ฮผs):

เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ Cypress PSoC

เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” PIN เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”! เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เบฅเบฐเบซเบฑเบ” ASCII, เปเบ•เปˆเบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบ›เบฒเบเบปเบ”, เบžเบงเบเบกเบฑเบ™เบชเบฐเบ—เป‰เบญเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเปเบ›เป‰เบ™เบžเบดเบก capacitive.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบšเปˆเบญเบ™เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เบ™เบฑเบšเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบšเปเปˆเบ”เบตเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš:

เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เปเบฅเบฐเบเบฒเบ™ hack Aigo เบ•เบปเบ™เป€เบญเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” HDD drive เบžเบฒเบเบ™เบญเบ. เบชเปˆเบงเบ™เบ—เบต 2: เบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบ 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

เป‚เบซเป‰เบ! เป€เบฎเบฑเบ”เบงเบฝเบ!

เบเบฐเบฅเบธเบ™เบฒเบฎเบฑเบšเบŠเบฒเบšเบงเปˆเบฒเบ„เปˆเบฒ latency เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เปเบกเปˆเบ™เบญเบฒเบ”เบˆเบฐเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบš PSoC เบชเบฐเป€เบžเบฒเบฐเบญเบฑเบ™เบ”เบฝเบง - เบญเบฑเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰.

8. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เบชเบฐเบซเบผเบธเบšเบเปˆเบฝเบงเบเบฑเบšเบ”เป‰เบฒเบ™ PSoC, เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เป„เบ” Aigo เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

  • เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™ SRAM เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบญเปˆเบฒเบ™เบ–เบทเบเบ›เบปเบเบ›เป‰เบญเบ‡;
  • เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบซเบผเบตเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบ›เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹เบ•เป‰เบฒเบ™ swipe เป„เบ”เป‰โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เป‚เบˆเบกโ€‹เบ•เบตโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เป€เบเบตเบšโ€‹เป€เบขเบฑเบ™โ€‹เปเบฅเบฐโ€‹เป‚เบ”เบโ€‹เบเบปเบ‡โ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบฅเบฐโ€‹เบซเบฑเบ” PINโ€‹.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเบฑเบ™เบซเบฒเบเบฒเบ™ synchronization. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ‚เบฝเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบทเปˆเบญเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบกเบนเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เป‚เบˆเบกเบ•เบต "เบ•เบดเบ”เบ•เบฒเบกเป€เบเบตเบšเป€เบขเบฑเบ™";
  • เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท FPGA เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเป€เบงเบฅเบฒเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒ (เบซเบผเบทเปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบšเป€เบงเบฅเบฒเบฎเบฒเบ”เปเบง Arduino);
  • เบžเบฐเบเบฒเบเบฒเบกเป‚เบˆเบกเบ•เบตเบญเบทเปˆเบ™: เปƒเบชเปˆเบฅเบฐเบซเบฑเบ” PIN เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป‚เบ”เบเป€เบˆเบ”เบ•เบฐเบ™เบฒ, เบ›เบดเบ”เป€เบ›เบตเบ”เปƒเบซเบกเปˆเปเบฅเบฐ dump RAM, เบซเบงเบฑเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” PIN เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™ RAM เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบ™ Arduino, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบฅเบฐเบ”เบฑเบšเบชเบฑเบ™เบเบฒเบ™ Arduino เปเบกเปˆเบ™ 5 volts, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เบฐเบ™เบฐเบเปเบฒเบกเบฐเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบเบงเบ”เบชเบญเบšเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบฑเบ™เบเบฒเบ™ 3,3 volt.

เบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบกเป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบซเบผเบตเป‰เบ™เบเบฑเบšเบฅเบฐเบ”เบฑเบšเปเบฎเบ‡เบ”เบฑเบ™เป€เบžเบทเปˆเบญเบ‚เป‰เบฒเบกเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบญเปˆเบฒเบ™. เบ–เป‰เบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบˆเบฒเบ flash drive - เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบญเปˆเบฒเบ™ checksum เบ—เบตเปˆเบกเบตเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ SROM เบญเบฒเบ”เบˆเบฐเบญเปˆเบฒเบ™ bits guards เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš ReadBlock, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš. เบญเบฐเบ—เบดเบšเบฒเบ เปƒเบ™ blog เบ‚เบญเบ‡ Dmitry Nedospasov - เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ‚เบญเบ‡ Chris Gerlinski, เป„เบ”เป‰เบ›เบฐเบเบฒเบ”เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบก. "REcon Brussels 2017".

เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเปˆเบงเบ™เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ„เบทเบเบฒเบ™เบ‚เบนเบ”เบเปเบฅเบฐเบ™เบตเบญเบญเบเบˆเบฒเบเบŠเบดเบš: เป€เบญเบปเบฒ SRAM dump, เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบˆเบธเบ”เบญเปˆเบญเบ™.

9 เบชเบฐเบซเบผเบธเบš

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป„เบ”เบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เปƒเบŠเป‰ microcontroller เบ›เบปเบเบเบฐเบ•เบด (เบšเปเปˆ "เปเบ‚เบ‡") เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ” PIN ... เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เป€เบšเบดเปˆเบ‡ (เป€เบ—เบทเปˆเบญ) เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ™เบตเป‰!

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบ™เบฐเบ™เปเบฒเบซเบเบฑเบ‡เบชเปเบฒเบฅเบฑเบš Aigo? เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹เบชเบญเบ‡โ€‹เบชเบฒเบกโ€‹เปเบšเบšโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบฅเบฐโ€‹เบซเบฑเบ” HDD drivesโ€‹, เปƒเบ™โ€‹เบ›เบต 2015 เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹ เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต เปƒเบ™ SyScan, เป€เบŠเบดเปˆเบ‡เบฅเบฒเบงเป„เบ”เป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡เป„เบ” HDD เบžเบฒเบเบ™เบญเบเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ›เบธเบ‡เป„เบ”เป‰. ๐Ÿ™‚

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบ—เป‰เบฒเบเบญเบฒเบ—เบดเบ”เปเบฅเบฐเบซเบผเบฒเบเป†เบ•เบญเบ™เปเบฅเบ‡เป€เบฎเบฑเบ”เบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบ™เบตเป‰. เบ—เบฑเบ‡เปเบปเบ”เบ›เบฐเบกเบฒเบ™ 40 เบŠเบปเปˆเบงเป‚เบกเบ‡. เบ™เบฑเบšเบˆเบฒเบเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเป€เบ›เบตเบ”เปเบœเปˆเบ™) เบˆเบปเบ™เป€เบ–เบดเบ‡เบ—เบตเปˆเบชเบธเบ” (เบเบฒเบ™เบ–เบดเป‰เบกเบฅเบฐเบซเบฑเบ” PIN). เบ”เบฝเบงเบเบฑเบ™ 40 เบŠเบปเปˆเบงเป‚เบกเบ‡เบ›เบฐเบเบญเบšเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เป€เบงเบฅเบฒเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบ”เบตเบ™เบ—เบฒเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบ•เบทเปˆเบ™เป€เบ•เบฑเป‰เบ™เบซเบผเบฒเบ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™