Возможность обратного проектирования некоторого встроенного кода - PullRequest
5 голосов
/ 01 мая 2010

All

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

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

Спасибо, Фред

Ответы [ 6 ]

4 голосов
/ 01 мая 2010

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

2 голосов
/ 01 мая 2010

См. Ответы на программы обратного инжиниринга c

В частности, см. Мой ответ со ссылкой "Свиньи на колбасу". Компания, стоящая за этим документом, может сделать неплохую работу по преобразованию ассемблера обратно в C, если рассматриваемый ассемблер не делает то, что вы не можете указать в C (например, «Установить регистр указателя стека ...») .

[Я не имею ничего общего с парнями из Pigs-to-Sausages, за исключением того, что встретился и очень уважаю их техническое руководство.]

2 голосов
/ 01 мая 2010

Довольно большое "это зависит".

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

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

Также обратите внимание, что встроенный контроллер, «написанный на C», может иметь довольно много ассемблера в своем исходном коде. Так что либо вы разрешаете ассемблер в своей версии с обратной инженерией, либо нет. Если вы этого не сделаете, может быть невозможно воспроизвести функциональность на C. Если вы это сделаете, то где вы проводите черту - в крайнем случае вы можете просто разобрать их исходный код и вообще не иметь никакого надлежащего кода на C. Вы не можете точно определить из изучения объектного кода, какие биты были написаны на C, а какие нет.

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

0 голосов
/ 04 мая 2010

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

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

0 голосов
/ 02 мая 2010

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

0 голосов
/ 01 мая 2010

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

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

...