Удаление подписи из Mach-O файла может быть сложной задачей, и ваш подход в целом правильный, но есть несколько моментов, на которые стоит обратить внимание, чтобы избежать ошибок.
1. **Структура Mach-O файла**: Убедитесь, что вы корректно изменили заголовок файла и все соответствующие поля. Вам нужно не только уменьшить размер команд и количество команд, но также убедиться, что все связанные поля (например, размеры сегментов и секций) обновлены правильно.
2. **Проверка целостности**: После удаления подписи проверьте, что остальные части файла не повреждены. Возможно, изменение размера или перемещение данных привело к тому, что какие-то другие структуры стали некорректными.
3. **LDID и другие инструменты**: Ошибка, с которой вы столкнулись, указывает на то, что инструмент (в данном случае ldid) ожидает, что указатель конца файла будет совпадать с размером файла минус некоторые служебные данные. Возможно, стоит проверить, правильно ли вы обновили все поля, связанные с сегментом `__LINKEDIT`, так как он хранит все метаданные и подписи.
4. **Тестирование**: Попробуйте выполнить процесс в несколько этапов и проверять файл после каждого изменения. Это поможет быстрее выявить, где именно проблема возникает.
Убедитесь, что вы следите за следующими аспектами:
- Размеры сегментов `__TEXT`, `__DATA` и `__LINKEDIT`.
- Укажитесь, что вы не случайно затерли данные из других секций или сегментов; например, если есть дополнительные секции, которые начинаются сразу после подписи.
- Понимание структуры данных подписи и её размещения на уровне байтов.
Если у вас будет возможность, попробуйте охватить подписание другого файла и сравнить его структуру с вашим отредактированным файлом. Это поможет удостовериться, что изменения сделаны правильно и что структура на высшем уровне сохранена.