Цитата Сообщение от танкист Посмотреть сообщение
После подачи питания, при старте камня, код смотрит на ПЗУ - не "моё"...
And here's what happens when the code is hooked to call my code:
000167BE ; r0 - slot in sata_req
000167BE sub_0_167BE:
000167BE PUSH {R4-R7,LR}
000167C0 MOVS R7, R0
000167C2 LD R6, =hookedAddr
000167C4 BX R6
000167C6 .dw checksumFix
000167C8 .dd hookedAddr
000167CC LDR R2, =stru_0_40028DC
000167CE STR R1, [SP,#0x28+var_1C]
000167D0 LDRB R0, [R6,#(off_0_FFE3F108+2 - 0xFFE3F0FC)]
000167D2 LDRB R5, [R6,#(off_0_FFE3F108 - 0xFFE3F0FC)]
000167D4 LSLS R0, R0, #4
вот и "посмотрел"...

перевод для людей: "посмотреть" означает, грубо говоря, сложить все байты (слова) и сверить получившуюся контрольную сумму (см. Циклический_избыточный_код)с образцом -- если не совпадает, значит, что-то сломалось, и надо вешаться (ну или загружать самую древнюю, захардкоженную прямо в камне базовую прошивку, например).

однако, если вы рассчитываете потом еще многократно обновляться, нельзя отливать в граните слишком надежный способ защиты от изменений. поэтому его и делают таким, чтобы он легко обходился. ибо он не для защиты от злодеев, а для защиты от случайных ошибок. обходится она элементарно -- в код добавляется пара байт, которые работают как еще одно слагаемое, добивающее сумму нового кода до суммы старого.

там в статье еще на самом деле несколько избыточно сложный метод перехвата управления описан. можно проще и менее фирмварьно-зависимо отыграть. но это уже детали. главное, что анбешный хак продемонстрировал один любитель на коленке, в свободное время, не обладая никакими инсайдами и даже специфическими знаниями по теме не обладая. а ты думаешь, что АНБ, с его конским бюджетом, персоналом и возможностями неограниченно потрошить коммерсов на ДСП-шные доки все это на конвейер не поставят?