αααααΊααΆαααααααΈ 8671 αα·αα
α»ααααααααα’αααααα’αααΈααΆααα½α
ααααααΆααααα’αα·αααααΈαααααααα½αα―αααΆααααα
α αααα»αααΌαααααΉαα’αααααΆ ααΆαααΈαααααααΈαααα αα αααα·αααααΆααααΆαααΆα Hard Drive αααΆα Patriot (Aigo) SKXNUMX αααααα»α α αΎααααα»αααΆααααααα
α
α·ααααααα
αααΆαααΆ α αΎαα₯α‘αΌαααααααα»ααααα»αα
αααααααα’αααΈαααα
ααααΈααΆα αα»αααΉαα’αΆααααα ααααΌαααααΆααααΆα’αΆα
4. ααΎαα αΆααααααΎαα αΆααααααΆαα ααααΈααααΆααααααααΊ PSoC ααΆααααα»α
ααΌα αααα α’αααΈβαααααβαααΆαβαααα αΆαβααΆ (ααΌα βαααβααΎαβααΆαβαααααΎαβαα βαααα»α [αααααβααααΌα]()) ααΆβααΌα PIN ααααΌαβααΆαβαααααΆβαα»αβαααα»αβααααα βαααααΊβαα PSoCα ααΌα αααα ααΎαβααααΌαβα’αΆαβααααα βαααααΊβααΆαααααα αααααααΆααα»αααααΆαααΆαα αΆαααΆα αα
- ααααααααα "ααΆαααααΆαααααα" ααΆαα½α microcontroller;
- ααααααααα·ααΈααΎααααΈαα·αα·αααααΎαααΆααΎ "ααΆαααααΆαααααα" αααααααΌαααΆαααΆαααΆαααΈααΆαα’αΆαααΈααΆααααα α¬α’ααα
- αααα·ααΈααΎααααΈααααααΆαααΆαααΆαα
ααΆαααααααααΈααααααΆααα ααα»αααααα»αααΆαααααααααααααΌα PIN αααααΆααα»ααααΆαα
- α’αααα αα αΆααααααΊααΆααααα»α;
- 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
ααΌααααααα·ααΈα α»ααααααα
ααΌα Arduino αααααΆαα HSSP ;αααααα·ααΈαααααΆ Python αα·α ISSP disassembler .
5. αα·ααΈααΆα ISSP
α₯.α‘. ααΎα’αααΈαα ααΆ ISSP
"ααΆαααααΆαααααααΆαααα" ααΆαα½α microcontroller α’αΆα ααΆαααααα»αααααΆα ααΈ "α’αααααααα α’αααααα" αααα’αααααααααααααααΎαα·ααΈααΆαααααα (α§ααΆα ααα ICSP αααααΆαα Microchip's PIC)α
Cypress ααΆααα·ααΈααΆααααααα·αααα·ααααΆαααααα½ααααααΆααααΏαααα αααα α
ααΆ ISSP (αα·ααΈααΆαααααααααααα·ααΈααααααααα»ααααααααα) αααααααΌαααΆααα·αααααΆαααααααααα
αααα»α
- α αΆααααααΎα PSoC α‘αΎααα·α;
- αααα αααααααααααααα ααααααααΆαααα·ααααααααααααα PSoC ααα; ααΎααααΈα αΌααα αααα»αααααααααααααααα·ααΈααΆααααα ;
- ααααΎααΆααααααααΆαααααΆααααα’αααααααα α ααΆ "ααα·α ααα" α
α―αααΆα ISSP αααααααα·α αααααΆααααααααααΆααααααΆααααααααΆαα½αα ααα½αααΌα ααα»αααααα
- α αΆααααααΎα - α‘
- α αΆααααααΎα - α‘
- Initialize-3 (αααααΎα 3V αα·α 5V)
- ID-SETUP
- α’αΆα-ID-WORD
- SET-BLOCK-NUM: 10011111010ddddddddd111 ααα dddddddd=block #
- αα»αα αααΎα
- αααααα·ααΈ-αααα»α
- αααααααααΆαα-αααα α
- α’αΆα-BYTE: 10110aaaaaaZDDDDDDDDZ1 ααα DDDDDDDD = αα·ααααααα αα aaaaaa = α’αΆααααααΆα (6 αααΈα)
- WRITE-BYTE: 10010aaaaaaadddddddd111, ααα ddddddddd = αα·αααααααα αααα»α, aaaaaa = α’αΆααααααΆα (6 αααΈα)
- αα»ααααα·ααΆα
- αα·αα·ααα-αααα α
- READ-CheckSUM: 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1 ααα DDDDDDDDDDDDDDDD = αα·ααααααα ααα ααΆααα·αα·αααα§ααααα
- αα»ααααα»α
α§ααΆα ααα ααα·α ααααααααΆαα Initialize-2α
1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111
ααα·α αααααΆααα’ααααΆαααααααααΌα ααααΆα 22 αααΈαα α―αααΆα HSSP ααΆαααααααΆααααααααα½αα ααα½ααα ααΎ ISSPα "ααα·α ααα ISSP ααααΆαα’αααΈααΎαααΈααααΆααααααα·α αααααααΆαα±αααααα»αααααΆαααααΆαα"
α₯.α’. Demystifying Vectors
α αΌαααΎαααααααααααΆααΎααΆαα’αααΈααΎαα‘αΎααα ααΈαααα ααααΌα αααα»αααΆαααααααααΆααα·α αααααΌα ααααΆααΆαααααααΊααΆααααααΎαααααΆαααααΆα M8C ααα»αααααααααΆααααΈαα·αα·αααααΎααααααα·ααααααα αααα»αααΆαααααΎαααΆ opcodes ααααααα·ααααα·ααΆααα·αααααΌαααααΆααα
αααααΆαααααααα»αααΆα google ααα·α
αααααΆαααΎ α αΎαααΆαααααααΆαα
αααααΆαααααααα»αα’αΆα
αααααΌαααααααΆαααΆααααααααααα½αα
ααα½αααΈααααα Supervisory ROM (SROM)α
- 00h: SWBootReset
- 01h: ReadBlock
- α α’ ααααα WriteBlock
- α α£ ααααα αα»ααααα»α
- αααα 06: TableRead
- αααα 07: CheckSum
- αααα α α¨α αααα·αααΆαααααΆα α
- αααα α α¨α αααα·αααΆαααααΆα α
αααααΆααααααααααααααααα·α ααααα ααΉααα»αααΆα SROM ααΎαα’αΆα ααΌααααααΈααααα·ααααα·ααΆααααααααααααΆααααααααα·ααΈααΆαααααα ααΉααααΆαααΆαααααα SROM αααααααΉααα»αα ααΌαα’ααα»ααααα ααα»α ααα ααΎαα’αΆα αα·ααΌαααα·α ααα ISSP ααΈαααΈαααααΌαααΆαα
- 100 => "wrem"
- 101 => "rdmem"
- 110 => "αα»α"
- 111 => "rdreg"
αααααΆαααΆαααΆααααα ααΆααααααΉαααααααα’αααΈααααΎαααΆααα ααΎαααααααΈαα’αΆα ααα½αααΆαααΆααααααΆαααααΆαααααααααααααΆααααΆαα½α PSoC ααα»αααααα
α₯.α£. ααααΆααααααααΆαα½α PSoC
α
αΆααααΆααααΈ Dirk Petrautsky ααΆααα½α
α αΎα
ααΌαα
αααΆαααΆαα
αααα»ααααααα·ααααΆααααΆαααααΆαααααΆααααααααα»α αααα»αααΆαααααΆααααααΌααααααΌααααα Dirk ααααα·α
α α’αααα’αΆα
αααααααααΆααααααααααααααα»ααα
ααΎ GitHubα
ααΌα αααααααααααΎ Arduino ααααΌααααα»αααααΎααααα·α ααα "ααααΌαααΆα" αααααΆαα "ααααΆαααααα" α αααα»αααΆαααααΆααΆαα’αΆα ROM ααΆααααα»ααααααααΎααΆααααααααΆ VERIFY α ααΆαβααΆαβααααΉαβαα»α αααα»αβαα·αβα’αΆα βααααΎβααΆαβααα αααα ααααΆαααααΆαααααΆααα·ααααααΆααΆαα’αΆααααΈαααΆαααΆαααααΌαααΆαααααΎα±ααααααααα ααΆααααα»αααααΆααααααααΊα
αααααΆααβααβαααα»αβααΆαβαααααΎαβααα·α αααβααΆααααβαα½αβα ααα½αβααααβαααα»αβαααααΆααβααΆαβααααα αα·αβααΆαβα’αΆα memory/registerα ααΌαα αααΆαααΆααΎαα’αΆα α’αΆα SROM ααΆααααΌααααααΈααΆ flash drive ααααΌαααΆαααΆαααΆαααααα!
α₯.α€. ααΆααααααα’ααααααααΆαααααΆαα α»αααααααα ααΎαααααααΈα
αααααΆααααΈααΎαααα·α ααα "αα»αααΎ" αααα»αααΆαααααΎαααΆα§ααααααααααααΎααΆαα α»αααααααααααααΆαα―αααΆα (0xF8-0xFA) ααΎααααΈαααααΆααααΌα M8C αααααααΌαααΆαααααα·ααααα·αααααααΆαααααααααααΆααααΆαααΆαααΆαα ααΆα’αα»ααααΆαα±αααααα»αααααΎαααΆα opcode ααααααααΌα ααΆ "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 # ΠΠ΅Π΄ΠΎΠΊΡΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ: Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΎΠΏΠΊΠΎΠ΄
α₯.α₯. αααΈααα»ααααα·ααΆα
αα ααααΆααααΆαααααααα»αα’αΆα ααΆααααααΆαα½α PSoC αα½α α αΎα ααα»αααααααα»ααα αααα·αααΆαααααααΆααααα’αΆα αα»αα α·αααααΆαα’αααΈαααΈααα»ααααα·ααΆααα flash drive ααα αααα»αααΆαααΆαααααΆααααα’αΎααααΆαααααΆαααααααΆααα·ααααααΆ Cypress αα·ααααααα±ααα’αααααααΎααααΆααααΌααααααααΆαααΆαα½αααΎααααΈαα·αα·αααααΎαααΆααΎααΆαααΆαααΆαααααΌαααΆαααααΎα±αααααααα αααα»αααΆαααΈααααα αα αααα»α Google ααΎααααΈαααααΆαααααΌα HSSP ααααααααααα Cypress ααααΌαααΆαααααΎαα αα α»ααααααααΆααααααΆααααΈ Dirk ααΆαα ααααααΆαααΆαααααααααααααΆααα α αΎαβααΌα αααα! ααα·α αααααααΈαααααΆααααα αΆααααα½αα
[DE E0 1C] wrreg CPU_F (f7), 0x00
[DE C0 1C] wrreg SP (f6), 0x00
[9F 07 5C] wrmem KEY1, 0x3A
[9F 20 7C] wrmem KEY2, 0x03
[9F A0 1C] wrmem 0xFD, 0x00 # Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
[9F E0 1C] wrmem 0xFF, 0x00 # Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ
[DE A0 1C] wrreg PCh (f5), 0x00
[DE 80 7C] wrreg PCl (f4), 0x03
[9F 70 1C] wrmem POINTER, 0x80
[DF 26 1C] wrreg opc1 (f9), 0x30
[DF 48 1C] wrreg opc2 (fa), 0x40
[DE 02 1C] wrreg A (f0), 0x10 # Π½Π΅Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ syscall !
[DF 00 1C] wrreg opc0 (f8), 0x00
[DF E2 5C] wrreg CPU_SCR0 (ff), 0x12
αααααααΎααα·α αααααα (ααΌαααΎα read_security_data αααα»α psoc.py) ααΎαααα½αααΆααααΈααα»ααααα·ααΆαααΆααα’αααα αααα»α SRAM αα 0x80 αααααΆαααΈααααΈααααα»ααα½ααααα»ααααααΆαααΆαααΆαα
ααααααααΊααααΆααααΉαα α·ααα: α’αααΈααααααααΆαααααΌαααΆαααΆαααΆααα αααα»ααααα "αα·αααΆαα’αΆααα·αααΆααααααααΆααααα " α ααΌα ααααα αΎα ααΎααα·αααααΉααααα·αα’αΆα α’αΆαα’αααΈααΈ flash drive ααα»ααααααα ααα»ααααααΎααααα·αα’αΆα αααααα’αααΈααΆαααα (α§ααΆα ααα ααΎααααΈααα‘αΎα ROM dumper αα ααΈααα)α α αΎααααααααΆααααα½ααααααΎααααΈαα·αααΆαααΆαααΆαααΊααααΌααα»ααααααααΈαααΆααααΌαααΆαααααα»αα π
6. ααΆαααΆααααα αΆαααααΌα (αααΆααα)α ROMX
ααααααΆαααΆααααα ααΎαα’αΆα ααΆαααααααααΎαααα·α ααΌα ααΆαααααααααα αααααΆαααΎαααΆααααααααΆααααα»αααΆαααααα·ααααα·ααΌαααΆαα’αααΎα α·ααα α ααα»α’αααΈαα·αααααα·ααααα· ROMX αααααααΎαααααΆααα’αΆαα’αααα αα αΆααααααΊ? αα·ααΈααΆααααααααααΆαα±ααΆαααααααααα’α αααααΆααααα»αααΆα ReadBlock αααα’αΆααα·ααααααααΈ SROM (αααααααΌαααΆαααααΎαααααα·α ααα) αα·αα·αααααΎαααΆααΎααΆααααΌαααΆαα α ααΈ ISSP αααα¬ααα αααααΆαααΆαααΆααααα ROMX opcode αααα’αΆα αααααααΆααααα ααααΆαα·αααΆαααΆααααα½ααα·αα·αααααααααααα ααΌα αααααααααΊααΆααΌα 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. ααΆαααΆααααα αΆαααΎαααΈ XNUMX: Cold Boot Tracing
αααααΆααααα·α
ROMX αα·αααααΎαααΆα αααα»αα
αΆααααααΎααα·αα’αααΈααΆααααααααα½ααα½ααααααααααααααα·α
ααα - αα·αααααΆαα
αααα»αααΆαααααα»αααααααΆα
α€.α‘.α‘. ααΆαα’αα»αααα
α―αααΆα 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" ααΉαααααΆαα checksum αααααΆαααααα»αααΌαααααα»αααααα α ααααα― "0" ααΉαααααΎα±ααααΌααααααΆααααααααα»ααα 256 αααα»ααααααΆααΆααααααΊααααΌαααΆαααααΆα ααΌααααααΆαααααα 16 αααΈαααααΌαααΆααααααΌααααα·αααΆαααα KEY1 αα·α KEY2 α αααΆαααΆαααααα KEY1 αααααΆαα»αααααΆααααΆα 8 αααΈααα checksum α αΎααααΆαααΆαααααα KEY2 αααααΆαα»αααααΆααααααα 8 αααΈαα αααααΆααα§ααααααααααΆα flash banks ααΆα αααΎα αα»αααΆα checksum ααααΌαααΆαα α αααααΆααααΈαα½ααααΆα ααααα‘ααααΈααααΆα ααααααΆααΆααααααΆααΉαααααΎαααΆαααααΌαααΆαααααααααααΆαα α»αααααα FLS_PR1 (αααααΆαααααααααΈααα αααα»αααΆαααααααΌαααααΆαα ααΉααααΆααΆααααααΊααααα )α
α αααΆαααΆαααααΊααΆ checksum ααΆαααα: ααααααΌαααΆααααααααααΆαααΆαααααα½ααααααΆααααΈααααααααα αα·αααΆααααααααα·ααα CRC ααα’ααα αΆαααααα ααΎαααΈαααααααααααΉαααΆααααΌα M8C ααΆααααα»αααΌα αα½αααααΆαα α»αααααααααα»αααΆαααααααααΆαα αααααααΆ checksum ααααααααααααΉαααααΌαααΆααααααααΆαα αααα»αα’αααααΌα ααααΆααααα ααΈαααα»αααΉααα αααααα: KEY1 (0xF8) / KEY2 ( 0xF9) α
ααΌα ααααααΆαααααΉααααΈ ααΆαααΆααααα αΆααααααααα»αααΎααα ααΌα αααα
- ααΎαααααΆααααΆαααα ISSP α
- ααΎαα αΆααααααΎαααΆαααααΆ checksum αααααααΎααα·α ααα CHECKSUM-SETUP α
- ααΎαα αΆααααααΎαααααΎαααΆααα½αααααΆαα‘αΎααα·ααααααΆααααΈαααααααΆααΆααααΆαα T.
- ααΎαα’αΆα RAM ααΎααααΈααα½αααΆα checksum C αα αα α»ααααααα
- ααααΎααα αΆαααΈ 3 αα·αααΈ 4 αααααααααααααααΎα T ααααα·α αααααα
- ααΎααααααααααα·ααααααααΈ flash drive ααααα checksum 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
ααΌαααααααααααΆααααΎ checksum ααααΆααααααααααααΎααααα α 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 α
- ααααΎαααΆαααΆαααααΆ checksum (send_checksum_v) α
- αααα
αΆαααααααααΆααααΆαααα½α; ααααα·αααΌαααΈαααα αΆααΌα
ααΆααααααα
- αααα»αβααΆαβα
αααΆαβαααβααΆβα
αααΎαβαα αΌαβαααβαααα»αβααβααΎαβααΆβααΆβααααβαα
βααΆβαααΆαβααΆ
αααααΆααααααΈααααΌαα·ααΆααΈ ααααΎαααΆαααΆαααααΉαααααΌαααααΆαα½αααΉαααΆααααααΆαααααα·αααΎαααΈ 16383 ΞΌs; - α αΎααααααΆαααααααααααααΆααααααΆαααααααααΆααΌα ααααΆαα αΌαααααααα»αααΆαααααΎαααΆααΆααααααΆαααααΈααααΌαα·ααΆααΈ ααααα·αααΎ 0 ααααΌαααΆααααααΌααα ααΆααΆααΆαα»αααα αΌα ααΆααααΎαααΆααα·αααααΉαααααΌαααΆαααααα»α!
- αααα»αβααΆαβα
αααΆαβαααβααΆβα
αααΎαβαα αΌαβαααβαααα»αβααβααΎαβααΆβααΆβααααβαα
βααΆβαααΆαβααΆ
- α αΆααααααΎα PSoC α αΌααα αααα»αααααααααααααααα·ααΈ (ααΎαααααΆααααααααΎαααααααααα ααααα·αααααΎααα·α αααα αΆααααααΎα) α
αααααΌαα α»αααααααα αααα»α Pythonα
for delay in range(0, 150000): # Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π² ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
for i in range(0, 10): # ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉΠΈΠ· Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ
try:
reset_psoc(quiet=True) # ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ Π²Ρ
ΠΎΠ΄ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
send_vectors() # ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΡ
Π²Π΅ΠΊΡΠΎΡΠΎΠ²
ser.write("x85"+struct.pack(">I", delay)) # Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ + ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ
res = ser.read(1) # ΡΡΠΈΡΠ°ΡΡ arduino ACK
except Exception as e:
print e
ser.close()
os.system("timeout -s KILL 1s picocom -b 115200 /dev/ttyACM0 2>&1 > /dev/null")
ser = serial.Serial('/dev/ttyACM0', 115200, timeout=0.5) # ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ
continue
print "%05d %02X %02X %02X" % (delay, # ΡΡΠΈΡΠ°ΡΡ RAM-Π±Π°ΠΉΡΡ
read_regb(0xf1),
read_ramb(0xf8),
read_ramb(0xf9))
ααα»ααα ααΌααααααααΎα’αααΈα
- α αΆααααααΎα PSoC α‘αΎααα·α (α αΎαααααΎαααααααααα)α
- ααααΎααα·α αααααΆαα αΆααααααΎαααααααα
- α α αα αα»αααΆα Arduino Cmnd_STK_START_CSUM (0x85) αααααΆααααααΆαααααααα»αααΈααααΌαα·ααΆααΈααααΌαααΆαααααααΆααααΆαααΆαααΆααααααα
- α’αΆαααΌααααααΆαααααα (0xF8 αα·α 0xF9) αα·αααΆαα α»ααααααααααΆαα―αααΆα 0xF1 α
αααααΌααααααααΌαααΆαααααα·ααααα· 10 αααααα»α 1 ααΈααααΌαα·ααΆααΈα 0xF1 ααααΌαβααΆαβαα½αβαααα αΌαβαα βααΈαααβαααααβααΆβααΆβααΆαβα α»αβαααααβααβαα½αβαααβαααβααΆαβααααΆααβααααΌβαβαα βαααβααααΆ checksum α αααα ααααΆααΆααΆααααααααα’αααααααααα’αΆαααααα½αα ααα½ααααααααΎαααα―αααΆαααααα·ααααΆαααααααα α αααΆαααΆα hack ααα’αΆαααααααααααα»αααααΎααΎααααΈααααα Arduino α‘αΎααα·ααααααααΎ picocom αα αααααα Arduino ααααααα αΆααααααΆααααΈαα·α (αα·αααΉαααΌαα ααα»)α
α§.α’. ααΆαα’αΆααααααα
ααααααααααααααΈα 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 αα·αααααΆαα αα null αα·αααααΆααααααΌαααααααααααΆαα’αΆαααα ααααααΆαααΆααααα αααααΆαααααΎαααΆαααααΆααΆααααΌα (8192 αα) α αααΆαααα 0,1478 αα·ααΆααΈ (ααΆαα½αααΉαααΆααααααααα½αααααα·α ααααα½α ααΆααααααααααΆααααΎαααΆα) αααααααΎααΉααααααΆα 18,04 ΞΌs αααα»ααα½ααα ααΎαα’αΆα ααααΎαααααααΆαααααΎααααΈαα·αα·αααααΎαααααα 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 αααααΆααααΆααααΆααααααΆααααααΈααααΌαα·ααΆααΈα αααααααΆααααα·ααααα·ααΆαααα»ααααααΆααααΆααααα αα 8192 αααα flash drive ααΊαααα αα 48 ααααα
α§.α£. ααΆααααΆααααααααααααααΈα Flash
αααα»ααα·αααΆααααΆααααα ααααΆααααααααΌααααααΉααααααΎαα‘αΎααα·αααΆαααααα»αααΌαααΌααααααα·ααΈαα flash drive ααααα·αααΌαααΈαααααΆαααααααααααααΆα ααααααΆαααΆααααα αααα»αααΆαααααΆαααΆαα αΆααααααΎαααααΌαααααα½α α αΎαα ααΎααααΈβααααΆααβααΆβαααα»αβααΆαβααααΎβααΆβααΆαβααααΉαααααΌα αααα»αβααΆαβαα»αααΎβααΆβαααβααααΎ 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
ααΎααα ααααααΆαα!
α§.α€. αααααααα’αΆααααααΆααααα»αααΌα PIN
α₯α‘αΌααααααΎαα’αΆα α’αΆαααΌααααααΆαααααααα αααααΎαααααΌαααΆα ααΎαα’αΆα αα·αα·αααααΎααααΆαααΆααααα½αααΈαααα αα·ααααααααααααΆααααΆααααααΌααα ααααααααΎα:
- αααα αΌααααααΌα PIN αα»α;
- ααααΆααααααΌαααααααααΆααα
ααΆααααΌα ααΎααααΈαααααααα’αΆααααααΆααααα»ααααα αΆαααααα αα αααα»αααΆααα checksum dump αα αααα»αααΆααααααΎα 10 ms αααααΆααααΈααΆαα αΆααααααΎαα‘αΎααα·αα αααααΆαααααααα»αααΆααααα αΌαααΌα PIN αα»α α αΎαααααΎααΌα ααααΆα
ααααααβαα·αβααΌαβαααααΆαβα α·αααβαα αααααβααΆαβααΆαβααααΆααβααααΌαβααΆβα αααΎαα ααα»αααααα ααΈαααα αααααα»αα’αΆα αααααααΆαααΆ checksum ααΆαααααΆααααααΌαααααααααΆαα½ααααΆα 120000 Β΅s αα·α 140000 Β΅s ααααΆααααααΆαααα ααα»αααα "ααΌα PIN" ααααααα»ααααα αΆααα ααΈαααααΊαα·αααααΉαααααΌαααΆαααααα»α - αααααΆαααααααα»αα»ααΆαααααααΎαααΆααααααΆαααMicrosconds αααααααΎααΏαα ααααααα αααααα 0 ααααΌαααΆααααααΌααα ααΆα
αααααΆαααααααααΆααααΈα αααΆαααααα·α 3 αααα αααα»αα αΆαααΆαααΆαααααααα SROM α α CheckSum ααα½αααΆαα’αΆαα»αααααααΆααΆααααα αΌαααααααααΆααα ααα½ααααα»ααααααΆαα checksum! αααα ααΎαα’αΆα ααααΎααΌαααααΆααΈαααααα’αΆααααααΆααααα»αααΌα PIN αα·αααααα "ααΆαααα»αααααα·αααααΉαααααΌα" αααΆαααΆααααα½α ααΆαα½αααΉαααΆαααααΉαααααΌααα αΌαααααααα»α 64 ααα
ααΆααααααααΌααααααααα»α ααα½αααΆαααααααααΌα ααΆααααααα
αααααΆαααααααα»αααΆαααααΌααααααΌα PIN ααΈ "123456" αα "1234567" α αΎαααα½αααΆα:
ααΌα αααα ααΌα PIN αα·ααααααααααΆαααα»αααααα·αααααΉαααααΌαα αΆααααΌα ααΆααααΌαααΆααααααΆαα»ααα αααα»ααααα»αααα 126α
α§.α₯. ααΆαβαααβα ααβαααα»αβααα α‘α’α¦
αααα»α #126 αα½ααααααα·ααα ααααααααΆαα½ααα»ααα·α 125x64x18 = 144000ΞΌs α αΆααααΈααΆαα αΆααααααΎαααααΆαααααΆ checksum αα αααα»αααααααα αΆααααααΆααααααααααααααα»α α αΎαααΆααΎααα α’αΆα ααΏααΆααααΆαα αααααΆαααα αααααΆααααΈααααΎααΆααα»αααΎααααααα αΆααααααΆααα·αααααΉαααααΌαααΆα αααΎαααααα (αααααΆαααααΆααααααΌααααα»ααα "αααααΆααααααααΆαα·α αα½α ") αααα»αααΆααααα ααααΆαααα½αααΆαααααΆααααα (αα ααΆαααΊααα 145527 ΞΌs):
ααΆα αααΆααααΆααααΆαααααΌα PIN ααααΌαααΆααααααΆαα»ααααα»αααααααααααα·αααΆαα’αα·αααααΈα! ααΆααΆααα·αααΆαα αααααααΆααααααα·αααααΌαααΆαααααααα αααα»αααΌα ASCII ααααα ααα»ααααααΌα αααααΆααααα αα ααΆαααα»ααααα αΆααααΈααΆαα’αΆααααααα ααααΈααααΆαα α»α capacitive α
ααΆα α»αααααα αααα»αααΆαααααΎαααΆαααΆαααΆααααααα½αα ααα½αααα ααΎααααΈααααααααααααααααα§αααααααΆααααΆαααα»αααααα·αααα’ααααΌαααΆααααααΆαα»αα αααααΆααααααα
0xFF - ααΆααααααΆ "ααΆαααα»αααα 15 αα" α αΎαααΆααα α»αααΆαα½αααΉαααΆαααα»αααααααΆαααααΈαα½ααα
α§.α¦. ααΆαααααΆαααΌα 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 αααααααΆααα
αααααΆαααΆαααΆααααα ααΆαααΆααααα αΆαααααααΎαααΆααα»ααα·ααααα·αα½αα ααα½ααααααΆααααα αΆααααΆαααααΎααααΆαααααα ααΆα’αΆα ααααΌαααΆααααααα’ααΌα ααΆααααααα
- αααααα§αααααααααΎααααΆααααΎααααΈαα·ααΌααα·ααααααααααααααΆαααααΉαααααΌα αααααα½αααΆαααΆααααααααααΆαααΆααααα αΆα "cold boot trace" α
- ααααΎα§ααααα FPGA ααΎααααΈαααααΎαααΆααααααΆαααααααααααΆα αααΆααααΆααααααααααα (α¬ααααΎαααααα·ααΈααααααααααααααααΉα Arduino);
- ααΆαααααααΆαααΆααααα αΆααα½αααααααααα αααα αΌαααΌα PIN αα·αααααΉαααααΌααααα ααααΆ α αΆααααααΎαα‘αΎααα·α αα·ααααααα RAM ααααααααΉαααΆαααααΌα PIN ααααΉαααααΌαααΉαααααΌαααΆααααααΆαα»ααααα»α RAM αααααΆααααΆαααααααααα αααααΆαααΆαααΆααααα ααααα·ααααααΆααΆαααΆααααα½ααααααα»αααΆαααααΎαα ααΎ Arduino α αΆααααΆααααΈααααα·ααααααΆ Arduino ααΊ 5 ααα»α ααααααααααααααααΎααααα»ααα·αα·αααααΎαααααΎαααΆαααΆαα½αααΉααααααΆ 3,3 ααα»αα
ααΏααα½αα±ααα αΆααα’αΆαααααααα½ααααα’αΆα ααααΌαααΆαααΆαααααααΊααΆααααααΆαα½αααααα·αααα»αααΎααααΈααααααΆαααΆαααΆαααΆαα’αΆαα ααααα·αααΎαα·ααΈααΆααααααααααααΎαααΆα ααΎαααΉαα’αΆα ααα½αααΆααα·ααααααααααΉαααααΌαααΈ flash drive αααα½αα±ααααΆαααΉαααα’ααααΎααΆαα’αΆα checksum ααΆαα½αααΉααααααααΆαα·αα αααΆααααΆααα
αααααΆα SROM αααα ααααΆα’αΆαααααΆαααΆααααααΆαα α
αααααααα ReadBlock ααΎαα’αΆα
ααααΎααΌα
ααααΆ
ααΆαααΈαααΆααα½αααααααα’αΆα ααααΎααΆαααΊααΆααα·αααααΈα ααααΈαααααααΈαα ααΎααααΈαα SRAM dump αααααα’ααααααααΆαααΆαα α ααΌαααααααΆαααααααααααααα·αααΆαα―αααΆα αα·αααΆαααΆααααααααα
9 α ααα ααααΈααααα·ααααΆα
ααΌα αααα ααΆαααΆαααΆαααααΆαααααα αα»αα±ααααΆαααΆαα ααααΆαα αααΎα αααααααΆααααΎ microcontroller ααααααΆ (αα·αααα "ααΉα") ααΎααααΈαααααΆαα»αααΌα PIN... ααΎαααΈααα αααα»ααα·αααΆααααΆαααΎα (αα α‘αΎα) ααΆααΎα’αααΈαααααΎαααΆαααΆαα½ααα·αααααα ααΆαα’αα·αααααΈααα ααΎα§αααααααα!
ααΎα’αααα’αΆα
ααααΆαα’αααΈαααααααααΆαα Aigo? αααααΆααααΈααΆααα·ααΆαααααΌαα½αα
ααα½αααααααΆα HDD αααααΆαα’αα·αααααΈααα
ααααΆα 2015 αααα»αααΆαααααΎ
αααα»αααΆαα αααΆααααααΈαα α»ααααααΆα α αα·ααααααααΆα ααΆα αααΎαααΎααααΈααααΎααΆαααααΆαααααΆααααα ααα»ααααα αα 40 ααααα ααΆααααΆααααΈααΎαααααΌα (ααααααα»αααΎαααΈα) αααα αα (α αΆααααΌα PIN) α 40 ααααααΌα ααααΆααααα½ααααα αΌαααΆαααααααααΆααααααα»αααΆαα αααΆααααα»αααΆααααααα’ααααααααα ααΆβααΆβααΆαβααααΎβααααΎαβααβααααΎαβαα½αβα
ααααα: www.habr.com