Как стать автором
Поиск
Написать публикацию
Обновить
72.02

Реверс-инжиниринг *

Расковырять и понять как работает

Сначала показывать
Порог рейтинга

Почему так важен патентный поиск при обратном инжиниринге

Обратный инжиниринг (или, как его еще называют, — реверс-инжиниринг) — это оценка имеющихся и применяемых на практике определенных объектов техники. Цель — получить информацию (техпризнаки и параметры устройства), чтобы использовать эти данные в том числе и для возможного последующего производства.

Что следует учитывать при обратном инжиниринге?

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

2. Обратный инжиниринг производится обычно в несколько этапов:

  • Если интересующий вас партнер или производитель оборудования ушел из России, то первоначально надо оценить, какие действующие патенты есть у него. Здесь следует учитывать, что отсутствие юридической документации у проверяемого юрлица не гарантирует ничего: вполне вероятно, что защищаемая интеллектуальная собственность будет оформлена на аффилированные лица или на других (даже независимых) субъектов;

  • Далее — осуществив такой предварительный поиск, необходимо перейти к следующей фазе: важно оценить замещаемый объект (как полностью, так и по частям) на патентную чистоту. Результаты подобного исследования — правильно оформить. Например, если посредством обратного инжиниринга оценивается вещество, то следует указать его состав, а также формулу соединений. Если рассматривается то, как будет производиться тот или иной объект, — необходимо определить параметры создания его (совершенные производителем действия за промежуток времени).

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

Все слишком сложно. Можно доступнее?

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

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

Сразу отметим: грань между законным и потенциально нарушающим — очень тонкая. Для выработки правильной политики в данном направлении необходимо обратиться к патентному поверенному.  

Еще есть какие-то варианты реверс-инжиниринга?

Да. У вас есть промышленный образец. После обратного инжиниринга вы сможете получить качественные данные об используемых визуальных решениях в конкретном объекте.

Секрет производства (ноу-хау) тоже, кстати, поддается обратному инжинирингу. После его оценки — вы можете получить данные о составе используемого материала или вещества; посмотреть то, каким образом создавался объект, каковы технологические условия. Однако использовать на практике подобные сведения проблематично: обладатели секрета производства вполне могут подать в суд на нарушающего их права. 

Можно ли получить какие-либо выгоды от обратного инжиниринга?

Да. Министерство промышленности РФ реализует грантовую программу. В конце 2024 года ведомство отчитывалось о поддержке 350 проектов подобного типа за 2,5 года работы: 72 из них — перешли в стадию серийного производства, по 71-ому — на тот период времени шла подготовка к запуску.

Патентный поиск можно заказать здесь.

Теги:
+2
Комментарии2

Нужно было быстренько перехватить вызов нативной функции и посмотреть значение переменной в Android приложении. Как то давно использовал для этого замечательную утилиту Frida. Установил на планшет frida-server (root уже был) и клиент на PC, написал классический JS хук, но он не работал:

defineHandler({
  onEnter(log, args, state) {
    conslole.log('decoder_CRC_check()');
  },

  onLeave(log, retval, state) {
    const libc = Module.findBaseAddress('libc.so');
    console.log(hexdump(libc, {
      /* address: ptr('0x1000'), -- to override the base address */
      offset: 0,
      length: 64,
      header: true,
      ansi: true
    }));
  }
});

В консоли лишь получал TypeError: not a function at onEnter (D:\Distrib\Android TV\frida\hook.js:7)

Убил полдня в поисках "чего я делаю не так", при том что и официальная дока и нейронки твердят, что именно так и нужно получать базовый адрес модуля и, при необходимости, функций. Оказалось, во Frida 17 автор полностью удалил некоторые функции (а дока и нейронки еще не обновились):

  • Module.ensureInitialized()

  • Module.findBaseAddress()

  • Module.getBaseAddress()

  • Module.findExportByName()

  • Module.getExportByName()

  • Module.findSymbolByName()

  • Module.getSymbolByName()

  • Туда же статические функции Memory

И теперь надо писать цепочку вызовов:

const lib = Process.findModuleByName("libc.so");
console.log("[*] libc.so loaded at base: " + lib.base);
const funcAddr = lib.findExportByName("decoder_CRC_t_init");

Итог получился такой универсальный скрипт:

Java.perform(function () {
	const System = Java.use("java.lang.System");
    const Runtime = Java.use('java.lang.Runtime');
    const SystemLoadLibrary = System.loadLibrary.overload('java.lang.String');
    const VMStack = Java.use('dalvik.system.VMStack');
    // "ожидание"\перехват динамической загрузки нативных библиотек
    SystemLoadLibrary.implementation = function(library) {
		console.log("Loading dynamic library => " + library);
        const loaded = Runtime.getRuntime().loadLibrary0(
            VMStack.getCallingClassLoader(), library
        );
        if (library.includes("mylibname")) {
            console.log("\n[+] Hooked mylibname");
            // перехватываем только нужную нам
            hookNativeFunc();
        }
        return loaded;
    }	
});

function hookNativeFunc() {
    //тут имя полностью как называется сам файл в ресурсах
	const lib = Process.findModuleByName("libmylibname.so");
    console.log("[*] mylibname.so loaded at base: " + lib.base);
    const funcAddr = lib.findExportByName("decoder_CRC_t_init");
    if (!funcAddr) {
        console.log("[-] Function not found!");
		return;
    }
    console.log("[+] Found decoder_CRC_t_init at: " + funcAddr);
    Interceptor.attach(funcAddr, {
        onEnter: function (args) {
            var result = args[0];
            var inputPtr = args[1];
            var len = args[2].toInt32();
            console.log("\n[+] decoder_CRC_t_init called");
            console.log("    result:    " + result);
            console.log("    inputPtr:  " + inputPtr);
            console.log("    len:       " + len);
        },
        onLeave: function (retval) {
            //нужный адрес массива, например из IDA PRO
            const wordArrayOffset = 0x5B2C04;
            const wordArray = lib.base.add(wordArrayOffset);
			var ptr = new NativePointer(wordArray); // современный вариант чтения
            console.log("[*] 5B2C04 contents:");
            try {
                console.log(hexdump(ptr, {
				  offset: 0,
				  length: 512,
				  header: true,
				  ansi: true
				}));
            } catch (e) {
                console.log("[!] Error reading 5B2C04:", e);
            }
            console.log("Return value:", retval);
        }
    });
}

Запускается так frida -U -f com.android.app -l hook.js

Теги:
+6
Комментарии5

Запускаем MIPI DSI экраны от смартфонов 🚀

Приветствую, друзья! Некоторое время назад мне удалось-таки сделать обратную разработку нескольких экранов от смартфонов с интерфейсом MIPI DSI.

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

Обратная и прямая разработки поскакали в одной упряжке.)

Посмотрим живой процесс разработки. Это всегда интересно!

Будем надеться, скоро выйдет эта серия статей.

Подписывайтесь и следите за обновлениями, чтобы не пропустить! 🚀

Интересна ли вам эта тема? Что интересует больше всего?

Теги:
Всего голосов 7: ↑7 и ↓0+9
Комментарии3

Реверс-инжиниринг: вспоминаем истории
(рассказываю свою, делитесь похожими байками в комментариях)

AI, нарисуй, как ты понимаешь реверс-инжиниринг
AI, нарисуй, как ты понимаешь реверс-инжиниринг

Однажды я останавливался в европейском отеле. В номере была капсульная кофеварка (на тот момент это было довольно круто) и набор разных сортов кофе. Проблема заключалась в том, что утром я люблю выпить чаю (и, желательно, с самого утра, без походов в ресторан отеля).

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

Взял я ручку, линейку и срисовал штрих-код с капсулы на клочок бумажки. Потом положил ее на считыватель кофеварки, закрыл крышку и вуаля, хитрый аппарат выдал мне кипяток! Я получил чай и +100500 к самооценке.

А что у вас?

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии6

Восставший из коррозии: реинкарнация одного «роботрона»

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

Вместо двух десятков мелких корпусов RAM и ROM я поставил по одной микросхеме памяти каждого типа, так как теперь это не дефицит. Особый интерес представлял последовательный порт RS-232 — на оригинальной плате он не был распаян, хотя функционал работы с ним в прошивке был! А значит, очень высок шанс, что интерфейс заведется.

Проект замерзает еще на пару лет, пока один из подписчиков, тов. Folk, не взялся за отрисовку платы в KiCAD. Месяц неспешной работы, и к январю 2022 года рождается она — новая плата для «Роботрона». Разрабатывалась плата один в один по габаритам старой, даже основные детали были на тех же самых местах. И тут я допустил три стратегических просчета...

Полная история восстановления и даже апгрейда Robotron S6130в статье Артёма Кашканова.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Пользователь Reddit рассказал, что проанализировал с помощью нейросети Claude 3.7 EXE-файл на Visual Basic 27-летней давности и смог с помощью простого промта провести реверс-инжиниринг программы так, чтобы нейросеть переписала её на Python.

Это была старая программа на Visual Basic 4, написанная в 1997 году. Запуск exe-файла VB4 в 2025 году может стать настоящим кошмаром совместимости, требующим поиска устаревших DLL и сложных обходных путей.

Пользователь загрузил файл exe в Claude 3.7 с таким запросом: «Можете ли вы сказать мне, как запустить этот файл? Было бы неплохо преобразовать его в Python».

Claude 3.7 проанализировала двоичный файл, извлекла токены VB (VB не является языком, полностью компилируемым в машинный код, что делает эту задачу намного проще, чем что‑то из C/C++), идентифицировала элементы пользовательского интерфейса и даже извлекла звуковые файлы.

Затем нейросеть сгенерировала полный эквивалент приложения на Python с помощью Pygame. По словам автора, код заработал с первой попытки, и весь процесс занял менее пяти минут.

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии1

Что поменяется после принятия закона о белых хакерах

Коротко:

Пользователи, которые приобрели ПО, смогут проводить пентесты для поиска ошибок и уязвимостей. Теперь это не будет нарушением авторского права. Правда, об обнаруженных в софте недостатках придется сообщать его владельцам в течение пяти рабочих дней, если их данные есть в открытом доступе. А вот взять и рассказать о недоработках, например, на Хабре, просто так нельзя.

Чуть подробнее:

Текущее законодательство разрешает пользователям изучать и менять ПО, чтобы понять, как оно работает, или исправить ошибки. Однако это разрешение не распространяется на тестирование безопасности. Например, чтобы провести пентест при аттестации объектов инфраструктуры, нужно привлекать лицензиатов ФСТЭК, но даже они сталкиваются с рядом рисков из-за актуальных формулировок.

По мнению экспертов в сфере ИБ, в текущем виде законопроект легализует «домашний хакинг». При этом он оставит в серой зоне тестирование облачных решений, а также, например, сайтов и порталов заказчика, если они расположены не на собственной инфраструктуре.

Пока законопроект принят только в первом чтении. До вступления в силу в нем могут произойти изменения. Подробности читайте в Академии Selectel.

Теги:
Всего голосов 5: ↑5 и ↓0+10
Комментарии0

Есть (были) такие термопринтеры Paperang. Вот только оказалось, что под капотом там несколько протоколов. Изначально пакеты обрамлялись байтами 0x02 ... 0x03.

Насчитал еще три варианта: с первыми байтами 0x07 , 0xA5 и вариант общения по IPP.

Разбирался с Paperang P2.

{0xA5, 0x01} - префик

два байта длины

полезная нагрузка

crc32(4 байта)

0x5A - суффикс

{5,0x19,1,0,0}

5 - команда относится к термопечати

25 - начало передачи растра изображения

третий байт может быть 1/2/3 - АХЗ. В респонсе обычно 2. В данных, которые посылаются на принтер 1 (из андроид приложения) или 3 ( драйвера под винду)

int16(0) - длина аргументов

Сам растер засылается по типу матрешки. (тип,длина,((тип,длина,данные),(тип,длина,((тип,длина,(данные))))))

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Вклад авторов