ืืื ืืืืง ืืฉื ื ืืืืืจืื ืฉื ืืืืืจ ืขื ืคืจืืฆืช ืืื ื ืื ืืืฆืื ืืื ืืืฆืคื ื ืขืฆืืืช. ืืจืฉื ืื ืืืืืืจ ืืื ืฉืขืืืช ืืืื ืื ืืืืจืื ื ืืื ื ืงืฉืื ืฉื Patriot (Aigo) SK8671, ืืืืืืชื ืืืคืื ืืืชื, ืืขืืฉืื ืื ื ืืฉืชืฃ ืืช ืื ืฉืืฆื ืืื ื. ืืคื ื ืงืจืืื ื ืืกืคืช, ืืงืคื ืืงืจืื
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 (ืคืจืืืืงืื ืชืื ืืช ืืืจื ืืชืื ืืืขืจืืช), ืืืชืืืจ ืืืืงื ื-
- ืืชืืื 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, ืื ืืืืจ ืืืืงืช ืืืฉืขืจื ืืื, ืืืืืชื ืฉืืืืคืงืืืื ืฉื ืืคืขืืืืช ืื ืชืืื.
ืืืจ ืื ืืืคืฉืชื ืืืืื ืืช ืืืืงืืืจ ืืืขืื ืื ืชืงืืชื
ืืืจ ืื ืืฆืืืชื ืืืงื ืืืืข ืฉืืืืฉื ืืืื ืืงืืข ื-Supervisory ROM (SROM).
- 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
ืืื ืืืจืง ืคืืจืืืืกืงื ืืืจ
ืฉืืื ืื ืฉืืืืื ืืืืงืจ ืฉืื ืฉืื ืืชื ืื ืืขื ืืช ืืงืื ืฉื ืืืจืง. ืืชื ืืืื ืืืฆืื ืืช ืืฉืื ืื ืฉืื ื-GitHub:
ืื, ืืืืฆืขืืช 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).
ืื ืืชืืืืจืื ืืืชืงืคื ืฉืื ื ืจืืืช ืื:
- ืื ื ืืชืืืจืื ืืืืฆืขืืช 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; - ืืื ืฉืื ืืจื ืืช ืืืชื ืืืืช ืืื ืขื ืฉืืืืืชื ืฉื-delayMicroseconds, ืื 0 ืืืขืืจ ืืืื ืืงืื, ืขืืื ืืืืจื ืื ื ืืื!
- ืืืืืชื ืืจืื ืืื ืขื ืฉืืืืืชื ืื ืืฆื
- ืืคืขื ืืืืฉ ืืช ื-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))
ืืงืฆืจื, ืื ืืงืื ืืื ืขืืฉื:
- ืืืชืื ืืช ื-PSoC (ืืฉืืื ืื ืืกืคืจ ืงืกื).
- ืฉืืื ืืงืืืจืื ืืชืืื ืืื.
- ืงืืจื ืืคืื ืงืฆืื Arduino Cmnd_STK_START_CSUM (0x85), ืืืฉืจ ืืืฉืืื ืืืืงืจื-ืฉื ืืืช ืืืขืืจืช ืืคืจืืืจ.
- ืงืืจื ืืช ืกืืื ืืืืืงื (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 ืืชืื ืืืืง.
ืืจืืฆืืช ืืจืืฉืื ืืืช ืฉืื ืื ืืื ืืช ืืชืืฆืื ืืืื:
ืืืืจ ืืื ืฉืื ืืชื ืืช ืงืื ื-PIN ื-"123456" ื-"1234567" ืืงืืืืชื:
ืืคืืื, ื ืจืื ืฉืงืื ื-PIN ืืืืื ื ืฉื ื ืืกืืื ืืช ืฉืืืืื ืืืืืกื ืื ืืืืืง ืืก' 126.
7.5. ืืงืืืช ืืืืื ืฉื ืืืืง ืืก' 126
ืืืืง ืืก' 126 ืืืืจ ืืืืืช ืืืืงื ืืืคืฉืื ืืกืืืืืช 125x64x18 = 144000ฮผs, ืืชืืืืช ืืืฉืื ืกืืื ืืืืืงื, ื-dump ืืืื ืฉืื, ืืื ื ืจืื ืื ืกืืืจ. ืืืืจ ืืื, ืืืืจ ืกืื ืื ืืื ื ืฉื ืืฉืืืืช ืื ืืืงืืืช ืจืืืช (ืขืงื ืืฆืืืจืืช ืฉื "ืกืืืืช ืชืืืื ืงืืืช"), ืืกืืคื ืฉื ืืืจ ืงืืืืชื ืืช ืืืชืื ืืืื (ืืืฉืืื ืฉื 145527 ืืืงืจืื):
ืื ืื ืืจืืจ ืฉืงืื ื-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
ืืืื! ืขืืื!
ืฉืื ืื ืฉืขืจืื ืืืฉืืื ืฉืืื ืืฉืชืืฉืชื ืื ืจืื ืจืืืื ืืืื ื-PSoC ืกืคืฆืืคื ืืื - ืื ืฉืืฉืชืืฉืชื ืื.
8. ืื ืืืื?
ืื ืืืื ื ืกืื ืืช ืืฆื ืฉื ื-PSoC, ืืืงืฉืจ ืฉื ืืื ื Aigo ืฉืื ื:
- ืื ื ืืืืืื ืืงืจืื SRAM ืื ืื ืืื ืืืื ืงืจืืื;
- ืื ื ืืืืืื ืืขืงืืฃ ืืช ืืืื ื ื ืื ืืืืงื ืขื ืืื ืฉืืืืฉ ืืืชืงืคืช ืืขืงื ืฉื ืืชืืื ืงืจ ืืงืจืืื ืืฉืืจื ืฉื ืงืื ื-PIN.
ืขื ืืืช, ืืืชืงืคื ืฉืื ื ืืฉ ืืื ืคืืืื ืขืงื ืืขืืืช ืกื ืืจืื. ื ืืชื ืืฉืคืจ ืืืช ืืืืคื ืืื:
- ืืืชืื ืืื ืขืืจ ืืคืขื ืื ื ืืื ืฉื ื ืชืื ื ืืคืื ืืืชืงืืืื ืืชืืฆืื ืืืชืงืคืช "ืขืงืืืช ืืชืืื ืงืจ";
- ืืฉืชืืฉ ืืืืื'ื FPGA ืืื ืืืฆืืจ ืขืืืืื ืืื ืืืืืงืื ืืืชืจ (ืื ืืฉืชืืฉ ืืืืืืจืื ืฉื ืืืืจื ืฉื Arduino);
- ื ืกื ืืชืงืคื ื ืืกืคืช: ืืื ืงืื PIN ืฉืืื ืืืืื ื, ืืคืขื ืืืืฉ ืืืืจื ืืช RAM, ืืชืงืืื ืฉืงืื ื-PIN ืื ืืื ืืืฉืืจ ื-RAM ืืฆืืจื ืืฉืืืื. ืขื ืืืช, ืื ืื ืื ืื ืงื ืืขืฉืืช ื- Arduino, ืืืืืื ืฉืจืืช ืืืืช ืฉื Arduino ืืื 5 ืืืื, ืืขืื ืฉืืืื ืฉืื ื ืืืื ืื ืขืืื ืขื ืืืชืืช 3,3 ืืืื.
ืืืจ ืืขื ืืื ืืื ืฉืืคืฉืจ ืื ืกืืช ืืื ืืฉืืง ืขื ืจืืช ืืืชื ืืื ืืขืงืืฃ ืืช ืืื ืช ืืงืจืืื. ืื ืืืฉื ืื ืืืืชื ืขืืืืช, ื ืืื ืืงืื ื ืชืื ืื ืืืืืงืื ืืืืืืื ืืืื ื ืืืืง - ืืืงืื ืืืกืชืื ืขื ืงืจืืืช ืกืืื ืืืืงื ืขื ืขืืืืืื ืืชืืืื ืื ืืืืืงืื.
ืืืืืื ืฉื-SROM ืื ืจืื ืงืืจื ืืช ืกืืืืืช ืืฉืืืจื ืืืืฆืขืืช ืงืจืืืช ืืขืจืืช ReadBlock, ื ืืื ืืขืฉืืช ืืช ืืืชื ืืืืจ ืืื
ืขืื ืืืจ ืืื ื ืฉืืคืฉืจ ืืขืฉืืช ืืื ืืืืื ืืช ืืืืจื ืืืฉืื: ืืงืืช dump SRAM, ืืืืืช ืงืจืืืืช ืืขืจืืช ืื ืืชืืขืืืช ืืคืืืขืืืืช.
9. ืืกืงื ื
ืื, ืืืื ื ืฉื ืืืื ื ืืื ืืฉืืืจื ืืจืื ืื ืืจืฆืืช, ืืืืืื ืฉืืื ืืฉืชืืฉ ืืืืงืจื-ืืงืจ ืจืืื (ืื "ืืืงืฉื") ืืื ืืืืกื ืืช ืงืื ื-PIN... ืื ืืกืฃ, ืื ืืืงืชื (ืขืืืื) ืืื ืืืืจืื ืืืืืื ืขื ื ืชืื ืื ืืฆืคื ื ืืืืฉืืจ ืื!
ืื ืืชื ืืืื ืืืืืืฅ โโืขื ืืืืื? ืืืืจ ืฉื ืืชื ืืื ืืืืื ืฉื ืืื ื ื HDD ืืืฆืคื ืื, ืืฉื ืช 2015 ืืฆืจืชื
ืืืืืชื ืฉื ื ืกืืคื ืฉืืืข ืืืกืคืจ ืขืจืืื ืืืืงืจ ืืื. ืกื ืืื ื-40 ืฉืขืืช. ืกืืคืจืื ืืืืชืืื (ืืฉืคืชืืชื ืืช ืืืืกืง) ืืขื ืืกืืฃ (ืืืืืช ืงืื PIN). ืืืชื 40 ืฉืขืืช ืืืืืืช ืืช ืืืื ืฉืืืืืชื ืืืชืืืช ืืืืจ ืื. ืื ืืื ืืืื ืืืื ืืจืืฉ.
ืืงืืจ: www.habr.com