á€áááºááŸá¬ ááŒááºáááá¯ááºááá¯ááºáá¯ááºááŸááºááŒááºážáááá¯ááºáá»á¬ážááᯠáááºáá¬á¡ááŒá±á¬ááºáž áá¯áááááŸáá·áº áá±á¬ááºáá¯á¶ážá¡ááá¯ááºážááŒá
áºáááºá áá¯ááºáá±á¬áºááá¯ááºáááºáá
áºáŠážááẠáááŒá¬áá±ážáá®á áá»áœááºá¯ááºá¡á¬áž Patriot (Aigo) SK8671 hard drive ááᯠáá°áá±á¬ááºáá¬áá²á·ááŒá®áž áááºážááᯠáá±á¬ááºááŒááºááŸáá·áºááẠáá¯á¶ážááŒááºáá²á·ááŒá®áž ááá¯á¡áá« áááºážááŸááœááºáá¬ááá·áºá¡áá¬áá»á¬ážááᯠáá»áŸáá±ááá¯ááºááŒááºážááŒá
áºáááºááᯠáá»áœááºá¯ááºá¡á¬áž ááááá±ážáá«áá
á±á áááºááááºááẠáá±áá»á¬áááºáá«á
4. áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºážááá¯ááºáž PSoC flash drive á០á¡ááŸáá¯ááºáá¯á¶ážáá áºáá¯ááᯠá áááºááá¯ááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áºá á¡á¬ážáá¯á¶ážááẠ([áááááá¯ááºáž]()) ááœáẠPIN áá¯ááºááᯠPSoC á flash á¡ááááºá¡áááºááœáẠááááºážáááºážáá¬ážááŒá±á¬ááºáž ([áááááá¯ááºáž]()) ááœáẠááœáŸááºááŒáááºá ááá¯á·ááŒá±á¬áá·áº á€á¡áááºážá¡ááááºá¡áááºááᯠáá»áœááºá¯ááºááá¯á·áááºááẠááá¯á¡ááºáá«áááºá ááá¯á¡ááºáá±á¬ á¡áá¯ááºá ááŸá±á·á
- microcontroller ááŸáá·áº "áááºááœááºáá±áž" ááá¯ááááºážáá»á¯ááºáá«á
- ဠâáááºááœááºáá±ážâ ááᯠááŒááºáááŸáááºááŸá¯ááŒááºážá០áá¬ááœááºááŒááºážááŸááááŸá á á áºáá±ážááẠáááºážáááºážááŸá¬áá«á
- á¡áá¬á¡ááœááºááᯠáá»á±á¬áºááœáŸá¬ážááẠáááºážáááºážááŸá¬áá«á
ááŸááºáááºáá±á¬ PIN áá¯ááºááᯠááŸá¬ááœá±ááẠá¡áááá¹áá¬ááºááŸááá±á¬ áá±áá¬ááŸá áºáá¯ááŸááááºá
- á¡ááœááºážááá¯ááºáž flash memory;
- SRAMá á¡áá¯á¶ážááŒá¯áá°ááá·áºááœááºážáá¬ážáá±á¬ pin áá¯ááºááŸáá·áº ááŸáá¯ááºážááŸááºááẠáááºáá¯ááºááᯠááááºážáááºážáá¬ážááá¯ááºáááºá
ááŸá±á·ááá¯áá»áŸá±á¬áºááŒáá·áºáááºážá ISSP áááá¯ááá¯áá±á¬á á á¬ááœááºá á¬áááºážáááŸááá±á¬á áœááºážáááºáá»á¬ážááᯠááŒá±á¬ááºážááŒááºááŸááºááŒá®ážáá±á¬áẠáááºážááá¯á¶ááŒá¯á¶áá±ážá áá áºá¡á¬áž âá¡á±ážáá²ááœááºááŒá±áá¬áá±á¬ááºááŒááºážâ áá¯áá±á«áºáá±á¬ áá¬á·ááºáá²ááá¯ááºááá¯ááºááŸá¯ááᯠáá»á±á¬áºááŒááºáᬠá¡ááœááºážááá¯ááºáž PSoC flash drive ááᯠá¡ááŸáá¯ááºááááºážááá¯ááºáá²ááŒá áºááŒá±á¬ááºáž áááááŒá¯áááá«áááºá áááºážááẠáá»áœááºá¯ááºá¡á¬áž á¡ááŸááºááááºááẠPIN áá¯ááºááᯠááá¯ááºááá¯ááºááœáŸáá·áºáá áºááá¯ááºá á±áá«áááºá
$ ./psoc.py
syncing: KO OK
[...]
PIN: 1 2 3 4 5 6 7 8 9
áá±á¬ááºáá¯á¶áž áááá¯ááááºáá¯ááº-
5. ISSP áááá¯ááá¯áá±á¬
á .áá ISSP ááá¯áá¬áá¬áá²
ááá¯ááºáááá¯ááœááºáááá¯áá¬ááŸáá·áº "áááºááœááºááŒááºáž" ááẠááœá²ááŒá¬ážáá±á¬á¡áá¬áá»á¬ážááᯠá¡áááá¹áá¬ááºááœáá·áºááá¯ááá¯ááºáááº- "áá±á¬ááºážáá»áá°á០áá±á¬ááºážáá»áá°" á០á¡ááŸááºá ááºáááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯á á¡ááŒááºá¡ááŸááºáááºááœááºááŒááºážá¡áá (á¥ááá¬á Microchip's PIC á¡ááœáẠICSP)á
Cypress ááœáẠáá
áºá
áááºáá
áºááá¯ááºáž áá±á¬áºááŒáá¬ážááá·áº ISSP (in-system serial programming protocol) áá¯áá±á«áºáá±á¬ áááºážá¡ááœáẠáááºážáááá¯ááºááá¯áẠprotocol ááŸááááºá
- PSoC ááᯠááŒááºáááºá áááºáá«á
- ဠPSoC á á¡ááŸááºá ááºáá±áᬠpin ááá¯á· ááŸá±á¬áºáá¶áá«ááºááᯠáá¯ááºáá«á ááŒááºá áááá¯ááááºážáááºážáá¯ááºááá¯á· áááºáá±á¬ááºáááºá
- "vectors" áá¯áá±á«áºáá±á¬ ááŸááºáá»á¬ážáá±á¬ bit string áá»á¬ážááŒá áºááá·áº command áá»á¬ážááᯠáá±ážááá¯á·áá«á
ISSP á á¬ááœááºá á¬áááºážááẠဠvector áá»á¬ážááᯠcommand á¡áááºážáááºáá»áŸáá¬á¡ááœáẠáááºááŸááºáááº-
- á áááºáááº- á
- á áááºáááº- á
- Initialize-3 (3V ááŸáá·áº 5V ááœá±ážáá»ááºá áá¬áá»á¬áž)
- ID-SETUP
- áááº-á¡áá¯ááºáá®-á áá¬ážáá¯á¶áž
- SET-BLOCK-NUM: 10011111010dddddddd111, dddddddd=block# ááŸááá¬á
- á¡á á¯ááá¯áẠáá»ááºááŒááºáž
- áááá¯ááááº-ááááºááá¯á·
- á¡áááºááŒá¯áááºááŸááºááŒááºážá
- READ-BYTE- 10110aaaaaaZDDDDDDDDZ1 áá±áá¬ááœáẠDDDDDDDD = data outá aaaaaa = ááááºá ᬠ(6 bits)
- WRITE-BYTE- 10010aaaaaaaddddddd111á where dddddddd = áá±áá¬á aaaaaa = ááááºá ᬠ(6 bits)
- Secure
- á á áºáá±ážáá»ááº-áááºááŸááºááŸá¯
- READ-CheckSUM- 10111111001ZDDDDDDDDZ110111111000ZDDDDDDDDZ1á DDDDDDDDDDDDDDDD = áá±áá¬ááœááºááá·áºáá±áá¬- á ááºá á áºáá±ážáá»ááº
- ááááºááá¯á·ááŒááºážááᯠáá»ááºáá«á
á¥ááá¬á Initialize-2 á¡ááœáẠvector
1101111011100000000111 1101111011000000000111
1001111100000111010111 1001111100100000011111
1101111010100000000111 1101111010000000011111
1001111101110000000111 1101111100100110000111
1101111101001000000111 1001111101000000001111
1101111000000000110111 1101111100000000000111
1101111111100010010111
vector áá»á¬ážá¡á¬ážáá¯á¶ážááẠáá°áá®áá±á¬á¡ááŸááºááŸááááº- 22 bitsá HSSP á á¬ááœááºá á¬áááºážááœáẠISSP ááœáẠáá±á¬ááºáááºá¡áá»ááºá¡áááºá¡áá»áá¯á·áá«ááŸááááº- "ISSP vector ááẠááœáŸááºááŒá¬ážáá»ááºá¡á á¯á¡áá±ážááᯠááá¯ááºá á¬ážááŒá¯ááá·áº áááºážáááºážá á®á á®ááẠáááá¯áá«á"
á .áá Demystifying Vectors
áá®ááŸá¬áá¬ááœá±ááŒá áºáá±áá² á¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá á¡á ááá¯ááºážááœááºá á€áá°áá®áá±á¬ vector áá»á¬ážááẠM8C áááºážááœáŸááºáá»ááºáá»á¬ážá á¡ááŒááºážáááºáá¬ážááŸááºážáá»á¬ážááŒá áºáááºáᯠáá»áœááºáá±á¬áºáá°ááá²á·áá±á¬áºáááºážá á€áá°ááá»ááºááᯠá á áºáá±ážááŒá®ážáá±á¬ááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá opcodes áá»á¬ážááẠáááá¯ááºáá®ááŒá±á¬ááºáž ááœá±á·ááŸááá²á·áááºá
ááŒá®ážááẠá¡áá±á«áºá vector ááᯠgoogle áá¯ááºááŒá®áž ááœá±á·áááºá
ááá¯á·áá±á¬áẠSupervisory ROM (SROM) ááá¹áá០á¡ááœááºá¡áá¯á¶ážáááºáá±á¬ á¡áá»ááºá¡áááºá¡áá»áá¯á·ááᯠáá»áœááºá¯ááºá
á¯áá±á¬ááºážááá¯ááºáá²á·áááºá
- 00 áá¬áá®:SWBoot ááŒááºáááºáááºááŸááºááŒááºážá
- 01 áá¬áá®- ReadBlock
- 02 áá¬áá®- WriteBlock
- 03 áá¬áá®- EraseBlock
- 06 áá¬áá®- TableRead
- 07 áá¬áá®- CheckSum
- 08 áá¬áá®- Calibrate0
- 09 áá¬áá®- Calibrate1
Vector á¡áááºáá»á¬ážááᯠSROM áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá€áááá¯ááá¯áá±á¬á០áá¶á·ááá¯ážáá±ážáá¬ážááá·áº áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯ážáá»áá¯ážááᯠáá»áŸá±á¬áºááŸááºážáá¬ážááá·áº SROM ááá·áºáááºáá±á¬ááºáá»á¬ážááŸáá·áº ááŒá±áá¯á¶ááœá²ááá¯ááºáá«áááºá áááºážááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠISSP vector áá»á¬ážá ááááá¯á¶ážáá áºááᯠáá¯ááºáá¯ááºááá¯ááºáááº-
- 100 => âáâ
- 101 => ârdmemâ
- 110 => âá¡ááŸá¬ážâ
- 111 => ârdregâ
ááá¯á·áá±á¬áºá on-chip áá¯ááºáááºážá ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡ááŒáá·áºá¡á á¯á¶áá¬ážáááºááŸá¯ááᯠPSoC ááŸáá·áº ááá¯ááºááá¯ááºáááºááœááºááŸá¯ááŸáá¬áá»áŸáẠáááŸáááá¯ááºáá«áááºá
á .áá PSoC ááŸáá·áº áááºááœááºááŸá¯
Dirk Petrautsky ááááºážá ááŸáááŒá®ážáá¬ážáá«á
áá»áœááºá¯ááºááá¯áá±áááááºáááºážááœááºá áá»áœááºá¯ááºááẠDirk ááá¯ááºááᯠá¡áááºážáááºááŒá±á¬ááºážáá¬ážááŒá±á¬ááºáž áááááŒá¯áá«á áá»áœááºá¯ááºá ááŒá¯ááŒááºááœááºážáá¶ááŸá¯ááᯠGitHub ááœáẠááŸá¬ááœá±á·ááá¯ááºáááº-
ááá¯á·ááŒá±á¬áá·áº Arduino ááá¯á¡áá¯á¶ážááŒá¯á "áááºááœááºáá±áž" á¡ááœáẠ"ááá¬ážáááº" vector áá»á¬ážááá¯áá¬á¡áá¯á¶ážááŒá¯áá²á·áááºá VERIFY á¡áááá·áºááá¯áá¯á¶ážááŒá®áž internal ROM ááá¯áááºááá¯á·ááŒáá¯ážá á¬ážáá²á·áááºá áá»áŸá±á¬áºááá·áºáá¬ážáááá¯áá² áá»áœááºáá±á¬áº áá«ááᯠááá¯ááºááá¯ááºáá²á·áá«áá°ážá flash drive áá²ááŸá¬ read protection bits ááœá± activated ááŒá áºáá±áá¬ááŒá±á¬áá·áº ááŒá áºááá¯ááºáá«áááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááẠáá»áœááºá¯ááºáááá¯ááºááá¯áẠááá¯ážááŸááºážáá±á¬ vector á¡áá»áá¯á·ááᯠáá±ážáá¬ážááŒááºážááŸáá·áº áááºááŒááºáž ááŸááºáá¬ááº/ááŸááºáá¯á¶áááºááŒááºážá¡ááœáẠáááºáá®ážáá²á·áááºá flash drive ááá¯áá¬ááœááºáá¬ážáá±á¬áºáááºážáá»áœááºá¯ááºááá¯á·ááẠSROM áá áºáá¯áá¯á¶ážááá¯áááºááá¯ááºáááºááá¯áááááŒá¯áá«á
á .áá on-chip ááŸááºáá¯á¶áááºááŸá¯áá»á¬ážááᯠáá±á¬áºáá¯ááºááŒááºážá
" disassembled" vectors áá»á¬ážááá¯ááŒáá·áºááŸá¯ááŒá®ážáá±á¬ááºá áá¬ááœááºááŸá¯ááá¯áá»á±á¬áºááŒááºá ááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááá·áº M0C opcodes ááá¯áááºááŸááºááẠá ááºáá á¹á ááºážááẠá á¬ááœááºá á¬áááºážáááŸááá±á¬ááŸááºáá¯á¶áááºáá»á¬áž (8xF0-8xFA) ááá¯á¡áá¯á¶ážááŒá¯ááŒá±á¬ááºážááœá±á·ááŸááá²á·áááºá áááºážááẠ"ADD", "MOV A, X", "PUSH" ááá¯á·ááá¯áẠ"JMP" áá²á·ááá¯á·áá±á¬ opcode á¡áá»áá¯ážáá»áá¯ážááᯠáá»áœááºá¯ááºá¡á¬áž áá¯ááºáá±á¬ááºááá¯ááºá á±áá²á·áááºá áááºážááá¯á·ááá¯áá»á±ážáá°ážáááºáá«ááẠ(ááŸááºáá¯á¶áááºááŒááºážááœááºáá°ááá¯á·ááá±ážááœááºááá¯ážáá»áá¯ážáá»á¬ážááá¯ááŒáá·áºááŒááºážá¡á¬ážááŒáá·áº) áá»áœááºá¯ááºááẠáááºááá·áºá á¬ááœááºá á¬áááºážáááŸááá±á¬ááŸááºáá¯á¶áááºáá»á¬ážááẠá¡ááŸááºááááºáá¯á¶ááŸááºááŸááºáá¯á¶áááºááŒááºážááŒá áºááẠ(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 ááẠá¡áá¬á¡ááœááºááᯠá¡áááºááœááºážáá¬ážááŒááºážááŸááááŸá á á áºáá±ážááẠá ááºáá á¹á ááºážááᯠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡á¬áž áááºááá·áºáááºážáááºážááŒáá·áº áá¶á·ááá¯ážááá±ážááá·áºá¡ááœááºááŒá±á¬áá·áº áá»áœááºá¯áẠá¡ááœááºá¡á¶á·ááŒáááá«áááºá Dirk á áá°áá²á·ááœááºážáá¶ááŸá¯ááᯠáá¯ááºááŒááºááŒá®ážáá±á¬áẠCypress á áá±ážáá²á· HSSP áá¯ááºááᯠá¡ááºááááºáá¯ááºáá¬ážáááºááá¯áá¬ááᯠáá±á¬ááºáá¯á¶ážáá¬ážáááºááá¯á· Google áá²ááᯠáááºáááºáá²áá² áá°ážáá±á¬áºáááá«áááºá ááá¯áá±á¬á·! ဠ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 ááᯠá¡áá¯á¶ážááŒá¯ááŒááºáž (psoc.py ááœáẠread_security_data ááᯠááŒáá·áºáá«)á áá»áœááºá¯ááºááá¯á·ááẠáá¬ááœááºáá¬ážáá±á¬ ááá±á¬ááºáá áºáá¯áá»áŸáẠááŸá áºáá áºáá«ááŸááá±á¬ SRAM ááœáẠáá¯á¶ááŒá¯á¶áá±ážáá áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠ0x80 ááŒáá·áº áááŸááá«áááºá
ááááºááẠá áááºáá»ááºá áá¬áá±á¬ááºážáááº- "ááŒááºáá á¬áááºááŒááºážááŸáá·áº á á¬áá±ážááŒááºážááᯠááááºáááº" áá¯ááºááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¬ááœááºáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠflash drive ááŸáá¬ááá¯áá»áŸááááºááá¯ááºáá¯á¶áá¬áááá¬ááŸááá±ážááá¯áẠ(á¥ááᬠROM dumper ááá¯á¡á²áá®ááŸá¬ááá·áºááœááºážáááº) á áá¬ááœááºááŸá¯ááá¯ááááºáááºáá áºáá¯áááºážáá±á¬áááºážáááºážááŸá¬ chip áá áºáá¯áá¯á¶ážááá¯áá¯á¶ážááá»ááºáá áºáááºááŒá áºáááºá ð
6. ááá (áá¡á±á¬ááºááŒááº) ááá¯ááºááá¯ááºááŸá¯- ROMX
ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«ááŸáá·áºááœááºáá»á¬ážááᯠá ááºážááŒáá·áºááá¯ááºáááº- áá»áœááºá¯ááºááá¯á·ááœáẠáááá¬ážáá±á¬ opcode áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááŸááá±á¬ááŒá±á¬áá·áº flash memory ááá¯áááºáááºá¡áá¯á¶ážááŒá¯ááá·áº ROMX ááᯠá¡áááºááŒá±á¬áá·áº execute ááá¯ááºáááááºážá áá®áááºážáááºážá á¡á±á¬ááºááŒááºááá¯á· á¡ááœáá·áºá¡áááºážáá±á¬ááºáž ááŸááááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº SROM á០áá±áá¬áá»á¬ážááᯠáááºááŒáá±á¬ ReadBlock áá¯ááºáá±á¬ááºáá»ááºááẠáááºážá¡á¬áž 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
áá¶ááá±á¬ááºážá áœá¬áá² áá®áá¯ááºá á¡áá¯ááºááá¯ááºáá«áá°ážá ð ááá¯á·áááºážááá¯áẠáááºážááẠá¡áá¯ááºáá¯ááºáá±á¬áºáááºáž output ááœáẠáá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠopcodes (0x28 0x30 0x40) ááᯠáááŸááá«áááºá á ááºá áááºá ááºáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááẠá á¬áááºááŒááºážá¡á¬áž á¡áá¬á¡ááœááºáá±ážááá·áº á¡á áááºá¡ááá¯ááºážáá áºáá¯áᯠááááºáá«á áááºážááẠá¡ááºáá»ááºáá®áá¬ááŸáá·áºááœááºáá áºáá¯ááŸáá·áº ááá¯áá°áááº- ááŒááºá opcodes áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±á¬á¡áá«á ROM áááºá áºáá¬ážááᯠáá¬áá®ááŒá¬ážáá¶áá áºáá¯ááá¯á· ááŒááºááœáŸááºážáááºá
7. áá¯áááááá¯ááºááá¯ááºááŸá¯- Cold Boot ááŒá±áá¬áá¶ááŒááºážá
ROMX ááŸáá·áºááœááºá á¡áá¯ááºáááŒá
áºáá²á·á¡ááœááºá áá¯ááºáá±ááŸá¯ááŸá¬ áá±á¬áºááŒáá¬ážáá²á· áá®ááŸáá·áºááœááºáá²á· áá±á¬ááºáááºáá¯á¶á
á¶áá
áºáá»áá¯ážááᯠá
áááºá
ááºážá
á¬ážáá²á·áááºá
á.áá á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
ISSP á á¬ááœááºá á¬áááºážááẠCHECKSUM-SETUP á¡ááœáẠá¡á±á¬ááºáá« 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
[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 á á áºáá±ážááŒááºáž ááŒá áºáááºá áááºážááẠflash bank áá áºáá¯ááŸá á¡áá¯á¶ážááŒá¯áá°áááºááŸááºáá¬ážáá±á¬ ááá±á¬ááºá¡áá±á¡ááœááºá 16-bit checksum ááᯠáá¯áááŸá áááºáᬠááœááºáá»ááºáááºá BLOCKID áá«áá¬áá®áá¬ááᯠchecksum ááœááºáá»ááºáá¬ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº blocks á¡áá±á¡ááœááºááᯠáá»á±á¬áºááŒááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá "1" áááºááá¯ážááẠblock zero á¡ááœáẠchecksum ááá¯áá¬ááœááºáá»ááºáá«áááºá ááŒáááºáá±á¬á· "0" ááẠflash bank á 256 áá¯á¶ážá¡á¬ážáá¯á¶ážá á á¯á á¯áá±á«ááºáž checksum ááᯠááœááºáá»ááºááááºááŒá áºáá«áááºá 16-bit checksum ááᯠKEY1 ááŸáá·áº KEY2 ááŸáááá·áº ááŒááºáá±ážáááºá KEY1 ááá·áºáááºáá±á¬ááºááẠchecksum á á¡áááá·áºááá¯ááºáž 8 bits ááᯠááááºážáááºážáá¬ážááŒá®áž KEY2 ááá·áºáááºáá±á¬ááºááẠááŒáá·áºáá¬ážáá±á¬ á¡ááŸá¬á ᬠ8 bits ááᯠááááºážáááºážáá¬ážáááºá flash bank áá»á¬ážá áœá¬ááŸááá±á¬ á ááºáá á¹á ááºážáá»á¬ážá¡ááœááºá áá áºáá¯áá»ááºážá á®á¡ááœáẠchecksum áá¯ááºáá±á¬ááºáá»ááºááᯠáá®ážááŒá¬ážá á®áá±á«áºáááºá áááºážááœááºá¡áá¯ááºáá¯ááºááá·áºáááºáá¶áá«ááºááᯠFLS_PR1 ááŸááºáá¯á¶áááºááŒááºážááŒáá·áºáááºááŸááºááẠ(áááºážááœááºáá áºááŸáẠflash bank ááŸáá·áºáááºááá¯ááºáá±á¬ bit ááá¯áááºááŸááºááŒááºážááŒáá·áº) á
áááºážááẠááá¯ážááŸááºážáá±á¬ checksum áá áºáá¯ááŒá áºááŒá±á¬ááºáž áááááŒá¯áá«- bytes áá»á¬ážááᯠá¡ááŒá¬ážáá áºáá¯ááŒá®ážáá áºáᯠááá¯ážááŸááºážá áœá¬ááá·áºáá¬ážáááºá á áááºáá°ážááẠCRC áá°ážáá°ážááŒá¬ážááŒá¬ážáááŸááá«á ááá¯á·á¡ááŒáẠM8C core ááœáẠááŸááºáá¯á¶áááºáá¬ážáá±á¬ á¡á á¯á¡áá±ážáá áºáá¯ááŸááááºááᯠááááŸááá¬ážáá±á¬ááŒá±á¬áá·áº checksum ááᯠááœááºáá»ááºááá·áºá¡áá«á á¡áááºá¡áááºáááºááá¯ážáá»á¬ážááᯠáá±á¬ááºáá¯á¶ážááœáẠoutput ááá¯á·ááœá¬ážááá·áº KEY1 (0xF8) / KEY2 (áá°áá®áá±á¬ variables áá»á¬ážááœáẠááŸááºáááºážáááºáá¬ážáááá·áºáááºá 0xF9)á
áá®á¡áá¯áá®á¡á áá»áœááºá¯ááºá ááá¯ááºááá¯ááºááŸá¯ááẠá€áá²á·ááá¯á· ááŒá áºáá¯á¶ááááºá
- áá»áœááºá¯ááºááá¯á·ááẠISSP ááŸáááá·áºáá»áááºáááºáááºá
- áá»áœááºá¯ááºááá¯á·ááẠCHECKSUM-SETUP vector ááᯠá¡áá¯á¶ážááŒá¯á checksum ááœááºáá»ááºááŸá¯ááᯠá áááºáá«áááºá
- áááºááŸááºáá¬ážáá±á¬á¡áá»áááºáá áºáá¯ááŒá®ážáá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáááá¯áááºáá¬á¡á¬áž ááŒááºáááºá áááºáááºá
- áááºááŸá checksum C ááá¯áááẠRAM ááá¯áááºáááºá
- á¡ááá·áº 3 ááŸáá·áº 4 ááá¯ááŒááºáá¯ááºáá«á T ááá¯á¡ááŒáááºááá¯ááºážá¡áááºážáááºááá¯ážáá±ážáá«á
- áá»áœááºá¯ááºááá¯á·ááẠáááẠchecksum C ááᯠáááºááŸááá áºáá¯á០áá¯ááºááŒááºážááŒáá·áº flash drive ááŸáá±áá¬áá»á¬ážááᯠááŒááºáááºááá°áááºá
ááá¯á·áá±á¬áºá ááŒááºááœáá·áºááŒá®ážáá±á¬áẠáá»áœááºá¯ááºááá¯á·áá±ážááá¯á·áááá·áº Initialize-1 vector ááẠ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) ááá¯áá±á«áºááá¯ááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·á á¡ááá¯ážááẠchecksum ááᯠá€áá¯ááºááᯠáááºáá±ážáá±ážáááº... ááŒá áºááá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·ááẠáááá¯ááááºážáááºážáá¯ááºááá¯á· áááºáá±á¬ááºáááºá¡ááœáẠááŸá±á¬áºáá¶áá«áẠ(á¡áááºáá¯ááºáá¡á ááŸ) ááᯠáá±ážááá¯á·ááá¯ááºááŒá®ážá ááá¯á·áá±á¬áẠ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 ááᯠáááá¯ááááºážáááºážáá¯ááºááá¯á· ááŒááºáááºá áááºáá« (áá»áœááºá¯ááºááá¯á·ááẠáááŠážááá·áºááœááºážááŒááºáž vector áá»á¬ážááᯠáááá¯á·áá² ááŸá±á¬áºáá¶áá«ááºááᯠááá¯á·áá¯á¶áá¬)á
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 ááᯠááŒááºáááºá áááºááẠ(áááºážááᯠááŸá±á¬áºáá¶áá«ááºáá áºáᯠáá±ážááá¯á·áááº)á
- á¡á ááŒá¯ááŒááºáž vector áá»á¬áž á¡ááŒáá·áºá¡á á¯á¶ áá±ážááá¯á·áááºá
- ááá¯ááºáááá¯á áá¹ááá·áºá¡ááœááºáž ááŸá±á¬áá·áºááŸá±ážááŸá¯ááᯠááá·áºáááºáá»ááºáá áºáá¯á¡ááŒá Ạáá»á±á¬áºááœá¬ážááá·áº Arduino áá¯ááºáá±á¬ááºáá»áẠCmnd_STK_START_CSUM (0x85) ááᯠáá±á«áºááá¯áááºá
- checksum (0xF8 ááŸáá·áº 0xF9) ááŸáá·áº á¡áá±á¬ááºá¡áá¬ážáá²á· ááŸááºáá¯á¶ááẠ0xF1 ááá¯áááºáááºá
á€áá¯ááºááᯠ10 ááá¯ááºáááá¯á áá¹ááá·áºá¡ááœááºáž 1 ááŒááẠáá¯ááºáá±á¬ááºáááºá 0xF1 ááẠchecksum ááᯠááœááºáá»ááºáá¬ááœáẠááŒá±á¬ááºážáá²áá±á¬ áá áºáá¯áááºážáá±á¬ ááŸááºáá¯á¶áááºááŒá áºáá±á¬ááŒá±á¬áá·áº á€áá±áá¬ááœáẠáá«áááºáááºá ááááºážáááºá¹áá»á¬áá¯áá¹áááá°áá áºá០á¡áá¯á¶ážááŒá¯áá±á¬ áá¬áá®ááááºážááŸááºáá áºáá»áá¯ážááŒá áºááá¯ááºáááºá Arduino ááẠá¡áááºááá¹ááá¬áá»á¬ážááŒáááŒááºážáááºááœá¬ážáá±á¬á¡áá« Arduino ááᯠpicocom ááá¯á¡áá¯á¶ážááŒá¯á ááŒááºáááºáááºááŸááºáááºá¡áá¯á¶ážááŒá¯ááá·áº á¡áá¯ááºááá¯ážáá±á¬áááºááºááᯠáááááŒá¯áá«á (áá¬ááŒá±á¬áá·áºááŸááºážááá)á
á.áá ááááºááá¯áááºááŒááºážá
Python script áááááºááẠá€áá²á·ááá¯á·ááŒá áºááẠ(áááºááŸá¯ááá¯ááºá á±áááºá¡ááœáẠá¡ááœááºááŒá¯áá¯ááºáá¬ážáááº-
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 byte ááẠread value ááᯠáááŒá±á¬ááºážáá²áá«á ááá¯á·áá±á¬áºá ááœááºáá»ááºááŸá¯áá¯ááºáááºážá ááºáá áºáá¯áá¯á¶áž (8192 bytes) ááẠ0,1478 á áá¹ááá·áºááŒá¬ááẠ(áááºážááá¯áááºáááºááá·áºá¡áá»áááºááá¯ááºážááœáẠá¡áááºážáááºááœá²ááœá²ááŸá¯áá»á¬ážááŸáá·áºá¡áá°) ááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº 18,04 ÎŒs per 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
áááºážááẠááá¯ááºáááá¯á áá¹ááá·áºááŸá±á¬áá·áºááŸá±ážááŸá¯ááá¯ááºážá¡ááœáẠá¡ááŸáá¯ááºáá¯á¶áž áá áá¯ááŒá áºáááºá flash drive áá áºáá¯á 10 bytes á¡á¬ážáá¯á¶ážááᯠá áœáá·áºáá áºáááºá¡ááœáẠá á¯á á¯áá±á«ááºážáááºáááºáá»áááºááẠ8192 áá¬áá®ááŒá áºáááºá
á.áá Flash binary ááŒááºáááºáááºáá±á¬ááºááŸá¯
á¡áá»áááºááœá±áááºááŸá¯á¡á¬ážáá¯á¶ážááᯠááá·áºááœááºážá ááºážá á¬ážááŒá®áž 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
ááŒáá·áºááᬠá¡áá±á¬áºáá±ážááᯠááŒá áºááá¯ááºáááºá
á.áá áááºáá¶áá«ááºáá¯áẠááá¯ááŸá±á¬ááºááŸá¯ááááºá á¬ááᯠááŸá¬ááœá±ááŒááºážá
ááᯠáá»áœááºá¯ááºááá¯á·ááá¯á¡ááºááá·áºá¡áá»áááºáá»á¬ážááœáẠchecksum ááá¯áááºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá·áºá¡áá»áááºááœáẠááŒá±á¬ááºážáá²ááœá¬ážáááºááᯠá¡ááœááºááá°á á áºáá±ážááá¯ááºáááº-
- ááŸá¬ážááœááºážáá±á¬ PIN áá¯ááºááᯠááá¯ááºááá·áºáá«á
- pin code ááá¯ááŒá±á¬ááºážáá«á
ááááŠážá áœá¬á á¡áá®ážá ááºáá¯á¶áž ááá¯ááŸá±á¬ááºááŸá¯ááááºá á¬ááᯠááŸá¬ááœá±áááºá ááŒááºáááºá áááºááŒá®ážáá±á¬áẠ10 ms á¡ááá¯ážá¡áá»áŸá±á¬á·ááŒáá·áº checksum dump ááá¯áá°áá²á·áááºá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááẠáááºáá¶áá«ááºááŸá¬ážááá¯ááºááá·áºááá¯ááºááŒá®áž á¡áá¬ážáá°áá¯ááºáá²á·áááºá
á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá áœá¬ááŸááá±á¬ááŒá±á¬áá·áº ááááºááẠá¡ááœááºáá¬áá¬áá«áááºá ááá¯á·áá±á¬áº áá±á¬ááºáá¯á¶ážááœáẠchecksum ááẠááŒáá·áºááŒá¬ááŸá¯ 120000 µs ááŸáá·áº 140000 µs á¡ááŒá¬áž áá áºáá±áá¬áá¬ááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážááŒá±á¬ááºáž áá»áœááºá¯ááºáá¯á¶ážááŒááºááá¯ááºáá²á·áááºá áá«áá±ááá·áº á¡á²áá®ááŸá¬ áá»áœááºáá±á¬áºááŒáá¬ážáá²á· âáááºáá¯ááºâ áᬠáá¯á¶ážá ááŸá¬ážááœááºážáá±áá«ááẠ- 0 ááᯠááŒááºááœá¬ážáá²á·á¡áá« áá°ážáááºážáá²á·á¡áá¬ááœá±ááᯠáá¯ááºáá±á¬ááºáá±ážáá²á· ááŸá±á¬áá·áºááŸá±ážááá¯ááºáááá¯á áá¹ááá·áºáá¯ááºáá¯á¶ážáá¯ááºáááºážáá²á· ááŸá±ážáá±á¬ááºážáá á¹á ááºážáá áºáá¯ááŒá±á¬áá·áºáá«á
ááá¯á·áá±á¬ááºá 3 áá¬áá®áá®ážáá«ážááŒá¬ááŒá®ážáá±á¬ááºá SROM á áá áºáá±á«áºááá¯ááŸá¯ CheckSum ááẠchecksum á¡ááœááºáá¯ááºááœááºá¡áá±á¡ááœááºááá¯áááºááŸááºáá±ážááá·áºááá·áºááœááºážááŸá¯á¡ááŒá áºá¡ááŒááºážá¡áá¯á¶áá áºáá¯ááá¯áááºáá¶áááŸáááŒá±á¬ááºážáááááááááºá á¡á²áá«á áá»áœááºá¯ááºááá¯á·ááẠ64-byte ááááºááá¯á·ááŒááºážá¡áá áááá»ááŸá¯ááŒáá·áº PIN áá¯ááºá ááá¯ááŸá±á¬ááºááŸá¯ááááºá á¬ááŸáá·áº "ááŸá¬ážááœááºážáá±á¬ááŒáá¯ážáááºážááŸá¯áá»á¬áž" áááºááŒááºááᯠá¡ááœááºááá° á¡ááœááºááá° ááŒá±á¬ááºážáá²ááá¯ááºáááºá
áá»áœááºá¯ááºá áááŠážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááẠá¡á±á¬ááºáá«ááááºááᯠááŒá áºáá±á«áºá á±áááº-
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááẠ"123456" á០"1234567" ááá¯á· ááŒá±á¬ááºážááŒá®áž áááŸááá«áááº-
ááá¯á·ááŒá±á¬áá·áºá áááºáá¶áá«ááºáá¯ááºááŸáá·áº ááŸá¬ážááœááºážáá±á¬ááŒáá¯ážáááºážááŸá¯áá±á¬ááºáá¬ááᯠááááºááá¯á·á¡ááŸáẠ126 ááœáẠááááºážáááºážáá¬ážáá¯á¶ááááºá
á.á á á¡ááŸáá¯ááºáá¯á¶ááŒá®áž á¡ááŸáẠááá ááᯠáá°ááŒááºážá
ááááºááá¯á·ááŒááºáž #126 ááẠ125x64x18 = 144000ÎŒs áááºážáá»ááºá checksum ááœááºáá»ááºááŸá¯á áááºáá»áááºááŸá áá»áœááºá¯ááºáá¡ááŸáá¯ááºáá¯á¶ááŒá®ážáá áºáá¯áá¯á¶ážááœáẠáááºááŸááá±ááá·áºááŒá®áž áááºážááẠá¡ááœááºáá¯á¶ááŒááºááœááºáá±á¬ááºážááŸáááºá ááá¯á·áá±á¬ááºá áááŸááºáááºáá±á¬á¡ááŸáá¯ááºá¡áá»á¬ážá¡ááŒá¬ážááᯠááá¯ááºááá¯áẠáááºááŸá¬ážááŒá®ážáá±á¬áẠ(âá¡áá»áááºááá¯ááºááœá±áááºááŸá¯â áá»á¬ážá á¯áá¯á¶áá±ááŒááºážááŒá±á¬áá·áº)á á€ááá¯ááºáá»á¬ážááᯠáá»áœááºáá±á¬áºáááŸáááœá¬ážááẠ(145527 ÎŒs á latency ááœááº)á
áááºáá¶áá«ááºáá¯ááºááᯠáá¯ááºááá¬ážáá±á¬áá¯á¶á á¶ááŒáá·áº ááááºážáááºážáá¬ážááŒá±á¬ááºáž áááá¬áá«áááºá á€áááºááá¯ážáá»á¬ážááᯠASCII áá¯ááºáá»á¬ážááœáẠáá±ážáá¬ážááŒááºážáááŸááá±á¬áºáááºážá áááºážááá¯á·ááẠcapacitive keyboard ááŸáááŸááá±á¬ áááºááŸá¯ááŸá¯áá»á¬ážááᯠáááºáááºá á±áááºá
áá±á¬ááºáá¯á¶ážááœááºá ááá±á¬ááºážáá±á¬ááŒáá¯ážá á¬ážááŸá¯áá±á¬ááºáá¬á¡á¬áž ááááºážáááºážáá¬ážááá·áºáá±áá¬ááœáẠááŸá¬ááœá±ááẠáá±á¬ááºáááºá á áºáá±ážááŸá¯á¡áá»áá¯á·ááᯠáá»áœááºá¯ááºáá¯ááºáá±á¬ááºáá²á·áááºá á€áááºááŸá¬ ááááºááŒá áºáááº-
0xFF - ááá¯áááºááŸá¬ "15 ááŒáááºááŒáá¯ážá á¬ážááŸá¯" ááŸáá·áº áá¡á±á¬ááºááŒááºáá±á¬ááŒáá¯ážá á¬ážááŸá¯ááá¯ááºážááœáẠáá»á±á¬á·áááºážááœá¬ážáá«áááºá
á.áá áááºáá¶áá«ááºáá¯áẠááŒááºáááºááá°ááŒááºážá
á€á¡áá¬ááẠá¡áááºáá±á¬áºááŒáá«ááá¯á·ááᯠáá±á«ááºážá ááºáá¬ážáá±á¬ áá»áœááºá¯ááºááá¯ááºááá¯ážáá±á¬áá¯ááºááŒá áºáááº-
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. áá±á¬ááºáá áºáá¯á áá¬áá²á
ááá¯á·ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·á Aigo drive áá¡ááŒá±á¡áá±ááœáẠPSoC áááºá០á¡áá»ááºážáá»á¯ááºááŒáá·áºááŒáá«á áá¯á·á
- áá¬ááœááºáá¬ážáá±á¬áºáááºáž SRAM ááá¯áááºááá¯ááºáááºá
- cold boot trace attack áá¯á¶ážááŒá®áž PIN áá¯ááºááᯠááá¯ááºááá¯ááºáááºááŒááºážááŒáá·áº ááá·áºáá»ááºááœááºááœá²ááŒááºáž á¡áá¬á¡ááœááºááᯠáá»áœááºá¯ááºááá¯á· áá»á±á¬áºááŒááºááá¯ááºáá«áááºá
ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºááŸá¯ááẠáááºáá°ááŒá¯ááŒááºážááŒá¿áá¬áá»á¬ážááŒá±á¬áá·áº áá»áá¯á·ááœááºážáá»ááºá¡áá»áá¯á·ááŸááááºá áááºážááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž ááŒáŸáá·áºáááºááá¯ááºáá«áááºá
- âcold boot traceâ ááá¯ááºááá¯ááºááŸá¯áááááºá¡ááŒá áºáááŸááá±á¬ output data ááá¯ááŸááºáááºá áœá¬áá¯ááºáá¯ááºááẠutility áá áºáá¯ááá¯áá±ážáá«á
- ááá¯ááá¯áááá»áá±á¬á¡áá»áááºááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážáááºáá®ážááẠFPGA gadget ááá¯á¡áá¯á¶ážááŒá¯áá« (ááá¯á·ááá¯áẠArduino hardware timers ááá¯áá¯á¶ážáá«);
- á¡ááŒá¬ážááá¯ááºááá¯ááºááŸá¯ááᯠááŒáá¯ážá á¬ážááŒáá·áºáá«- ááŸáá¯ááºážááŸááºáááºá¡ááœáẠááŸááºáááºáá±á¬ PIN áá¯ááºááᯠRAM ááœáẠááááºážáááºážáááºáᯠáá»áŸá±á¬áºááá·áºáᬠááááºááᬠááŸá¬ážááœááºážáá±áá±á¬ PIN áá¯ááºááᯠááá¯ááºááá·áºáá«á ááŒááºáááºá áááºááŒá®áž RAM ááᯠá áœáá·áºáá áºáá«á ááá¯á·áá±á¬áº Arduino á¡áá»ááºááŒááŸá¯á¡ááá·áºááẠ5 ááá¯á·ááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á·á á áºáá±ážáá±ááá·áºáá¯ááºá¡ááœá²á·ááœáẠ3,3 ááá¯á·á¡áá»ááºááŒááŸá¯áá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáá±áá±á¬ááŒá±á¬áá·áº áááºážááẠArduino ááœááºááŒá¯áá¯ááºáááºá¡ááœááºááœááºáá°áá«áááºá
á ááºážáá¯á¶ážááŒáá·áºááá¯ááºááá·áº á áááºáááºá á¬ážá áá¬áá áºáá¯ááŸá¬ áááºááŸá¯ááŸá¯áá¬ááœááºáá±ážááᯠáá»á±á¬áºááŒááºááẠááá¯á·á¡á¬ážá¡ááá·áºááŒáá·áº áá á¬ážááŒááºážááŒá áºáááºá á¡áááºá á€áááºážáááºážááẠá¡áá¯ááºááŒá áºáá«áá áá»áœááºá¯ááºááá¯á·ááẠáááá»áá±á¬á¡áá»áááºááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááŒáá·áº checksum ááá¯áááºááŒááºážá¡á á¬áž flash drive ááŸáá¯á¶ážááááá»áá±á¬áá±áá¬ááá¯áááá¯ááºáááºááŒá áºáááºá
SROM ááẠReadBlock á
áá
áºáá±á«áºááá¯ááŸá¯ááŸáá
áºááá·áº guard bits ááá¯áááºááá¯ááºáá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬ážáá°áá¯ááºáá±á¬ááºááá¯ááºáááº
áá¯ááºáá±á¬ááºááá¯ááºááá·áº áá±á¬ááºáááºáá»á±á¬áºá áá¬áá±á¬ááºážááá·áºá¡áá¬ááŸá¬ áá»á áºááºááŒá¬ážá០á¡ááŸá¯ááᯠááŒáááºáá»á±ááŒááºážááŒá áºáááº- SRAM á¡ááŸáá¯ááºáá¯á¶ážááᯠáá°áááºá á á¬ááœááºá á¬áááºážáááŸááá±á¬ á áá áºáá±á«áºááá¯ááŸá¯áá»á¬ážááŸáá·áº á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠáá±á¬áºáá¯ááºáááºááŒá áºáááºá
áá áááá¯á¶áž
ááá¯á·ááŒá±á¬áá·áºá á€áááá¯ááºááºáá¡áá¬á¡ááœááºááẠááá¯áá»ááºá áá¬áá»á¬ážá áœá¬áá»ááºáá±á¬á·áááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááºážááẠáááºáá¶áá«ááºáá¯ááºááá¯ááááºážáááºážááẠáá¯á¶ááŸáẠ(âáá¬áá»á±á¬áá±á¬â) ááá¯ááºáááá¯ááœááºáááá¯áá¬ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áºááŒá áºáááº... ááá¯á·á¡ááŒááºá áá±áá¬áá»á¬ážáááºáá²á·ááá¯á·ááŒá áºáá±áááºááᯠáá»áœááºá¯áẠ(áááŒáá·áºáá«) áá±ážáá«á á€á ááºáá á¹á ááºážáá±á«áºááœáẠáá¯ááºááŸááºááŒááºáž
Aigo á¡ááœáẠáá¬á¡ááŒá¶ááŒá¯ááá¯ááºááá²á áá¯ááºááŸááºáá¬ážáá±á¬ HDD drive áá±á¬áºáááºá¡áá»áá¯á·ááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒá®ážáá±á¬ááºá 2015 ááœáẠáá»áœááºáá±á¬áºáá¯ááºáá²á·áááºá
ááááºá¹áááœá± ááŸá áºáááºáá²á· ááá±áá»á¬ážá áœá¬ áá®áá¯áá±ááááᯠáá¯ááºáá²á·áááºá á á¯á á¯áá±á«ááºáž áá¬áá® áá ááá·áºá á¡á á០(áá áºááá¯ááœáá·áºáá±á¬á¡áá«) ááŸá¡áá¯á¶ážá¡áá (PIN code dump) ááá¯áá±ááœááºáá«á áá°áá®áá±á¬ áá¬áá® áá ááœáẠáá»áœááºá¯ááºááẠá€áá±á¬ááºážáá«ážááᯠáá±ážáá¬ážáá²á·áá±á¬ á¡áá»áááºáááºáž áá«áááºáááºá á¡áááºážá áááºááŸá¯ááºááŸá¬ážá áá¬áá±á¬ááºážáá²á· ááá®ážá ááºááŒá áºáá²á·áá«áááºá
source: www.habr.com