Cómo bloquear ATMEGA328p-au para deshabilitar la lectura de croquis

0
  1. ¿Cómo bloquear ATMEGA328p-au para deshabilitar la lectura de bocetos del IDE de Arduino?
  2. ¿También hay una forma de hardware?
  3. ¿Cuáles son las posibilidades de que pueda salir mal?
  4. ¿Qué pasará si sale mal?

Aviso: soy un experto en informática y soy nuevo en electrónica. Entonces, por favor explique su respuesta en detalle :-)

---- Más información ----

El chip en consideración es un nuevo producto comercial.

Se otorga a las personas, que cuentan con personal altamente técnico en la parte de atrás, durante unos días, para algunos propósitos de evaluación de oportunidades de negocios.

    
pregunta JV.

4 respuestas

2

Aquí está mi consejo personal. Tenga en cuenta que no soy un verdadero experto en este tipo de cosas (especialmente en Atmel), así que perdóneme por cualquier error. La mayor parte del conocimiento aquí proviene de this y esto publicaciones.

Puede acceder a la memoria flash (y así leer el binario) desde el exterior (con un programador ISP) o desde el interior (con algún código).

En cuanto a los "ataques" externos , la atmósfera tiene algunos bits de fusible (lea esta respuesta para obtener más información). En particular, los de protección de bits de bloqueo pueden impedir que cualquiera lea y escriba el flash y el eeprom. Simplemente programe ambos, LB1 y LB2 (IMPORTANTE: la nota en la hoja de datos dice "Programe los bits de fusible y los bits de bloqueo de arranque antes de programar el LB1 y LB2"). Desde el momento en que los programes, nadie (ni siquiera tú) podrá leer o escribir un nuevo programa en el microcontrolador; La única forma de escribirlo de nuevo es realizar una rutina de borrado de chip, que destruye el programa en la unidad de usuario.

En cuanto a los "ataques" internos , incluso con esta protección, un cargador de arranque interno tiene acceso a los contenidos flash. No puede evitar que los programas lean la memoria, ya que al menos una vez necesita leer lo que se escribió (también los bits de bloqueo le permiten restringir la escritura o la lectura y la lectura, pero no solo la lectura). Por esta razón no hay forma de prevenirlo en hardware. Puede modificar el cargador de arranque para rechazar las solicitudes de lectura, y luego programar BLB10 para evitar volver a ejecutar un cargador de arranque. Pero, al final, ¿este producto realmente necesita un gestor de arranque? ¿Realmente crees que necesitarás pedirles a tus clientes que los reprogramen? Y si la respuesta es sí, ¿cómo protegerá los archivos binarios que enviará para que se programen? De todos modos, creo que hay una alta probabilidad de que en tu aplicación puedas eliminar el gestor de arranque y estar más seguro.

EN CUALQUIER CASO:

Según mi experiencia, nadie intentará "robar" tu trabajo, porque el 50% de las veces es más fácil volver a escribirlo desde cero porque es simple (y desensamblar tu código será mucho más difícil que reescribirlo) , y el 50% de las veces es más fácil volver a escribirlo desde cero porque es complicado (y desarmarlo será un PITA y tomará mucho tiempo, por lo que es mejor comenzar de nuevo desde cero). ¿Alguna vez has tratado de leer el código escrito por otra persona? Bueno, ahora aumenta esa dificultad en 1000x porque se genera automáticamente, y ...

Ok, ¿no me crees? Escribí un programa para arduino, compilé y luego desarmé el binario (siguiendo el procedimiento aquí ). ¿Puedes entender lo que hace?

Disassembly of section .sec1:

00000000 <.sec1>:
   0:   0c 94 5c 00     jmp 0xb8    ;  0xb8
   4:   0c 94 6e 00     jmp 0xdc    ;  0xdc
   8:   0c 94 6e 00     jmp 0xdc    ;  0xdc
   c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  10:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  14:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  18:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  1c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  20:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  24:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  28:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  2c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  30:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  34:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  38:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  3c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  40:   0c 94 15 01     jmp 0x22a   ;  0x22a
  44:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  48:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  4c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  50:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  54:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  58:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  5c:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  60:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  64:   0c 94 6e 00     jmp 0xdc    ;  0xdc
  68:   00 00           nop
  6a:   00 00           nop
  6c:   24 00           .word   0x0024  ; ????
  6e:   27 00           .word   0x0027  ; ????
  70:   2a 00           .word   0x002a  ; ????
  72:   00 00           nop
  74:   00 00           nop
  76:   25 00           .word   0x0025  ; ????
  78:   28 00           .word   0x0028  ; ????
  7a:   2b 00           .word   0x002b  ; ????
  7c:   04 04           cpc r0, r4
  7e:   04 04           cpc r0, r4
  80:   04 04           cpc r0, r4
  82:   04 04           cpc r0, r4
  84:   02 02           muls    r16, r18
  86:   02 02           muls    r16, r18
  88:   02 02           muls    r16, r18
  8a:   03 03           mulsu   r16, r19
  8c:   03 03           mulsu   r16, r19
  8e:   03 03           mulsu   r16, r19
  90:   01 02           muls    r16, r17
  92:   04 08           sbc r0, r4
  94:   10 20           and r1, r0
  96:   40 80           ld  r4, Z
  98:   01 02           muls    r16, r17
  9a:   04 08           sbc r0, r4
  9c:   10 20           and r1, r0
  9e:   01 02           muls    r16, r17
  a0:   04 08           sbc r0, r4
  a2:   10 20           and r1, r0
  a4:   00 00           nop
  a6:   00 08           sbc r0, r0
  a8:   00 02           muls    r16, r16
  aa:   01 00           .word   0x0001  ; ????
  ac:   00 03           mulsu   r16, r16
  ae:   04 07           cpc r16, r20
    ...
  b8:   11 24           eor r1, r1
  ba:   1f be           out 0x3f, r1    ; 63
  bc:   cf ef           ldi r28, 0xFF   ; 255
  be:   d8 e0           ldi r29, 0x08   ; 8
  c0:   de bf           out 0x3e, r29   ; 62
  c2:   cd bf           out 0x3d, r28   ; 61
  c4:   21 e0           ldi r18, 0x01   ; 1
  c6:   a0 e0           ldi r26, 0x00   ; 0
  c8:   b1 e0           ldi r27, 0x01   ; 1
  ca:   01 c0           rjmp    .+2         ;  0xce
  cc:   1d 92           st  X+, r1
  ce:   a9 30           cpi r26, 0x09   ; 9
  d0:   b2 07           cpc r27, r18
  d2:   e1 f7           brne    .-8         ;  0xcc
  d4:   0e 94 5f 01     call    0x2be   ;  0x2be
  d8:   0c 94 ce 01     jmp 0x39c   ;  0x39c
  dc:   0c 94 00 00     jmp 0   ;  0x0
  e0:   e1 eb           ldi r30, 0xB1   ; 177
  e2:   f0 e0           ldi r31, 0x00   ; 0
  e4:   24 91           lpm r18, Z
  e6:   ed e9           ldi r30, 0x9D   ; 157
  e8:   f0 e0           ldi r31, 0x00   ; 0
  ea:   94 91           lpm r25, Z
  ec:   e9 e8           ldi r30, 0x89   ; 137
  ee:   f0 e0           ldi r31, 0x00   ; 0
  f0:   e4 91           lpm r30, Z
  f2:   ee 23           and r30, r30
  f4:   09 f4           brne    .+2         ;  0xf8
  f6:   3b c0           rjmp    .+118       ;  0x16e
  f8:   22 23           and r18, r18
  fa:   39 f1           breq    .+78        ;  0x14a
  fc:   23 30           cpi r18, 0x03   ; 3
  fe:   91 f0           breq    .+36        ;  0x124
 100:   38 f4           brcc    .+14        ;  0x110
 102:   21 30           cpi r18, 0x01   ; 1
 104:   a9 f0           breq    .+42        ;  0x130
 106:   22 30           cpi r18, 0x02   ; 2
 108:   01 f5           brne    .+64        ;  0x14a
 10a:   24 b5           in  r18, 0x24   ; 36
 10c:   2f 7d           andi    r18, 0xDF   ; 223
 10e:   12 c0           rjmp    .+36        ;  0x134
 110:   27 30           cpi r18, 0x07   ; 7
 112:   91 f0           breq    .+36        ;  0x138
 114:   28 30           cpi r18, 0x08   ; 8
 116:   a1 f0           breq    .+40        ;  0x140
 118:   24 30           cpi r18, 0x04   ; 4
 11a:   b9 f4           brne    .+46        ;  0x14a
 11c:   20 91 80 00     lds r18, 0x0080 ;  0x800080
 120:   2f 7d           andi    r18, 0xDF   ; 223
 122:   03 c0           rjmp    .+6         ;  0x12a
 124:   20 91 80 00     lds r18, 0x0080 ;  0x800080
 128:   2f 77           andi    r18, 0x7F   ; 127
 12a:   20 93 80 00     sts 0x0080, r18 ;  0x800080
 12e:   0d c0           rjmp    .+26        ;  0x14a
 130:   24 b5           in  r18, 0x24   ; 36
 132:   2f 77           andi    r18, 0x7F   ; 127
 134:   24 bd           out 0x24, r18   ; 36
 136:   09 c0           rjmp    .+18        ;  0x14a
 138:   20 91 b0 00     lds r18, 0x00B0 ;  0x8000b0
 13c:   2f 77           andi    r18, 0x7F   ; 127
 13e:   03 c0           rjmp    .+6         ;  0x146
 140:   20 91 b0 00     lds r18, 0x00B0 ;  0x8000b0
 144:   2f 7d           andi    r18, 0xDF   ; 223
 146:   20 93 b0 00     sts 0x00B0, r18 ;  0x8000b0
 14a:   f0 e0           ldi r31, 0x00   ; 0
 14c:   ee 0f           add r30, r30
 14e:   ff 1f           adc r31, r31
 150:   ee 58           subi    r30, 0x8E   ; 142
 152:   ff 4f           sbci    r31, 0xFF   ; 255
 154:   a5 91           lpm r26, Z+
 156:   b4 91           lpm r27, Z
 158:   2f b7           in  r18, 0x3f   ; 63
 15a:   f8 94           cli
 15c:   ec 91           ld  r30, X
 15e:   81 11           cpse    r24, r1
 160:   03 c0           rjmp    .+6         ;  0x168
 162:   90 95           com r25
 164:   9e 23           and r25, r30
 166:   01 c0           rjmp    .+2         ;  0x16a
 168:   9e 2b           or  r25, r30
 16a:   9c 93           st  X, r25
 16c:   2f bf           out 0x3f, r18   ; 63
 16e:   08 95           ret
 170:   3f b7           in  r19, 0x3f   ; 63
 172:   f8 94           cli
 174:   80 91 05 01     lds r24, 0x0105 ;  0x800105
 178:   90 91 06 01     lds r25, 0x0106 ;  0x800106
 17c:   a0 91 07 01     lds r26, 0x0107 ;  0x800107
 180:   b0 91 08 01     lds r27, 0x0108 ;  0x800108
 184:   26 b5           in  r18, 0x26   ; 38
 186:   a8 9b           sbis    0x15, 0 ; 21
 188:   05 c0           rjmp    .+10        ;  0x194
 18a:   2f 3f           cpi r18, 0xFF   ; 255
 18c:   19 f0           breq    .+6         ;  0x194
 18e:   01 96           adiw    r24, 0x01   ; 1
 190:   a1 1d           adc r26, r1
 192:   b1 1d           adc r27, r1
 194:   3f bf           out 0x3f, r19   ; 63
 196:   ba 2f           mov r27, r26
 198:   a9 2f           mov r26, r25
 19a:   98 2f           mov r25, r24
 19c:   88 27           eor r24, r24
 19e:   82 0f           add r24, r18
 1a0:   91 1d           adc r25, r1
 1a2:   a1 1d           adc r26, r1
 1a4:   b1 1d           adc r27, r1
 1a6:   bc 01           movw    r22, r24
 1a8:   cd 01           movw    r24, r26
 1aa:   42 e0           ldi r20, 0x02   ; 2
 1ac:   66 0f           add r22, r22
 1ae:   77 1f           adc r23, r23
 1b0:   88 1f           adc r24, r24
 1b2:   99 1f           adc r25, r25
 1b4:   4a 95           dec r20
 1b6:   d1 f7           brne    .-12        ;  0x1ac
 1b8:   08 95           ret
 1ba:   8f 92           push    r8
 1bc:   9f 92           push    r9
 1be:   af 92           push    r10
 1c0:   bf 92           push    r11
 1c2:   cf 92           push    r12
 1c4:   df 92           push    r13
 1c6:   ef 92           push    r14
 1c8:   ff 92           push    r15
 1ca:   0e 94 b8 00     call    0x170   ;  0x170
 1ce:   4b 01           movw    r8, r22
 1d0:   5c 01           movw    r10, r24
 1d2:   88 ee           ldi r24, 0xE8   ; 232
 1d4:   c8 2e           mov r12, r24
 1d6:   83 e0           ldi r24, 0x03   ; 3
 1d8:   d8 2e           mov r13, r24
 1da:   e1 2c           mov r14, r1
 1dc:   f1 2c           mov r15, r1
 1de:   0e 94 b8 00     call    0x170   ;  0x170
 1e2:   dc 01           movw    r26, r24
 1e4:   cb 01           movw    r24, r22
 1e6:   88 19           sub r24, r8
 1e8:   99 09           sbc r25, r9
 1ea:   aa 09           sbc r26, r10
 1ec:   bb 09           sbc r27, r11
 1ee:   88 3e           cpi r24, 0xE8   ; 232
 1f0:   93 40           sbci    r25, 0x03   ; 3
 1f2:   a1 05           cpc r26, r1
 1f4:   b1 05           cpc r27, r1
 1f6:   58 f0           brcs    .+22        ;  0x20e
 1f8:   21 e0           ldi r18, 0x01   ; 1
 1fa:   c2 1a           sub r12, r18
 1fc:   d1 08           sbc r13, r1
 1fe:   e1 08           sbc r14, r1
 200:   f1 08           sbc r15, r1
 202:   88 ee           ldi r24, 0xE8   ; 232
 204:   88 0e           add r8, r24
 206:   83 e0           ldi r24, 0x03   ; 3
 208:   98 1e           adc r9, r24
 20a:   a1 1c           adc r10, r1
 20c:   b1 1c           adc r11, r1
 20e:   c1 14           cp  r12, r1
 210:   d1 04           cpc r13, r1
 212:   e1 04           cpc r14, r1
 214:   f1 04           cpc r15, r1
 216:   19 f7           brne    .-58        ;  0x1de
 218:   ff 90           pop r15
 21a:   ef 90           pop r14
 21c:   df 90           pop r13
 21e:   cf 90           pop r12
 220:   bf 90           pop r11
 222:   af 90           pop r10
 224:   9f 90           pop r9
 226:   8f 90           pop r8
 228:   08 95           ret
 22a:   1f 92           push    r1
 22c:   0f 92           push    r0
 22e:   0f b6           in  r0, 0x3f    ; 63
 230:   0f 92           push    r0
 232:   11 24           eor r1, r1
 234:   2f 93           push    r18
 236:   3f 93           push    r19
 238:   8f 93           push    r24
 23a:   9f 93           push    r25
 23c:   af 93           push    r26
 23e:   bf 93           push    r27
 240:   80 91 01 01     lds r24, 0x0101 ;  0x800101
 244:   90 91 02 01     lds r25, 0x0102 ;  0x800102
 248:   a0 91 03 01     lds r26, 0x0103 ;  0x800103
 24c:   b0 91 04 01     lds r27, 0x0104 ;  0x800104
 250:   30 91 00 01     lds r19, 0x0100 ;  0x800100
 254:   23 e0           ldi r18, 0x03   ; 3
 256:   23 0f           add r18, r19
 258:   2d 37           cpi r18, 0x7D   ; 125
 25a:   20 f4           brcc    .+8         ;  0x264
 25c:   01 96           adiw    r24, 0x01   ; 1
 25e:   a1 1d           adc r26, r1
 260:   b1 1d           adc r27, r1
 262:   05 c0           rjmp    .+10        ;  0x26e
 264:   26 e8           ldi r18, 0x86   ; 134
 266:   23 0f           add r18, r19
 268:   02 96           adiw    r24, 0x02   ; 2
 26a:   a1 1d           adc r26, r1
 26c:   b1 1d           adc r27, r1
 26e:   20 93 00 01     sts 0x0100, r18 ;  0x800100
 272:   80 93 01 01     sts 0x0101, r24 ;  0x800101
 276:   90 93 02 01     sts 0x0102, r25 ;  0x800102
 27a:   a0 93 03 01     sts 0x0103, r26 ;  0x800103
 27e:   b0 93 04 01     sts 0x0104, r27 ;  0x800104
 282:   80 91 05 01     lds r24, 0x0105 ;  0x800105
 286:   90 91 06 01     lds r25, 0x0106 ;  0x800106
 28a:   a0 91 07 01     lds r26, 0x0107 ;  0x800107
 28e:   b0 91 08 01     lds r27, 0x0108 ;  0x800108
 292:   01 96           adiw    r24, 0x01   ; 1
 294:   a1 1d           adc r26, r1
 296:   b1 1d           adc r27, r1
 298:   80 93 05 01     sts 0x0105, r24 ;  0x800105
 29c:   90 93 06 01     sts 0x0106, r25 ;  0x800106
 2a0:   a0 93 07 01     sts 0x0107, r26 ;  0x800107
 2a4:   b0 93 08 01     sts 0x0108, r27 ;  0x800108
 2a8:   bf 91           pop r27
 2aa:   af 91           pop r26
 2ac:   9f 91           pop r25
 2ae:   8f 91           pop r24
 2b0:   3f 91           pop r19
 2b2:   2f 91           pop r18
 2b4:   0f 90           pop r0
 2b6:   0f be           out 0x3f, r0    ; 63
 2b8:   0f 90           pop r0
 2ba:   1f 90           pop r1
 2bc:   18 95           reti
 2be:   78 94           sei
 2c0:   84 b5           in  r24, 0x24   ; 36
 2c2:   82 60           ori r24, 0x02   ; 2
 2c4:   84 bd           out 0x24, r24   ; 36
 2c6:   84 b5           in  r24, 0x24   ; 36
 2c8:   81 60           ori r24, 0x01   ; 1
 2ca:   84 bd           out 0x24, r24   ; 36
 2cc:   85 b5           in  r24, 0x25   ; 37
 2ce:   82 60           ori r24, 0x02   ; 2
 2d0:   85 bd           out 0x25, r24   ; 37
 2d2:   85 b5           in  r24, 0x25   ; 37
 2d4:   81 60           ori r24, 0x01   ; 1
 2d6:   85 bd           out 0x25, r24   ; 37
 2d8:   80 91 6e 00     lds r24, 0x006E ;  0x80006e
 2dc:   81 60           ori r24, 0x01   ; 1
 2de:   80 93 6e 00     sts 0x006E, r24 ;  0x80006e
 2e2:   10 92 81 00     sts 0x0081, r1  ;  0x800081
 2e6:   80 91 81 00     lds r24, 0x0081 ;  0x800081
 2ea:   82 60           ori r24, 0x02   ; 2
 2ec:   80 93 81 00     sts 0x0081, r24 ;  0x800081
 2f0:   80 91 81 00     lds r24, 0x0081 ;  0x800081
 2f4:   81 60           ori r24, 0x01   ; 1
 2f6:   80 93 81 00     sts 0x0081, r24 ;  0x800081
 2fa:   80 91 80 00     lds r24, 0x0080 ;  0x800080
 2fe:   81 60           ori r24, 0x01   ; 1
 300:   80 93 80 00     sts 0x0080, r24 ;  0x800080
 304:   80 91 b1 00     lds r24, 0x00B1 ;  0x8000b1
 308:   84 60           ori r24, 0x04   ; 4
 30a:   80 93 b1 00     sts 0x00B1, r24 ;  0x8000b1
 30e:   80 91 b0 00     lds r24, 0x00B0 ;  0x8000b0
 312:   81 60           ori r24, 0x01   ; 1
 314:   80 93 b0 00     sts 0x00B0, r24 ;  0x8000b0
 318:   80 91 7a 00     lds r24, 0x007A ;  0x80007a
 31c:   84 60           ori r24, 0x04   ; 4
 31e:   80 93 7a 00     sts 0x007A, r24 ;  0x80007a
 322:   80 91 7a 00     lds r24, 0x007A ;  0x80007a
 326:   82 60           ori r24, 0x02   ; 2
 328:   80 93 7a 00     sts 0x007A, r24 ;  0x80007a
 32c:   80 91 7a 00     lds r24, 0x007A ;  0x80007a
 330:   81 60           ori r24, 0x01   ; 1
 332:   80 93 7a 00     sts 0x007A, r24 ;  0x80007a
 336:   80 91 7a 00     lds r24, 0x007A ;  0x80007a
 33a:   80 68           ori r24, 0x80   ; 128
 33c:   80 93 7a 00     sts 0x007A, r24 ;  0x80007a
 340:   10 92 c1 00     sts 0x00C1, r1  ;  0x8000c1
 344:   ed e9           ldi r30, 0x9D   ; 157
 346:   f0 e0           ldi r31, 0x00   ; 0
 348:   24 91           lpm r18, Z
 34a:   e9 e8           ldi r30, 0x89   ; 137
 34c:   f0 e0           ldi r31, 0x00   ; 0
 34e:   84 91           lpm r24, Z
 350:   88 23           and r24, r24
 352:   99 f0           breq    .+38        ;  0x37a
 354:   90 e0           ldi r25, 0x00   ; 0
 356:   88 0f           add r24, r24
 358:   99 1f           adc r25, r25
 35a:   fc 01           movw    r30, r24
 35c:   e8 59           subi    r30, 0x98   ; 152
 35e:   ff 4f           sbci    r31, 0xFF   ; 255
 360:   a5 91           lpm r26, Z+
 362:   b4 91           lpm r27, Z
 364:   fc 01           movw    r30, r24
 366:   ee 58           subi    r30, 0x8E   ; 142
 368:   ff 4f           sbci    r31, 0xFF   ; 255
 36a:   85 91           lpm r24, Z+
 36c:   94 91           lpm r25, Z
 36e:   8f b7           in  r24, 0x3f   ; 63
 370:   f8 94           cli
 372:   ec 91           ld  r30, X
 374:   e2 2b           or  r30, r18
 376:   ec 93           st  X, r30
 378:   8f bf           out 0x3f, r24   ; 63
 37a:   c0 e0           ldi r28, 0x00   ; 0
 37c:   d0 e0           ldi r29, 0x00   ; 0
 37e:   81 e0           ldi r24, 0x01   ; 1
 380:   0e 94 70 00     call    0xe0    ;  0xe0
 384:   0e 94 dd 00     call    0x1ba   ;  0x1ba
 388:   80 e0           ldi r24, 0x00   ; 0
 38a:   0e 94 70 00     call    0xe0    ;  0xe0
 38e:   0e 94 dd 00     call    0x1ba   ;  0x1ba
 392:   20 97           sbiw    r28, 0x00   ; 0
 394:   a1 f3           breq    .-24        ;  0x37e
 396:   0e 94 00 00     call    0   ;  0x0
 39a:   f1 cf           rjmp    .-30        ;  0x37e
 39c:   f8 94           cli
 39e:   ff cf           rjmp    .-2         ;  0x39e

¿Será más fácil aplicar ingeniería inversa al código anterior o escribir desde cero un programa que (alerta de spoiler)

  

enciende y apaga un LED con un período de 2 segundos

?

Para ser más claros, este archivo se genera

  

a partir del ejemplo de parpadeo, compile, luego tome el archivo "Blink.ino.with_bootloader.hex" (el que obtendrá al leer la memoria de la atmósfera) y desarme con el comando avr-objdump -j .sec1 -d -m avr5 "Blink.ino.with_bootloader.hex" > "Blink.ino.with_bootloader.txt"

    
respondido por el frarugi87
3
  

¿Cómo bloquear ATMEGA328p-au para deshabilitar la lectura de bocetos del IDE de Arduino?

El IDE de Arduino no te permite leer "bocetos" en ningún caso. Está diseñado para cargar código en el chip, no al revés.

  

Se está dando a las personas, que tienen personal altamente técnico en la parte posterior ...

Si me dieran su dispositivo, dejaría de lado el IDE de Arduino y utilizaría un programador de ICSP (como el AVRISP) para leer el código (binario) del chip. Si tuviera la programación SPI deshabilitada, usaría un programador de alto voltaje (como el AVR Dragon) para hacer lo mismo.

Sin embargo, esto no me daría el código C ++ en el que se escribió el boceto. Me daría el código de máquina que generó el compilador. La cantidad de esfuerzo requerido para convertir eso de nuevo en código C ++ sería enorme. Sería mucho más rápido simplemente conseguir que alguien vuelva a codificar lo que sea que haga su dispositivo.

Si su código es útil sin modificación (por ejemplo, extrae Bitcoins), hacer una copia exacta podría ser útil. La gente simplemente puede duplicar el código de la máquina, ponerlo en 1000 chips y seguir adelante y hacer lo que sea que haga. Sin embargo, puede que no sea práctico, especialmente si tiene personalización (por ejemplo, mostrar el nombre del cliente en una pantalla LCD). Dicho esto, hacer un cambio menor como cambiar "Nick Gammon" como una cadena literal a "Fred Nurk" puede ser posible sin demasiado esfuerzo.

Como han dicho otros, puede cambiar los fusibles para que no pueda leerse el código de la máquina. Una vez que lo haga, lo único que usted (o cualquier otra persona) puede hacer es borrar el chip (que por lo tanto elimina el código) y luego cargar el nuevo código.

Esto lo protegerá de los intentos de duplicar su código.

En cuanto al cargador de arranque, personalmente apagaría el fusible BOOTRST para que el cargador de arranque no se ejecute y, por lo tanto, cualquier intento de que lea el contenido de la memoria del programa fallaría. De hecho, subiría el código sin ningún gestor de arranque para estar seguro. No se requiere que el cargador de arranque esté allí una vez que se haya cargado el código, y usted puede cargar el código sin usar un cargador de arranque.

  

¿Cuáles son las posibilidades de que pueda salir mal?

     

¿Qué pasará si sale mal?

Según los fusibles que cambie, puede bloquear usted mismo fuera del chip. Por ejemplo:

  • Si elimina el cargador de arranque, no podrá cargar bocetos desde el IDE de Arduino hasta que reemplace el cargador de arranque.

  • Si deshabilita el fusible BOOTRST no podrá usar el cargador de arranque hasta que lo vuelva a habilitar (suponiendo que el cargador de arranque esté presente).

  • Si deshabilita la programación SPI, no podrá cargar nada (incluido el cargador de arranque) a menos que tenga un programador de alto voltaje. El uso del programador de alto voltaje es un poco especializado, requiere 12V para ser aplicado al pin / RESET para poner el chip en el modo de programación de alto voltaje.

  • Si cambia los fusibles para evitar que se use el cargador de arranque y se lea el chip, entonces no podrá programar el chip utilizando el IDE de Arduino (a través del cargador de arranque) hasta que borre el chip. y vuelva a cargar un cargador de arranque.

Tengo una página sobre la programación de chips AVR utilizando programación de alto voltaje que también trata sobre los otros métodos de programación.

    
respondido por el Nick Gammon
0

Este hilo puede dar más información sobre cómo impide que se vuelvan a leer los contenidos de la memoria flash.

En cuanto al punto de vista de hardware, no se ha establecido ninguna condición específica o lo que el "atacante" podría hacer; ¿Solo tienen acceso al puerto de programación? Si es así, la aplicación de los pines de programación de una determinada manera evitaría que fueran controlados por un programador de ISP. ¿Pueden llegar al tablero? Clip de los pines.

"Ir mal" es demasiado general. Sin embargo, una cosa es segura: al hacer esto, es mejor que le guste el código que está en el chip, de lo contrario, tendrá una nueva adición a su contenedor de basura.

    
respondido por el Billy Kalfus
-1
  1. Vea este enlace en Arduino.SE y este enlace del foro de Arduino
  2. Sí, corta los pines que van al puerto USB
  3. Depende de lo que definas como "salir mal"
  4. Ver 3.
respondido por el MrGerber

Lea otras preguntas en las etiquetas