2ページまたは複数ページのPIC18保護の脆弱性を与える

この記事はハッカーへのガイドではなく、MICROCHIPが提供するツールを適切に使用してチップ内のファームウェアを保護する方法のヒントです。





何年前のことか覚えていませんが、「暗闇の心-ミロッシュ・メリアックによる隠されたilassセキュリティの未知の裏水を探る」という記事に出くわしました。この記事の本質は、iCLASSカードのセキュリティ問題にあります。一般的に、私は「コピー保護?あなたは私をからかっています!」という記事に出くわすまで、すぐに記事を読みました。そして、私は「喜びでねじれた」...しかし、それはどのようなものでしょうか!!!?





申し訳ありませんが、明確なことは何もありません。ここで説明します。





当時、どのPICが手元にあったかは覚えていませんが、現在はPIC18F26K20があります。





脆弱性の本質。

PICKITを起動し、途中でPIC18F * K *プログラミングデータシートを開きます。





ほら、EEPROM保護ビットは緑、BOOTブロック保護ビットは赤、コード保護ビットは青、ブロック0〜3です。





CPB / WRTB、CP [3:0] / WRT [3:0]-コードの読み取り/書き込みからの保護。最初にBOOTを実行し、次に0〜3でブロックします。





CPD/WRTD - / EEP .





: EBTRB/EBTR[3:0] - .





"" ( ):





, - !





:





! !





.





, :





, - " 1 0, , 1 . . 1". , !





BOOT , , EUSART.





, BOOT , " ", 0, , NOP', " ". :





HEX , ! .





, EEP. :





. .





, . :





: 0x3F8F, BOOT: 0x0084, Block0: 0x0180.





?





PICKIT3 ( " " , ):





. Microchip (PICkit3 Programmer Application v3.10).





... , , , PIC KIT Programmer...





( )... !!! !!! ?





PK2DeviceFile.dat





, , PK2DeviceFile.dat (pickit2-editor, "" ).





PicKit2 Editor :





, , (0x3F8F -> 0x0084).





0x3F 0x00, 0x8F 0x84. ERASE, PicKit Programmer , BOOT .





, .





, EUSART , EUASRT, RS232->USB ( . ). :





, 18- ( , ):





. :





data_reader.c
#include "pic18fregs.h"

/* CONFIG1L */
        #pragma config FOSC     = INTIO67
        #pragma config FCMEN    = OFF
        #pragma config IESO     = OFF
/* CONFIG2L */
        #pragma config PWRT     = OFF
        #pragma config BOREN    = NOSLP
        #pragma config BORV     = 18
/* CONFIG2H */
        #pragma config WDTEN      = ON
        #pragma config WDTPS    = 128
/* CONFIG3H */
          #pragma config CCP2MX   = PORTC
        #pragma config PBADEN   = OFF
        #pragma config LPT1OSC  = OFF
        #pragma config HFOFST   = OFF
        #pragma config MCLRE    = OFF
/* CONFIG4L */
        #pragma config STVREN   = ON
        #pragma config LVP      = OFF
        #pragma config XINST    = OFF
        #pragma config DEBUG    = OFF
/* CONFIG5L */
        #pragma config CP0      = ON
        #pragma config CP1      = ON
        #pragma config CP2      = ON
        #pragma config CP3      = ON
/* CONFIG5H */
        #pragma config CPB      = ON
        #pragma config CPD      = OFF
/* CONFIG6L */
        #pragma config WRT0     = OFF
        #pragma config WRT1     = OFF
        #pragma config WRT2     = OFF
        #pragma config WRT3     = OFF
/* CONFIG6H */
        #pragma config WRTD     = OFF
        #pragma config WRTB     = OFF
        #pragma config WRTC     = OFF
/* CONFIG7L */
        #pragma config EBTR0    = OFF
        #pragma config EBTR1    = OFF
        #pragma config EBTR2    = OFF
        #pragma config EBTR3    = OFF
/* CONFIG7H */
        #pragma config EBTRB    = OFF

typedef __code unsigned char *CODEPTR;

void main()
{
    unsigned int uaddr = 0;
    CODEPTR c;
    TRISA = 0;
    TRISB = 0;
    TRISC = 0;
  /* Set Default State of OSC */
  OSCCON = 0b00110000;
  PIR2 = PIE2 = OSCTUNE = 0;
  IPR2 = 0xFF;

    /* Disable IRQs */
    INTCONbits.GIE = 0;

    /* enable EUSART */
    RCSTAbits.SPEN = 1;
    /* baud rate to 2400 Baud */
    SPBRG = 25;
    /* enable TX + only HI byte divisor */
    TXSTA = 0b00100100;

    c = 0x0;
    do
    {
        TXREG = *c++;
        while (!TXSTAbits.TRMT);
        ClrWdt();
    } while (c != (CODEPTR)0x10000);

    while (1)
  {
    /* Recharge WDT */
        ClrWdt();
  }
}

      
      







:





data_reader.hex

:020000040000FA :10000000926A936A946A300ED36E9B6AA06AA16A60 :10001000FF0EA26EF29EAB8E190EAF6E240EAC6E6A :10002000006A016A026A00C0F6FF01C0F7FF02C061 :10003000F8FF0900F5CFADFF002A02E3014A022ACA :10004000ACA2FED70400005005E1015003E10250CC :0C005000010A01E0E8D70400FED712000E :020000040030CA :03000100081D0FC8 :02000500018177 :0600080000C00FE00F40F4 :00000001FF





:





.









. .





:

  1. EBTRB/EBTR[3:0] - .





  2. PIC18 .





:

  1. EBTRB/EBTR[3:0] - , " " .





, - , ! .





.





.












All Articles