Плохо! Прошивка закрыта 7 байтным паролем, Я надеялся, что он открыт. Его даже не стереть! либо перебор, либо в помойку.
На Habr.ru есть статья, как человек перебирал пароль с помощью отладочной платы, используя в расчете время отрицательного ответа от мк, в случае не совпадения пароля.
вы ничего не путаете? Кто-то пытался подобрать 7-мибайтный пароль? вы представляете. сколько это вариантов?
Может 7ми битный?
Может он конечно что-то не договаривает, но например motorola HC08 имеет подобную защиту в виде 8 байтного , так называемого SS пароля. ETL его подбирает, ну максисмум три минуты...
если Вам интересно вот статья https://habr.com/ru/post/469085/
Скажите, пожалуйста, почему не работает процесс сложения в приведенном мной коде, с Вашими поправками. Я компилирую его в среде ардуино. может она не понимает некоторых обособлений?
Вы же наверное, пишите в другой среде.?
Мы с Семеном вам три способа, промежду прочим, дали - все три рабочие.
протестую :) мой тоже рабочий. подтверждение в #106
тов Дискавер просто что-то мутит с начальными данными, потому у него и не работает.
Думаю ардуина не понимает такой крутой подачи...a=(a++) | 0x10
стопор где-то тут.
Товарищи, проверьте у кого есть возможность на ардуино-среде код.
нет тут никакого замута. У меня среда 1.8.15
Думаю ардуина не понимает такой крутой подачи...a=(a++) | 0x10
Лично я избегаю инкремента и декремента в сложных выражениях. Ардуины китайские и никогда не знаешь - слева направо они считают или наоборот.
Говорят, что версии для арабов справа налево...
Лично я избегаю инкремента и декремента в сложных выражениях. Ардуины китайские и никогда не знаешь - слева направо они считают или наоборот. Говорят, что версии для арабов справа налево...
void setup() {
Serial.begin(9600);
uint8_t a = 0;
for (uint8_t c = 0; c < 4; c++) {
a++;
if (c > 1){ a = a | 0x10;}
else { a = a & 0x0f;}
Serial.println(a, HEX);
}
}
void loop() {}
но это еще не все. тут в коде есть еще одна ошибка, предлагаю Девелоперу самому ее найти :)
Я её обнаружил, когда прогнал код через монитор. при переходе от 1F к "0" получаем (1F+01 | 10 =30), но как компактно исправить это я не придумал. Может покажете как?
Еще я изучил метод sadman41 & DetSimen. - с виду куча условий, сдвигов, но если присмотреться, то все четко и понятно. Код в одну строчку!
r = i | ((i & 0x02) == 0x02) << 0x04;
Код проверил, работает вообще без нареканий! Еще раз Спасибо, что потратили время и привели примеры!
P.s. Я Вам не ленивая .опа. Мой код работает! просто он неуклюжий.
Ну надо же...
Плохо! Прошивка закрыта 7 байтным паролем, Я надеялся, что он открыт. Его даже не стереть! либо перебор, либо в помойку.
На Habr.ru есть статья, как человек перебирал пароль с помощью отладочной платы, используя в расчете время отрицательного ответа от мк, в случае не совпадения пароля.
вы ничего не путаете? Кто-то пытался подобрать 7-мибайтный пароль? вы представляете. сколько это вариантов?
Может 7ми битный?
Может он конечно что-то не договаривает, но например motorola HC08 имеет подобную защиту в виде 8 байтного , так называемого SS пароля. ETL его подбирает, ну максисмум три минуты...
если Вам интересно вот статья https://habr.com/ru/post/469085/
Скажите, пожалуйста, почему не работает процесс сложения в приведенном мной коде, с Вашими поправками. Я компилирую его в среде ардуино. может она не понимает некоторых обособлений?
Вы же наверное, пишите в другой среде.?
Нет, речь шла именно о 7-байтном. Идея как раз в том, чтобы подбирать байт за байтом (по одному). Т.е. вариантов всего 256*7=1792.
А разве, в абсолютном понимании, не 2^(7*8)?
upd: Если байт за байтом, то да действительно 256*7=1792.
Скажите, пожалуйста, почему не работает процесс сложения в приведенном мной коде,
в чем выражается, что "процесс сложения не работает"?
Например, если результат работы моего и вашего кода отличается - приведите исходные данные и результат в обоих случаях.
Скажите, пожалуйста, почему не работает процесс сложения в приведенном мной коде,
в чем выражается, что "процесс сложения не работает"?
Например, если результат работы моего и вашего кода отличается - приведите исходные данные и результат в обоих случаях.
Я без претензий к Вам. Просто спрашиваю.
Вот так работал мой старый с поправкой от sadman41: 1A,1B,0C,0D,1E,1F.
С Вашим работает вот так: 10,10,00,00,10,10.
Нет пересчета в младшем ниббле.
проверяю
uint8_t a=0, c =0, b=0; for (c =0; c<4;c++) { if (c >1) a = (a++) | 0x10; else a = (a++) & 0x0f; printf("0x%02x\n",a); }результат
покажите ваш код целиком
Вот
uint8_t a=0x00,b=1, c=0; bool one=true,two=false; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { for(c=0;c<4;c++){ if(a<0x10){Serial.print("0");Serial.println(a,HEX);} else{Serial.println(a,HEX);} if (c > 1) a=(a++) | 0x10; else a= (a++) & 0x0f; } }а как а и с описаны?
приложил полностью.
не вижу разницы со своим кодом.
Конкретно ваш код попробую вечером, на работе у меня ардуины нет.
не вижу разницы со своим кодом.
Конкретно ваш код попробую вечером, на работе у меня ардуины нет.
Даже вот так не работает... Наверное, среда ардуины не понимает такой многозадачности..))
void loop() { for (c =0; c<4;c++) { if (c >1) a = (a++) | 0x10; else a = (a++) & 0x0f; Serial.println(a,HEX); } }вот такой код загрузите в дуину и выложите результат.
ничего не добавляйте
void setup() { Serial.begin(9600); uint8_t a =0; for (uint8_t c =0; c<4;c++) { if (c >1) a = (a++) | 0x10; else a = (a++) & 0x0f; Serial.println(a,HEX); } } void loop() {}Вот
судя по выводу, код не точно мой.
Посмотрите. я его подредактировал.
Скопируйте его один в один и запустите
судя по выводу, код не точно мой.
Посмотрите. я его подредактировал.
Скопируйте его один в один и запустите
выборка была взята произвольно из посылки...
код не компилируется. поле loop пустое.
код не компилируется. поле loop пустое.
исправил
выборка была взята произвольно из посылки...
какой, нафик, посылки?!
Поставьте a =0; и не выдумывайте.
Когда это заработает - тогда будете к посылкам применять.
void loop() {}
код не компилируется. поле loop пустое.
исправил
выборка была взята произвольно из посылки...
какой, нафик, посылки?!
Поставьте a =0; и не выдумывайте.
Когда это заработает - тогда будете к посылкам применять.
Тихо...тихо... я имел ввиду что выборка взята не с самого первого символа из порта а произвольно с середины, но в начале все тоже самое.
Код перезалейте, я беру его из 112 сообщения
Код перезалейте, я беру его из 112 сообщения
Дискавер, судя по всему, придется вам подождать, пока я домой приду.
void loop() {}
сделано.
ответ
Код перезалейте, я беру его из 112 сообщения
Дискавер, судя по всему, придется вам подождать, пока я домой приду.
Ради БОГА! Трудитесь на здоровье.! )
Все таки не аппарат ИВЛ собираю...
Мы с Семеном вам три способа, промежду прочим, дали - все три рабочие.
Мы с Семеном вам три способа, промежду прочим, дали - все три рабочие.
протестую :) мой тоже рабочий. подтверждение в #106
тов Дискавер просто что-то мутит с начальными данными, потому у него и не работает.
не надо адманывать, я нерабочий дал.
Мы с Семеном вам три способа, промежду прочим, дали - все три рабочие.
протестую :) мой тоже рабочий. подтверждение в #106
тов Дискавер просто что-то мутит с начальными данными, потому у него и не работает.
Думаю ардуина не понимает такой крутой подачи...a=(a++) | 0x10
стопор где-то тут.
Товарищи, проверьте у кого есть возможность на ардуино-среде код.
нет тут никакого замута. У меня среда 1.8.15
не надо адманывать, я нерабочий дал.
Ну ничего, я ж подправил.
Мы с Семеном вам три способа, промежду прочим, дали - все три рабочие.
Спасибо Вам огромное. Я их проанализирую на будущее, но признаться код b707 выглядит лаконичнее.
Важно понять почему не работает.
Думаю ардуина не понимает такой крутой подачи...a=(a++) | 0x10
Лично я избегаю инкремента и декремента в сложных выражениях. Ардуины китайские и никогда не знаешь - слева направо они считают или наоборот.
Говорят, что версии для арабов справа налево...
Гриша, если это не стеб - там же скобки :)))
Писать надо всё таки по человечески )))
void setup() { Serial.begin(9600); uint8_t a = 0; for (uint8_t c = 0; c < 4; c++) { a++; if (c > 1){ a = a | 0x10;} else { a = a & 0x0f;} Serial.println(a, HEX); } } void loop() {}Писать надо всё таки по человечески )))
необязательно. Вот так тоже работает
(Ардуино Уно, ИДЕ1.8.3)
void setup() { Serial.begin(9600); uint8_t a =0; for (uint8_t c =0; c<4;c++) { if (c >1) a = (++a) | 0x10; else a = (++a) & 0x0f; Serial.println(a,HEX); } } void loop() {}результат
странно, но похоже на постинкремент скобки не всегда действуют. В линуксе действовали. а в ардуине нет
В принципе, логично, так как запись (a++) отдает неким идиотизмом :)
но это еще не все. тут в коде есть еще одна ошибка, предлагаю Девелоперу самому ее найти :)
странно, но похоже на постинкремент скобки не всегда действуют. В линуксе действовали. а в ардуине нет
Я же грю - китайская.
Я же грю - китайская.
не, это похоже мой код китайский.
Я её обнаружил, когда прогнал код через монитор. при переходе от 1F к "0" получаем (1F+01 | 10 =30), но как компактно исправить это я не придумал. Может покажете как?
Еще я изучил метод sadman41 & DetSimen. - с виду куча условий, сдвигов, но если присмотреться, то все четко и понятно. Код в одну строчку!
Код проверил, работает вообще без нареканий! Еще раз Спасибо, что потратили время и привели примеры!
P.s. Я Вам не ленивая .опа. Мой код работает! просто он неуклюжий.