Вы действительно не хотите вносить подобные изменения, используя информацию из IDA pro.
Несмотря на то, что разборка IDA является относительно качественной, ее недостаточно для поддержки перезаписи исполняемого файла. Преобразование вызова sprintf в вызов snprintf требует добавления нового аргумента в стек. Это требует введения новой инструкции, которая влияет на советник всего, что следует за ним в исполняемом образе. Обновление этих эффективных адресов требует чрезвычайно качественной разборки. В частности, вам необходимо уметь:
- Определите, какие адреса в исполняемом файле являются данными, а какие - кодом
- Укажите, какие операнды команд являются символическими (адресные ссылки), а какие операнды команд являются числовыми.
Ида не может (достоверно) предоставить вам эту информацию. Кроме того, если исполняемый файл статически связан с crt, он может не содержать snpritnf, что очень усложнит выполнение перезаписи вручную.
Есть несколько потенциальных обходных путей. Если в (или после) функции, выполняющей вызов, имеется достаточное количество отступов, вам, возможно, удастся избежать переписывания только одной функции. Кроме того, если у вас есть доступ к объектным файлам, и эти объектные файлы были скомпилированы с ключом / GY (при условии, что вы используете Visual Studio), то вы можете редактировать объектный файл. Однако редактирование объектного файла может все еще потребовать существенных исправлений.
Предположительно, однако, если у вас есть доступ к объектным файлам, у вас, вероятно, также есть доступ к источнику. Смена источника - это, вероятно, ваша лучшая ставка.