Для бинарного аудита, один из руки вниз лучшие инструменты, которые вы обязательно есть, это Interactive Disassembler, также лучше известный как IDA Pro. Это необходимо, когда вам нужно провести аудит без доступа к исходному коду.Кто-то, кто владеет IDA Pro, сможет с достаточной уверенностью сказать вам, если в исходном коде было нечто большее, чем поверхностные изменения. В этом контексте поверхностные изменения охватывали бы такие вещи, как переименование переменных в исходных файлах или изменение порядка объявлений переменных, функций или классов и определений. Они смогут рассказать вам, есть ли у базовых блоков кода, составляющих исполняемые файлы, различия между ними достаточно существенными, чтобы их можно было помечать как подозрительные, в том смысле, что существует высокая вероятность того, что различия указывают на разницу на уровне источника.
Я говорю более или менее, потому что существует несколько способов, в которых два исполняемых файла, сгенерированных из одного и того же исходного дерева, могут по-прежнему иметь тонкие, а иногда и не столь тонкие различия между собой. Факторы, которые могут оказать влияние на генерацию исполняемых файлов включают: настройки оптимизации
- компилятора
- различных версии библиотек исполняемых файлы связаны с
- изменений в файлах заголовков, внешние по отношению к дереву исходных текстов, используемое для создания исполняемых файлов , которые были включены препроцессором C++ до этапа компиляции
- исполняемый файл, который управляет своим собственным кодом во время выполнения, который может включать в себя декомпрессию или дешифровку на лету, какую-то часть себя в какую-то область памяти, он может перейти на
И этот список может продолжаться некоторое время.
Является ли вид бинарного аудита, который вы предлагаете? Да, человек с достаточными знаниями и навыками мог бы это сделать. Хакеры делают это все время. И если человек, делающий анализ, достаточно хорош, они смогут точно сказать, насколько они уверены в своей оценке.
В конечном счете, вопрос будет осуществлен. Сколько вы готовы потратить на этот аудит? Наем или заключение контрактов с кем-то, кто может это сделать, может выходить за рамки того, что предусмотрено бюджетом для такого аудита, достаточно ли денег для этого? Насколько сложно тестировать программное обеспечение? Какова природа ваших отношений с вашим продавцом?
Этот последний вопрос важен, потому что, если он в своих интересах пройти этот аудит, и они это осознают, они могут быть готовы помочь вам в определенной степени. Это может происходить в форме отладочных символов, списка используемых параметров компилятора или некоторых других артефактов процесса сборки, которые они готовы раскрывать. Предыдущие могут быть очень полезны при любом анализе , где исходный код не, который был сделан доступным для целей анализа по любой причине. И если доступ к исходному коду является доступным для такой цели, вещи становятся на порядок легче анализировать.
Если это то, что вы хотели бы заниматься самостоятельно, две книги, которые я рекомендовал бы это The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler Криса Орла и The Shellcoder's Handbook: Discovering and Exploiting Security Holes Криса Anley, Джон Heasman, Феликс Линдер и Херардо Richarte.
Наконец, методы и инструменты, разработанные для анализа такого рода, который поможет вам, по-прежнему являются очень активными областями исследований. Ваш вопрос либо проходит глубже, чем вы можете понять, или, возможно, меня неправильно поняли. Тщательная трактовка вашего вопроса, даже с практической точки зрения и игнорирования теории, которая идет вместе с ней, может и заполняет многие книги.
Надеюсь, вы найдете хотя бы часть этой полезной информации. Удачи!
Если у вас есть код и протестирован его, почему бы не скомпилировать его самостоятельно? Почему они даже отправили вам еще один exe без более проверяемого кода? – Karl
@Karl: Я ничего не вижу в вопросе, который подразумевает, что у искателя есть источник. Во всяком случае, для крупных, компонентных приложений не обязательно необычно, что новая версия содержит компоненты, которые были перестроены без изменений кода. – bk1e