Jump to content

Recommended Posts

И кстати, дизасемблеры не всегда правильно реверсят код. Тут нужна ручная работа по направлению дизасемблера внужное русло, чтобы он не пытался дизасемблировать ресурсы расположенные в флеше как исполняемый код и наоборот, не считал безликими данными участки флеша на которые нет прямых указателей/переходов а где-то в программе может быть косвенный вызов процедуры. Особенно это актуально для программных интерфейсов и динамических объектов. А для этого нужно досконально знать работу исследуемого микроконтроллера, это очень кропотливый и неблагодарный труд. Кроме того, у вас не будет никаких имен процедур и меток, вам их надо будет восстанавливать по смыслу исполняемого кода, а для этого нужен огромный опыт написания программ. И не на С++, а максимум чистый С. Ибо плюсы дают такую простыню кода, особенно после оптимизатора что человеческому мозгу там делать нечего. Хотя, из-за характерных паттернов автоматически воссоздавать исходный код будет даже проще, если отладчик знает версию компилятора которым он компилировался. Но опять же, никаких имен идентификаторов, только безликие цифровые адреса и сидеть угадывать имена процедур, методов и объектов. Это имеет смысл только при стоимости прошивки от 10000$ и то многие подумают прежде чем взяться.

Share this post


Link to post
Share on other sites

IDA Pro хорошо справляется с данными в памяти программ, имею опыт. Дизассемблирует почти идеально.

Но, не смотря на заявляемое "восстановление до Си-исходника", не умеет это делать для AVR.

 

Share this post


Link to post
Share on other sites
1 час назад, ARV сказал:

"восстановление до Си-исходника"

 

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

Восстановить неизвестно чем созданный код корректно невозможно.

Share this post


Link to post
Share on other sites

Руководство для разработчика приложений на базе STM32WB55

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

Читать статью

3 часа назад, my504 сказал:

Восстановить неизвестно чем созданный код корректно невозможно

Я бы так категорично не стал утверждать, а высказался бы так: пока невозможно. Человек может это сделать, значит, когда-нибудь сможет и программа.

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

Share this post


Link to post
Share on other sites
                     

Контроль в спящем режиме: повышение КПД батарейного питания с помощью DC/DC MAX17225 nanoPower

В статье описан практический опыт разработчика, применившего повышающий DC/DC-преобразователь MAX17225. В результате ряда практических экспериментов, потребовавших существенного обновления технической базы компании-разработчика, автор убедительно доказывает преимущества выбранного компонента и схемотехнической реализации. Увеличенное на 50% время автономной работы лучше других аргументов говорит об эффективности конвертеров MAX17225, а также о важности предварительной оценки элементной базы.

Подробнее

1 час назад, ARV сказал:

Человек может это сделать, значит, когда-нибудь сможет и программа.

Человек тоже не сможет. Если только код не совсем примитивен. А если он еще и оптимизирован, то вообще никакому восстановлению не подлежит.

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Если речь идет о восстановлении алгоритма, а не исходника, то человек в состоянии это сделать. Но это не в состоянии сделать автомат, то есть другой алгоритм. Ибо это задача связана с абстрактным человеческим мышлением, то есть с ИНТЕЛЛЕКТОМ. И речь может тут идти только об искусственном интеллекте. А это совершенно другая история...

 

Share this post


Link to post
Share on other sites
12 часа назад, ARV сказал:

Человек может это сделать, значит, когда-нибудь сможет и программа.

программа уже может. Я недавно пытался разбираться с дизасемблированным в С-код бинарником одного аудиокодека.

Не получилось потому что код использовал внешние таблицы не доступные дизасемблеру, с хитрой навигацией по ним,

а так ничего сложного :) !

Там получается один файл в моем случае 60 тысяч строчек кода, вот такого (если интересно):

//----- (0040B690) --------------------------------------------------------
signed int __cdecl sub_40B690(int a1)
{
  signed int result; // eax@2
  signed int v2; // eax@3
  _DWORD *v3; // ecx@3
  int v4; // esi@8
  int v5; // ST0C_4@8
  int v6; // ST08_4@8

  if ( a1 )
  {
    v2 = 0;
    v3 = (_DWORD *)(a1 + 12);
    do
    {
      if ( !*v3 )
        break;
      ++v2;
      v3 += 14;
    }
    while ( v2 < 31 );
    if ( v2 == 31 )
    {
      result = -1;
    }
    else
    {
      v4 = a1 + 56 * v2;
      *(_DWORD *)(v4 + 16) = 0x2000000;
      v5 = *(_BYTE *)(v4 + 18);
      v6 = *(_BYTE *)(v4 + 19);
      *(_DWORD *)(v4 + 12) = 5;
      sub_402010((char *)(v4 + 24), aD_D_D_0, v6, v5, 0);
      *(_DWORD *)(v4 + 4) = aJun262012_0;
      *(_DWORD *)(v4 + 8) = a145950;
  ...

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
27 минут назад, ARV сказал:

для винды и пары ходовых компиляторов

Только не для компиляторов, а для ассемблеров. Про компилятор которым это что то было скомпилировано и слинковано, оно знать ни чего и не должна в общем то.

Share this post


Link to post
Share on other sites
4 часа назад, ruhi сказал:

Только не для компиляторов, а для ассемблеров

Почитайте про IDA Pro, чтобы не говорить таких странных и не правильных вещей.

Share this post


Link to post
Share on other sites
Только что, ARV сказал:

Почитайте про IDA Pro, чтобы не говорить таких странных и не правильных вещей.

не хочу :), итак башка лопается

Share this post


Link to post
Share on other sites
17 часов назад, ARV сказал:

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

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

Мало того, что нужно написать код, так ведь его еще нужно как то осмысленно совершенствовать. Восстановленный подобными инструментами код ущербен в принципе. В нем можно разобрать 99% смысла, при том, что вся новизна останется в неразобранном 1%. 

Беспонтовый инструмент...

ЗЫ. Могу дать упражнение для примера сказанного мной выше. Есть пара функций обработки сигнала. АСМ без комментариев и осмысленных названий переменных и меток. Предлагается определить алгоритм обработки сигнала реализуемый этими двумя функциями. Причем результат одной нужен при работе другой.

Слабо? :crazy::bye:

Edited by my504

Share this post


Link to post
Share on other sites
3 часа назад, my504 сказал:

Слабо?

Сколько платите? И в какие сроки ;) ибо только это определяет, слабо или нет.

Share this post


Link to post
Share on other sites

Я реверс-инжинирингом ПО занимался пару раз, и некоторое время следил, как этим занимаются другие. Полноценный реверс алгоритма по коду не делается, приходится и тесты всякие делать, и в "песочнице" запускать и сравнивать... Дело непростое, но выполнимое.

Что касается смысла, то я вполне согласен с вами: заниматься восстановлением исходника на ЯВУ занятие бессмысленное и бесперспективное. Однако, если за это платят... почему нет?

В реальном реверсе нет нужды не только в получении полного исходника на ЯВУ, но и в понимании точного алгоритма. Как правило, всегда интересует тот самый 1%, и то, скорее всего, лишь в плане того, как его обойти или выдрать и применить в своём коде. В основном приходится искать команду JNZ с целью заменить её на JZ :) Ну или 10...110 таких команд.

Edited by ARV

Share this post


Link to post
Share on other sites
8 часов назад, ARV сказал:

Сколько платите? И в какие сроки

:lol:

Это МОЙ код. Это УПРАЖНЕНИЕ. Ребус. За него не платят. 

Точнее, если и платят, то составителю ребуса.  :crazy:

Share this post


Link to post
Share on other sites
38 минут назад, my504 сказал:

Ребус. За него не платят. 

Точнее, если и платят, то составителю ребуса.

:) а приз решившему ребус?

Share this post


Link to post
Share on other sites
21 минуту назад, Дмитрий Мамедиев сказал:

 только два входа для отслеживания сигнала int0 и int1. Мне нужно три, есть альтернатива?

Есть!

image001.png.ad4e97b6ada3a25bf5cd6aff7a412a43.png

Share this post


Link to post
Share on other sites
36 минут назад, Дмитрий Мамедиев сказал:

Мне нужно три, есть альтернатива?

вход таймера можно использовать - его тоже можно сконфигурировать на отлов фронтов, но придется исхитриться, хотя может получиться даже лучше чем на простых INT-ах,

зависит от специфики задачи.

Compare там есть?

Edited by ruhi

Share this post


Link to post
Share on other sites
48 минут назад, Дмитрий Мамедиев сказал:

Мне нужно три, есть альтернатива?

Где то встречал такой вариант. В прерывании проверяем пины и по их состоянию определяем какой сигнал вызвал это прерывание. Таким способом можно сделать целую кучу!

WhatsApp Image 2019-05-20 at 15.46.31.jpeg

Share this post


Link to post
Share on other sites

Доброго времени. Хочу найти ресурс где можно подробно почитать про компиляцию и линковку проекта для stm32f103 в линуксе. В гугле много инфы на счет самого мейка и с ним более менее понятно, а вот процесс компиляция под конкретный контроллер мне найти не удалось. Хотелось бы узнать на зависимости файлов CMSIS и весь алгоритм. Хочу научится компилировать проект из консоли, а в идеале прикрутить все необходимое к нужному мне текстовому редактору. Рассматривал готовые мейкфайлы, но написаны они достаточно сложно для моего познания в синтаксисе мейка. Пока планирую написать хотя бы элементарный мейк.

Edited by Mars36

Share this post


Link to post
Share on other sites
10 часов назад, Дмитрий Мамедиев сказал:

два входа для отслеживания сигнала int0 и int1. Мне нужно

Любой порт так же поддерживает прерывания по перепаду уровня, для некоторых целей их вполне можно использовать. Но есть ньюансы. Прерывание по порту - одно на все выводы, но раз тебе нужно просто третье то не имеет значения. Просто разрешить прерывание только по одному выводу порта, и его изменение будет дёргать обработчик. И второй ньюанс - в отличие от int0/1 это прерывание синхронное и стробируется частотой ядра, короткие импульсы короче двух периодов тактовой частоты можно упустить... Фронт и спад не различает - одинаково реагирует на оба. Не работает в режиме глубокого сна - этим прерыванием вывести контроллер с глубокого сна нельзя.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Jesterary
      Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. 
      Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями.
      Если у кого-то такое получалось - поделитесь, пожалуйста :)
      А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
    • By Sofia Vin
      Предлагаем проектную работу в Москве:
      Микроконтроллер STM32F103.
        
      Есть встроенный код с использованием функций библиотеки FreeRTOS, код имеет описанный протокол для связи с внешним миром.
        
      Необходимо проводить доработку кода под задачи программиста верхнего уровня и его тестирование в составе оборудования. 
      Работа в лаборатории (м.Университет) и удаленно. 
      Оплата по договоренности.
      Если Вы обладаете опытом схемотехнического проектирования и программирования микроконтроллеров, и Вас заинтересовала данная возможность, ждем Ваши отклики по контактным данным:
      8 (925) 023-60-02   Алексей
      E-mail: nassa@marathon.ru
       
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
  • Сообщения

    • Пора прекращать этот пустой трёп нервов! Я не пытаюсь открывать Америку! Это простые очевидные вещи из практики. Кто-то и так поймёт с полуслова. А кому-то приходится доказывать! А стоит ли? Всё-равно один сверх умный, а второй глупый и дурной как пробка. Дурной, что пытается что-то доказывать. Просто надо сразу уходить в сторону. И не вступать в пустую полемику. Это как в анекдоте: "Один утверждает, что трава кошенная, а другой - стриженная".  
    • https://vrtp.ru/index.php?showtopic=26768&st=0 https://pro-radio.ru/measure/3288/
    • Это не подозрение, это факт. И не только от видеокарты. На линиях питания внутри компьютера в районе звуковых частот вообще-то жуть. На некоторых блоках "жужжание" вообще в колонках/наушниках слышно. И особо ничего не сделаешь. Экраны сильно не помогут - доля наводки через паразитные ёмкости гораздо меньше "пролаза" по питанию/"земле". Поэтому стараются раздобыть внешние звуковые карты. Наверное, под "дБ" тут имелись в виду проценты?  
    • @KRAB Опять незаслуженный наезд. У вас фирменный прибор. Щуп встроен в корпус. И под него произведена калибровка. У меня длина щупов 1метр. Для удобства пользования. Мне так больше нравится. Вы собирали когда нибудь Манфреда. Дрейф нуля видели какой. Могу на видео снять подробно. А то Вы не верующий. Нечего сравнивать фирменные приборы с самопальными. Самопальные - это пробники. У них другое назначение и особая точность тут особо не нужна. Мы же говорим о диагностике без выпаивания. Щупы HB-14 вообще идеальный вариант. Они вообще не вносят никакой паразитной ёмкости. Но мы же рассматриваем самопалы. Частота импульса 100 кГц, учтите ёмкость и индуктивность проводов ( два провода по 1 м ). Вот откуда берётся паразитная генерация. Вы батенька теоретик, как я вижу. Соберите и сами всё увидите, прежде чем умничать. Да возьмите фабричный щуп-делитель 1:10 и на частоте 1 кГц посмотрите форму сигнала. На делителе есть подстроечный конденсатор, которым корректируется форма фронта импульса. Потом удлините кабель РК-100 вдвое. И посмотрите что у Вас получится. Ёмкость кабеля удвоится и уже выравнить форму импульса Вы не сможете. Но это 1 кГц. А 100 это уже другой разговор.
    • Получается по всем параметрам лучше, буду пробовать.Спасибо!  
    • чем меньше, тем лучше забей практически ...
    • не ну просто нет слов ... БРЕД ... сказывается в ЕСР-метрах как раз ПЕРЕХОДНОЕ СОПРОТИВЛЕНИЕ в зоне-ЩУП-ПЕЧАТНЫЙ ПРОВОДНИК-ПИН КОНДЕНСАТОРА, особенно при значительных емкостях с малым ЕСР ... а нужно было НА ДРУГОЕ обращать внимание ... и не так правильный щупы для ЕСР-метра делаются ... если по науке ... но я покажу - вот СЛАПомметр - ты про такое и не слышал, наверное ... а рядом еще некоторые из моих ЕСР-метров:  
×
×
  • Create New...